話者ダイアライゼーション
概要
話者ダイアライゼーションとは
話者ダイアライゼーション(Speaker Diarization)は、複数人が話している音声において『どの部分を誰が話しているのか』を推定する機能のことです。 たとえば、複数人が参加している会議を1台のマイクで録音したとき、発言毎に話者を区別するのに役立ちます。
以下の図は、田中さんと山田さんが会議で話している様子を1つのマイクで録音した例です。この音声には、2人の発言がひとつのトラックに記録されています。
AmiVoice APIの話者ダイアライゼーション機能を使うと、以下の図のように「この区間は『speaker0』の発言」、「この区間は別の話者である『speaker1』の発言」といった具合に、各発言を話者ごと に区別できます。
この機能は個人を特定するものではありません。そのため『speaker0』が山田さんに、『speaker1』が田中さんに相当するということはアプリケーション側で取り扱う必要があります。
APIについて
話者ダイアライゼーションを使うには、音声認識のリクエスト時にオプションパラメータを指定します。話者ダイアライゼーションの結果は単語単位で得られます。音声認識レスポンスの中の単語単位の結果にlabelが追加され、『speaker0』や『speaker1』のような話者を区別するためのラベルが設定されます。
話者ダイアライゼーションの結果の例:
"tokens": [
{
"written": "アドバンスト・メディア",
"confidence": 1,
"starttime": 522,
"endtime": 1578,
"spoken": "あどばんすとめでぃあ",
"label": "speaker0"
},
{
"written": "は",
"confidence": 1,
"starttime": 1578,
"endtime": 1834,
"spoken": "は",
"label": "speaker0"
},
{
"written": "、",
"confidence": 0.95,
"starttime": 1834,
"endtime": 2010,
"spoken": "_",
"label": "speaker0"
},
/* 以下、省略 */
利用方法
話者ダイアライゼーションを使うには、音声認識のリクエスト時に以下の表にあるリクエストパラメータを設定します。
表. 話者ダイアライゼーションのリクエストパラメータ
| インタフェース | 有効にするためのパラメータ | 調整のためのパラメータ |
|---|---|---|
| 同期 HTTP / WebSocket | segmenterPropertiesにuseDiarizer=1を設定 | segmenterPropertiesのdiarizerTransitionBias、diarizerAlpha |
| 非同期 HTTP | speakerDiarization=Trueを設定 | diarizationMinSpeaker、diarizationMaxSpeaker |
リクエスト時に指定するオプションパラメータは、インタフェースによって異なりますので注意してください。得られる結果はインタフェースによらず同じフォーマットです。
リクエストパラメータが異なっているのは、同期 HTTP や WebSocket インタフェースと、非同期 HTTP インタフェースとでは話者ダイアライゼーションの手法が異なっているからです。同期 HTTP や WebSocket インタフェースでは、音声ストリームに対して発話区間を検出する際に話者ダイアライゼーションを行います。そのため、発話区間検出のパラメータであるsegmenterPropertiesに対する設定を行います。
一方、非同期 HTTP インタフェースの場合は、音声ファイル全体が手元にある状態で話者ダイアライゼーションを行います。設定は、非同期 HTTP 固有のパラメータで行います。
このセクションでは、まずは話者ダイアライゼーションを有効にする方法をインタフェースごとに説明し、その後に精度を改善するためのパラメータについて説明します。
リクエスト
話者ダイアライゼーションを有効にして、リクエストする方法をインタフェースごとに説明します。
同期 HTTP インタフェース
話者ダイアライゼーションを有効にするには、segmenterPropertiesにuseDiarizer=1を設定します。 同期 HTTP では、segmenterPropertiesは、リクエストパラメータのdパラメータに設定します。
例を使って説明します。話者ダイアライゼーションを利用しない場合、AmiVoice API のサンプルプログラムに同梱している音声を curl コマンドを使って汎用エンジンで音声認識する場合は以下のようにコマンドを実行します。
curl https://acp-api.amivoice.com/v1/recognize \
-F u={APP_KEY} \
-F d="grammarFileNames=-a-general" \
-F a=@test.wav
話者ダイアライゼーションを有効にするには、以下のようにします。
curl https://acp-api.amivoice.com/v1/recognize \
-F u={APP_KEY} \
-F d="grammarFileNames=-a-general segmenterProperties=useDiarizer=1" \
-F a=@test.wav
このとき、パラメータの順序は重要ではありません。また、他のパラメータも合わせて設定できます。同期 HTTP インタフェースのリクエスト方法の詳細は、音声認識のリクエストの送信を参照してください。
WebSocket インタフェース
話者ダイアライゼーションを有効にするには、segmenterPropertiesにuseDiarizer=1を設定します。WebSocket インタフェースでは、segmenterPropertiesは、WebSocketで接続した後、はじめに送信するsコマンドに設定します。
例を使って説明し ます。話者ダイアライゼーションを利用しない場合、汎用エンジンで音声認識するには以下のようにリクエストを行います。
s 16K -a-general authorization={APPKEY}
話者ダイアライゼーションを有効にするには、以下のようにパラメータを追加します。
s 16K -a-general authorization={APPKEY} segmenterProperties=useDiarizer=1
sコマンドは、音声フォーマット、エンジン名を必ず設定する必要がありますが、それに続くパラメータの順番は変更しても構いません。また、他のパラメータも合わせて設定できます。WebSocket インターフェースを使ったリクエストの方法については、認識要求の開始を参照してください。