文字起こしで分かるのは、何を話したか。インタビュー、会議、ポッドキャストでは、誰が話したかも同じくらい重要です。音声研究ではこれを話者ダイアライゼーション(speaker diarization)と呼びます。iPhone 1.8.5、Mac App Store 1.3.2、公式サイトから直接ダウンロードするMac版1.5.1以降では、Whisper Notesがこの処理をすべてデバイス上で行います。
この記事では仕組みとクラウド生成の正解データに対するベンチマークを公開し、どうしても解消できなかった失敗パターンと、その代わりに実装した対策も説明します。
できること
録音、読み込んだ音声や動画、会議録音などのノートを開き、話者ボタンを押します。数秒後には、各段落に話者ラベルとタイムスタンプが付きます。
MacとiPhoneの話者ラベル。文をタップすると、その時点から音声を再生できます。
最初は「話者1」「話者2」と表示されます。一度名前を変更すれば、文字起こし全体に反映されます。どの文からでも音声の該当箇所へ移動できるので、引用を元の声と照合するのも簡単です。
話者名を変えると、ノート内のすべての段落が更新されます。
会議録音では通話終了後に話者識別を自動実行します(設定で無効にできます)。ラベルは書き出し後も残ります。話者付き文字起こしをコピーではクリップボードへ、SRTとVTTでは字幕へ話者名を引き継ぎます。
話者分離が見るのは言葉ではなく声です。そのため、アプリが文字起こしに対応する100以上の言語で同じように動作します。
Neural Engineで動く19 MBのモデル
話者分離は「誰がいつ話したか」を3段階で判定します。音声を発話区間に分け、各区間を声紋へ変換します。声紋とは、言葉ではなく声そのものを表す小さなベクトルです。最後に声紋をクラスタリングし、同じクラスタの区間へ同じラベルを付けます。
Whisper Notesはpyannoteのcommunity-1パイプラインをCore MLへ変換し、両段階をNeural Engineで実行します。初回ダウンロードは19 MB。MシリーズMacなら5.7分の会話を2–4秒で処理します。
音声 → 発話区間 → 声紋 → クラスタ → ラベル
すべての処理がデバイス上で完結します。
この点は、文字起こし以上に話者分離で重要です。声紋は指紋と同じように人を識別する生体情報です。ローカル処理なら、自分、同僚、取材相手の声紋はデバイス上で計算、分類、破棄され、外部へ送られません。
測定方法と結果
話者分離には固定した2つの音声ファイルを使っています。正解データはクラウドのASR・話者分離サービス(ElevenLabs)で作成して人手で確認。音声を10 ms単位で話者へ割り当て、出力と正解の最も良い対応で採点します。2ファイルは小規模なベンチマークなので、数値は目安であり決定的な評価ではありません。
1つ目は一般的な条件です。声質がはっきり異なる2人が話す、5分間の英語ポッドキャスト。多くのインタビュー、ポッドキャスト、1対1の会議はこの条件に近いでしょう。
| 2話者の英語ポッドキャスト(5分) | 結果 |
|---|---|
| フレーム単位の話者割り当て(10 ms解像度) | 96.7% |
| 文単位の精度(画面で読む結果) | 99.1% |
| 処理時間(MシリーズNeural Engine) | 2–4秒 |
残る0.9%は、合計3.4秒に相当する3か所の境界ずれです。これは正解データ自体の解像度に近い差です。このような音声では、オンデバイス結果は正解データを作ったクラウドサービスと同等でした。
難しいケース
2つ目は意図的に難しい音声です。部屋の残響の中で声が似た男性2人が話し、司会者が平均2.3秒の短い相づちを19回入れます。ゲストの発話は272秒、司会者は43秒です。これは、似た声が短い発話を交わすという、言語を問わず話者分離を破綻させる音響条件です。
ここでは自動クラスタリングが破綻します。2つの声紋が近すぎるため、アルゴリズムが統合し、会話のほぼすべてを1人へ割り当てます。この録音はたまたま中国語のインタビュー番組だったため、言語に特化したモデルなら改善するという明らかな仮説を検証できました。中国語音声で学習した2つの話者モデルをCPUパイプラインで比較しました。
| モデル | 英語ポッドキャスト | 難例* | 時間(5.7分の音声) |
|---|---|---|---|
| pyannote community-1(採用モデル、Neural Engine) | 96.7% | 81–82% | 2–4秒 |
| CAM++(中国語学習、CPU) | 93.9% | 81.2% | 36–103秒 |
| ERes2NetV2(中国語学習、CPU) | — | 80.5% | 220–290秒 |
* 難しい音声で、話者数を指定した場合のフレーム単位の割り当て精度。指定しないと、どのモデルもほぼ単一話者へ収束します。
どちらも10~100倍の計算量を使いながら、同じ形で破綻しました。難しさは言語ではなく音響にあります。現在の話者埋め込みが何を区別できるかという限界は、どの言語でも同じです。
そこでモデル変更ではなく、推定できない情報——その場に何人いるか——を与えることにしました。メニューで2~6人を指定すると、この難例は破綻状態から文単位89%まで改善します。一般的な音声では正しく動くため、自動検出を標準のままにしています。
正確な話者数を指定して再検出。同じメニューから話者ラベル付きSRTとVTTも書き出せます。
短い相づちを補正する
話者数を固定しても、残る誤りのおよそ半分は3秒未満の相づちでした。2秒の音声では埋め込みモデルが得られる情報が少なく、テンポの速い会話では隣の話者の声も声紋へ混ざります。
そこでクラスタリング後、3.5秒未満の文を再評価します。文のフレームだけを覆うマスクで声紋を再計算し、各話者のアンカー——最も長い発話の平均——と比較。差が十分明確な場合だけラベルを変更します。既存モデルを再利用するため、追加ダウンロードはありません。
| 文単位の最終精度 | 補正前 | 補正後 |
|---|---|---|
| 難例(話者数を指定) | 89.0% | 94.8% |
| 英語ポッドキャスト(自動) | 98.5% | 99.1% |
判定基準は保守的です。2ファイルで21個のラベルを変更し、新たな誤りは1件も増えませんでした。
制限
• ラベルが付くのは録音終了後で、通話中ではありません。会議中に話者名付きリアルタイム字幕が必要なら、OtterやNottaのようなクラウドサービスが適しています。
• 発話が重なる場合、1つの文には1人分のラベルだけが付きます。
• 似た声の区別は依然として困難です。難例の94.8%は話者数を指定した現在の上限であり、解決済みという意味ではありません。
提供バージョン
話者識別は$6.99の買い切り価格に含まれます。3つの文字起こしエンジン——Parakeet V3、Whisper Large V3 Turbo、SenseVoice——とローカルAI編集も同じ価格です。別プランやアカウントはありません。
• iPhone:App Store、バージョン1.8.5以降。
• Mac App Store:バージョン1.3.2以降。
• Mac Direct Download(DMG):バージョン1.5.1以降。whispernotes.appから無料トライアルをダウンロードできます。
会議録音そのものの仕組みは、オフライン会議文字起こしの記事で説明しています。