Amazon Transcribeで1on1の会話ポゼッションを可視化してみた

f:id:ecb_kkanazawa:20201207215704p:plain

こんにちは。ecbeing金澤です。
普段はReviCoや他のプロダクトの開発リーダーをやりつつ、管理職としてチームのマネジメントもやったりしています。

1on1でついつい喋りすぎちゃう問題

プロダクト開発統括部では、個人の面談に1on1を取り入れています。
1on1はコーチングの場と言われており、基本的にはメンティー(部下)が喋り、メンター(上司)はその内容に対してフィードバックをする。
という流れが理想なのですが、自分が普段どのくらい喋っているかというのは、なかなか自分では分からないもの。

「見えない問題は解決できない」ので、どうにか可視化できないか考えていたところ
Amazon Transcribeを使えば計測できそう、ということに辿り着きました。

Amazon Transcribeとは

音声をテキストに変換してくれるAWSのサービスです。
https://aws.amazon.com/jp/transcribe/

最大10人までの声を聞き分けられるのですが、テキストと一緒に「○秒~○秒までは誰が喋った」というデータも出力してくれるので、
それを足し合わせたら、どちらが何%喋っているのか分かるのでは?と思いました。
(この記事ではそれを「会話ポゼッション」と呼ぶことにします)

実際にやってみる

1on1を録音する

試しに、同じチームのメンバーの宮原との1on1を録音してみることにしました。
普通にスマホアプリ等で録音すれば良いのですが、
Amazon Transcribeが対応しているフォーマットは
「MP3, MP4, WAV, FLAC, AMR, OGG, WebM」なのでご注意を。
(AACで録音しちまった…)

録音したファイルは、S3の適当な場所にアップしておきます。

Amazon Transcribeに食わせる

Amazon Transcribeのコンソールから「Create job」で新しいジョブを作ります。

f:id:ecb_kkanazawa:20201207205934p:plain

以下のように設定していきます。

項目名 説明
Name 適当に入れればOK
Model Type General Model
Language settings Specific language
Language Japanese, JP (ja-JP) を選ぶ



f:id:ecb_kkanazawa:20201207212819p:plain
1ページ目の続き

項目名 説明
Input file location on S3 音声ファイルのパス
Output data location type info 音声ファイルと同じ場所に出力したいので Customer specified S3 bucket を選ぶ
Output file destination S3 S3のパス&出力ファイルの名前を指定する。拡張子は .json



f:id:ecb_kkanazawa:20201207212952p:plain
2ページ目

項目名 説明
Audio identification ONにする
Audio identification type Speaker identification
Maximum numbers of speakers 喋っている人数。2を入力する
それ以外 全部OFFでOK



Createを押して、Completeになるまで待ちます。 f:id:ecb_kkanazawa:20201207213137p:plain

S3にJSONファイルが出来上がっています。 f:id:ecb_kkanazawa:20201207214216p:plain

結果のJSONを見てみる

JSONはこのような形で出力されます。

{
  "jobName":"20201124_1on1_kanazawa_miyahara",
  "accountId":"************",
  "results":{
    "transcripts":
      [
        {"transcript":"音声のテキスト(省略)"}
      ],
  "speaker_labels":{
    "speakers":2,
    "segments":[
      {
        "start_time":"4.52",
        "speaker_label":"spk_1",
        "end_time":"7.07",
        "items":[
          {
            "start_time":"4.52",
            "speaker_label":"spk_1",
            "end_time":"4.6"
          },
          …(省略)
        ]
      },
      …(省略)
    ]
  },
  "items": [
    …(省略)
  ],
  "status":"COMPLETED"
}

この「speaker_labels->segments」のデータを使います。
発言者は spk_0、spk_1、…とラベリングされているので、speaker_label ごとに秒数を足し合わせていきます。
なお、誰にどのラベルが割り当てられたかは、実際に音声ファイルを聞きながら自分で判断することになります…。
(「seguments->items」の中に更にコマ切れになったデータが入っていますが、これは下部のitemsと紐付いていて、 Alternative results が格納されるみたい?です)

秒数を足し合わせていく

どうやっても良いんですが、まあこんな感じで…

<?php
$json = json_decode(file_get_contents('20201124_1on1_kanazawa_miyahara.json'));

$results = [];
foreach ($json->results->speaker_labels->segments as $s) {
  $time = $s->end_time - $s->start_time;
  if (!isset($results[$s->speaker_label])) {
    $results[$s->speaker_label] = 0;
  }
  $results[$s->speaker_label] += $time;
}

var_dump($results);
結果
喋った時間 会話ポゼッション
私(メンター) 540.13秒 50.4%
宮原(メンティー) 531.32秒 49.6%


(´-`).。oO(俺めっちゃ喋ってんなーーーーー)

ちなみに、プロダクト開発統括部のボスである渡邊と金澤の1on1も計ってみました。

喋った時間 会話ポゼッション
渡邊(メンター) 473.41秒 43.8%
私(メンティー) 608.45秒 56.2%


渡邊はメンティーに自省を促すのが(少なくとも金澤よりは)上手く、
金澤は結構毎回べらべら喋っているので、もっと会話ポゼッションが低いと思っていましたが、案外そうでもありませんでした。

あと、1on1は毎回30分なのですが、どちらも1,800秒ある中で1,100秒くらいしかお互い喋っていないのは面白い傾向だなぁと思いました。

結論

メンティーの会話ポゼッションが高い=良い1on1だ、とは必ずしも言えませんが、
とりあえず次回はもっと聞き役に徹するのと、効果的な問いかけができるように準備して臨もうと思います。
「ヤフーの1on1」をもう1度読み直そう…。



~ecbeingでは、組織運営も一緒に試行錯誤してくれるメンバーを募集しています~ careers.ecbeing.tech