話者ダイアライゼーション
別名:話者ラベル
更新日:
定義
話者ダイアライゼーションとは、録音の中で誰がいつ話したかを判別し、文字起こし結果に話者ごとのラベルを付けられるようにする処理です。「何が話されたか」ではなく「誰が話したか」に答えます。
ダイアライゼーションは、音声認識とは別のモデルです。声の変化を聞き取り、同じ人のように聞こえる区間をまとめ、それぞれにラベルを付けます。名前が割り当てられるまでは、通常「話者1」「話者2」のようなラベルです。文字起こし結果と組み合わせると、各行に発言者が示された、おなじみの議事録の形になります。
これは文字起こしの機能であり、音声入力の機能ではありません。音声入力では話者は1人、つまり自分だけなので、音声入力ツールにダイアライゼーションは必要なく、それがないことで評価を下げるべきではありません。会議、インタビュー、ポッドキャストを文字起こしする場合は、これがあるかどうかで、読める文字起こしになるか、ただの文字の塊になるかが変わります。
なぜ難しいのか
声の似た2人、風邪で声が変わった1人、重なり合う発話、そして全員を同じ部屋の音に均してしまうノートパソコンのマイク。これらはどれもクラスタリングを失敗させます。話者の人数は、分かっているのではなく推測されることがほとんどです。最も優れたシステムでも、ポッドキャストのように交互に話すクリーンな音声ではうまく機能しますが、3人が同時に話す実際の会議ではかなり精度が落ちます。ラベルは手で直すつもりでいてください。
どのツールにあるのか
Otter.aiのような会議の文字起こしツールは、この機能を中心に製品を作っています。MacWhisperのようなファイルの文字起こしツールは、録音に話者ラベルを付けられます。音声入力ツールには一般にありません。話者が2人になることがない用途だからです。ダイアライゼーションが必須条件なら、探しているのは文字起こしツールです。
Macで録音に話者ラベルを付ける方法
オープンソースのツールキットpyannote.audioは、話者ダイアライゼーションをコンピュータ上で実行します。誰がいつ話したかを、各発話の開始時刻と終了時刻とともに示します。単語は出力しないので、音声認識で作った文字起こしと組み合わせて使います。
以下の手順ではコミュニティパイプラインを使います。CC-BY-4.0ライセンスで公開されており、ダウンロードには無料のHugging Faceアカウントが必要です。
- ffmpegがインストールされていることを確認します。インストールするには、たとえば次を実行します:brew install ffmpeg
- ターミナルで次を実行してツールキットをインストールします:pip install pyannote.audio
- Hugging Faceにサインインし、pyannote/speaker-diarization-community-1のページで利用条件に同意します。
- hf.co/settings/tokensでHugging Faceのアクセストークンを作成します。
- Pythonで、パイプライン名とトークンを渡してPipeline.from_pretrainedでパイプラインを読み込み、オーディオファイルに対して呼び出します。
- 出力のspeaker_diarizationフィールドをループで処理し、各発話の開始時刻、終了時刻、話者ラベルを読み取ります。
- 話した人数がわかっている場合は、パイプラインを呼び出すときにnum_speakersを渡します。範囲しかわからない場合は、min_speakersとmax_speakersを渡します。
WhisperやParakeetは話者を区別できますか?
できません。どちらも音声認識モデルで、話者にラベルを付けるようには作られていません。Whisperのモデルカードには、話者の分類や話者ダイアライゼーションについては十分に評価されていないと書かれています。NVIDIAのParakeet TDT 0.6B v2のモデルカードにも、機能として話者ダイアライゼーションは挙げられていません。
Whisperの論文には、関連する癖も記録されています。初期のモデルは、話者の名前について、もっともらしいもののほぼ必ず間違った推測を書く傾向がありました。学習用の文字起こしの多くに話している人の名前が含まれていたためです。著者らは、話者の注記がない文字起こしでファインチューニングして、この挙動をなくしました。認識モデルだけで作った文字起こしに話者の名前が含まれていても、信用しないでください。
ダイアライゼーションの精度の測り方
標準の指標はダイアライゼーション誤り率(DER)で、パーセントで表し、低いほど優れています。3種類の誤りを合計したものです。存在しない発話を検出する誤検出、実際の発話が誰にも割り当てられない検出漏れ、発話が別の人に割り当てられる話者の取り違えです。
単語誤り率と同じく、採点のルールによって数値が変わります。話者が切り替わる前後の短い時間(カラー)を誤りとして数えない評価もあれば、重なった発話を除外する評価もあります。pyannoteのベンチマークは、カラーを設けず、重なった発話も除外しないと明記しており、こちらのほうが厳しい条件です。出典の異なるDERの数値を比べる前に、この2つの条件を確認してください。
よくある質問。
文字起こしにおけるダイアライゼーションとは?
文字起こし結果に、話していた人ごとのラベルを付けることです。ダイアライゼーションモデルが声の変化を検出し、区間を話者ごとにまとめるので、会議の文字起こしが1つの塊ではなく会話として読めるようになります。
音声入力ソフトは話者ラベルを付けられますか?
ほとんど付けられません。音声入力の話者は1人だからです。話者ラベルは、会議やファイルの文字起こしツールの機能です。必要なら文字起こしツールを、リアルタイムの音声入力が必要なら音声入力アプリを選んでください。
Whisperは話者ダイアライゼーションができますか?
できません。Whisperは単語を書き起こすもので、モデルカードには話者ダイアライゼーションについては十分に評価されていないと書かれています。話者ラベルを得るには、オープンソースのpyannote.audioパイプラインのような別のダイアライゼーションモデルを実行し、そのタイムスタンプを文字起こしと組み合わせます。
ダイアライゼーション誤り率とは何ですか?
ダイアライゼーション誤り率(DER)は、話者ラベル付けの精度を表す標準の指標で、低いほど優れています。誤検出、発話の検出漏れ、別の話者に割り当てられた発話を合わせたものです。
話者ダイアライゼーションはMacでオフラインで実行できますか?
はい。オープンソースのpyannote.audioのコミュニティパイプラインはコンピュータ上で動作し、一度ダウンロードすればインターネットに接続しなくても使えます。