メインコンテンツまでスキップ

話者ダイアライゼーション

概要

話者ダイアライゼーション(Speaker Diarization)とは、複数人が話している音声に対して、話者ごとに発話区間を推定する機能です。例えば、ひとつのマイクで会議を録音しても、ここからここまでの発言はAさん、ここからここまではBさん、といった区別をつけることができるようになります。

図. 話者ダイアライゼーションのイメージ

note

2022-06-22 時点で話者ダイアライゼーション機能は、非同期 HTTP 音声認識 API でのみ対応しています。

利用方法

音声認識のリクエスト時に、dパラメータにspeakerDiarization=Trueのように設定することで、話者ダイアライゼーション機能が有効になります。

AmiVoice API のサンプルプログラムに同梱している音声を curl コマンドを使って、話者ダイアライゼーションを有効にして非同期音声認識 API を実行する場合は以下のようにします。

curl -X POST https://acp-api-async.amivoice.com/v1/recognitions \
-F u={APP_KEY} \
-F d="grammarFileNames=-a-general speakerDiarization=True" \
-F a=@test.wav

結果は、単語単位で得られます。単語の区間の推定話者が、tokenごとの結果のlabel項目に、"speaker0"、"speaker1"、"speaker2", ...のように得られます。

    "tokens": [
{
"confidence": 1.0,
"endtime": 1578,
"spoken": "あどばんすとめでぃあ",
"starttime": 570,
"written": "アドバンスト・メディア",
"label": "speaker0"
},
{
"confidence": 1.0,
"endtime": 1850,
"spoken": "は",
"starttime": 1578,
"written": "は"
"label": "speaker0"
},
{
"confidence": 0.77,
"endtime": 2010,
"spoken": "_",
"starttime": 1850,
"written": "、"
"label": "speaker0"
},
note

事前に声紋の登録が不要な代わりに、”誰”が話しているのかはわかりませんので、"speaker0"のような話者ラベルが、誰に相当するのかはアプリケーション側でうまく取り扱ってください。

精度向上のヒント

話者数の指定

音声に含まれる話者の数を指定することで精度を改善できます。音声に含まれると想定される最小の人数(diarizationMinSpeaker)、最大の人数(diarizationMaxSpeaker)をそれぞれ与えることができます。

note
  • diarizationMinSpeakerdiarizationMaxSpeakerに何も指定しないと、1〜10名の間で推定します。
  • 最大推定話者数は10名を想定していますが、それ以上にも設定できます。

もし、音声に含まれる話者の数が正確に分かる場合、例えば、これから開始する会議に参加する人数が5名だと分かっている場合は、リクエスト時のdパラメータにdiarizationMinSpeaker=5diarizationMaxSpeaker=5を追加することで、推定の精度をかなり向上させることができます。

curl コマンドを使った場合の例:

curl -X POST https://acp-api-async.amivoice.com/v1/recognitions \
-F u={APP_KEY} \
-F d="grammarFileNames=-a-general speakerDiarization=True diarizationMinSpeaker=5 diarizationMaxSpeaker=5" \
-F a=@test.wav

音質の改善

話者ダイアライゼーションも音質が悪くなるほど精度が下がる傾向にあります。エコーが入らないようにする、など録音環境を改善することで精度を改善できる可能性があります。

複数話者の同時発話を避ける

複数話者が連続して発話するときに誤りが増える傾向にあります。アプリケーションを工夫できる場合は連続的に話をしないようにすることで精度改善できます。

制限事項

話者ダイアライゼーションを有効にすると、送信できる音声の長さが最大 3 時間となります。それよりも長い音声データを送信すると、リクエスト時にエラーを受け取ることになります。

話者ダイアライゼーションを利用しない場合は、非同期 HTTP 音声認識 API へ送信できる音声はサイズで制限されており、約 2.14GB の音声データまで送信できます。

参照

サンプルアプリケーション

Windows上で動作するC#を使ったサンプルアプリケーション(SpeakerDiarizationSampleApp)の作成方法をテックブログで紹介しています。ソースコードもGitHubで公開していますので参考にしてください。