【2026年】NeMo・VibeVoice・Pyannoteで話者分離(Speaker Diarization)を徹底検証してみた
要約
NeMo・VibeVoice・Pyannoteの3大ツールで話者分離(Speaker Diarization)を実際に検証。討論系動画ではVibeVoiceがDER 9%台と実用レベルの精度を達成した一方、ドラマ系は最良でも27%と課題が残る結果に。背景音分離により、NeMo ClusteringやMSDDのようなクラスタリングベースのモデルでは最大4〜5ポイントのDER改善をもたらすケースがあった。データ特性によってモデルの優劣が大きく変わるため、用途別の選び方を徹底解説する。
話者分離とは何か
話者分離(Speaker Diarization)とは、音声データの中で「誰が・いつ・何を話しているか」を時系列で識別・分離する技術だ。
音声認識(ASR)が「何を言っているか(What)」を扱うのに対し、話者分離は「誰が言っているか(Who)」という別軸の問題を解く。
主なユースケースは以下のとおりだ:
- 会議・ポッドキャストの議事録自動生成
- 動画字幕・吹き替えへの話者ラベル付与
- コールセンターの会話分析
- マルチスピーカー音声処理
DER(Diarization Error Rate)とは
精度評価で使われる標準指標。計算式は以下の通り:
DER = (Confusion + Missed Detection + False Alarm) / Total Reference Duration
| 指標 | 意味 |
|---|---|
| Confusion | 別の話者として誤分類された時間 |
| Missed Detection | 発話を検出できなかった時間 |
| False Alarm | 発話がないのに発話と判定した時間 |
値が低いほど精度が高い。DER 10%以下なら実運用レベルとみなせる目安だ。
検証環境と評価指標
| 項目 | 内容 |
|---|---|
| 動画A | ドラマ系・10分・話者14名 |
| 動画B | 討論系・10分・話者10名 |
| 評価指標 | DER(collar=0.0, skip_overlap=False) |
| 背景音分離ツール | Demucs |
| ソースコード | https://github.com/y-dai20/speechlab |
検証対象ツールの特徴
NVIDIA NeMo:3つのアプローチを搭載
NeMoには用途・精度・制約が異なる3種類の話者分離手法がある。
① Clustering Diarizer(クラスタリング型)
話者埋め込みベクトルをクラスタリングして時刻区間を割り当てる最も標準的なパイプライン型アプローチ。シンプルな構成ゆえに安定性が高く、討論・会議系音声で安定した結果が出やすい。
② MSDD(Multi-Scale Diarization Decoder)
クラスタリングで粗い区間を生成した後、ニューラルモデルで境界を精密に調整する。理論上は高精度だが、データ特性によっては不安定になるケースもある。
③ Sortformer(End-to-End型)
クラスタリングを使わないエンドツーエンド方式。重なり発話(Overlap)の検出が可能な点が最大の特徴だが、現状は最大4話者までの制約がある。
Microsoft VibeVoice:ASR統合型
ASR・タイムスタンプ・話者分離を1つのモデルで同時処理する統合型。英語・中国語中心の学習データで、日本語はそのままだと精度が落ちるが、日本語データでファインチューニングすることで大幅改善が可能。
今回の検証では、ファインチューニングする前の素の状態で行った。ファインチューニングする方法としては、GPT + Qwenを組み合わせた合成データを作成して実装すると精度が改善する場合がある。ただし、合成データ生成のポイントとして、単純な対話ログではAI感が強くなるため、被り・相槌・割り込みをランダムに挿入してリアルな音声に近づけた。
pyannote.audio:定番オープンソース
HuggingFaceとの統合でローカル推論が手軽にできる定番ライブラリ。有料API「pyannote precise」も提供されている。今回の検証ではNeMo Clusteringと同程度の精度だった。
背景音分離(Demucs)の効果
Demucsとは
Demucsは音楽・音声の音源分離に特化したDeep Learningモデルで、Facebookが開発した。音声ファイルを以下の4トラックに分離する:
bass(低音)drums(打楽器系・効果音・環境音が混入しやすい)other(その他の楽器)vocals(声のみ)
話者分離の前処理としてvocalsトラックだけを使うことで、BGMや効果音の影響を排除するという仮説で実験した。
pip install demucs
python -m demucs --two-stems=vocals your_audio.wav
# outputsディレクトリにvocals.wavとno_vocals.wavが生成される
モデルによって効果が真逆になる:重要な発見
今回の実験で判明した最も重要な知見のひとつが、背景音分離の効果はモデルのアーキテクチャに依存するという点だ。
VibeVoiceへの効果:ほぼなし、むしろ微妙に悪化
VibeVoiceはすでに背景音混在環境でのデータセットで学習されているため、クリーンなvocalsトラックを渡しても大きな改善はなかった。討論系でもわずかにDERが悪化(9.19% → 9.31%)しており、学習データの分布外になってしまった可能性がある。
仮説: VibeVoiceは実環境の雑音を含む音声を前提として学習しているため、過度にクリーンな入力が逆効果になるケースがある。
クラスタリングベースモデルへの効果:討論系で顕著な改善
対照的に、NeMo ClusteringとMSDDでは討論系動画で明確な改善が見られた:
| モデル | 通常DER | 背景音分離後 | 改善幅 |
|---|---|---|---|
| NeMo Clustering | 14.41% | 10.72% | ▲3.69pt |
| NeMo MSDD | 18.84% | 15.44% | ▲3.40pt |
| VibeVoice | 9.19% | 9.31% | ▲-0.12pt(悪化) |
| pyannote | 16.04% | 15.98% | ▲0.06pt(微改善) |
なぜクラスタリング系に効くのか: クラスタリング型は話者埋め込みベクトル(Speaker Embedding)の品質に強く依存する。BGMや効果音が混在すると埋め込みが汚染され、クラスタリングの精度が落ちる。背景音を分離してクリーンな音声を渡すことで、埋め込みの一貫性が向上し、クラスタリング精度が上がると考えられる。
ドラマ系では改善しなかった理由: ドラマの精度低下は背景音だけでなく、演技による声質変化・話者数の多さ・重なり発話など複合要因によるため、背景音分離だけでは解決できない。
実験結果
ドラマ系動画(10分・話者14名):全数値
| モデル | DER | 推定話者数 | Confusion | Missed | FA |
|---|---|---|---|---|---|
| VibeVoice | 27.41% | 10 | 70.610s | 37.580s | 21.670s |
| VibeVoice(背景音分離後) | 27.66% | 11 | 62.380s | 43.470s | 23.540s |
| NeMo Clustering | 48.37% | 4 | 111.480s | 103.250s | 11.520s |
| NeMo Clustering(背景音分離後) | 49.28% | 4 | 113.315s | 102.810s | 14.370s |
| NeMo MSDD | 58.20% | 4 | 87.030s | 166.670s | 18.535s |
| NeMo MSDD(背景音分離後) | 56.43% | 4 | 94.630s | 152.090s | 17.210s |
| pyannote | 49.51% | 8 | 57.844s | 157.042s | 16.705s |
| pyannote(背景音分離後) | 52.54% | 9 | 73.272s | 154.827s | 17.632s |
ドラマ系では全モデルがDER 25%以上という結果に。VibeVoiceが最も善戦したが27%台であり、実用にはまだ課題が残る。背景音分離の効果もほぼ見られなかった。
討論系動画(10分・話者10名):全数値
| モデル | DER | 推定話者数 | Confusion | Missed | FA |
|---|---|---|---|---|---|
| VibeVoice | 9.19% | 7 | 45.590s | 4.100s | 4.120s |
| VibeVoice(背景音分離後) | 9.31% | 8 | 49.600s | 0.760s | 4.120s |
| NeMo Clustering | 14.41% | 5 | 50.965s | 31.160s | 2.250s |
| NeMo Clustering(背景音分離後) | 10.72% | 6 | 40.050s | 19.290s | 3.420s |
| NeMo MSDD | 18.84% | 5 | 58.060s | 47.460s | 4.770s |
| NeMo MSDD(背景音分離後) | 15.44% | 6 | 48.765s | 38.620s | 2.980s |
| pyannote | 16.04% | 6 | 49.038s | 44.750s | 0.122s |
| pyannote(背景音分離後) | 15.98% | 6 | 49.429s | 43.901s | 0.212s |
討論系ではVibeVoiceが9.19%と実用レベルに到達。背景音分離によってNeMo Clusteringは14.41% → 10.72%と約3.7pt改善し、VibeVoiceに肉薄する結果となった。
深掘り考察
なぜドラマは難しいのか
① 話者数推定の限界
実際には14名が話しているにもかかわらず、NeMoやpyannoteは4〜8名と過少推定している。話者数の自動推定は精度の大きなボトルネックだ。
② 声質変化への耐性
俳優の演技では感情・シーン・キャラクターに応じて声質が大きく変化する。通常の会話音声で学習した話者埋め込みモデルは、同一人物の発声変化を「別人」と誤認識しやすい。
③ 重なり発話(Overlap)問題
ドラマには複数人が同時に話す場面が頻繁に登場する。Clusteringベースのモデルはこの重なりを本質的に苦手としており、Overlapへの対応はSortformerなどE2Eモデルに期待がかかる。
背景音分離が有効なケースの条件整理
背景音分離(Demucs)が効果を発揮するのは以下の条件が揃った場合だと考えられる:
- クラスタリングベースのモデルを使用している(話者埋め込みの品質が直接DERに影響する)
- 音声に明確なBGMや環境音が含まれている(除去対象が存在する)
- 話者数が比較的少ない・ターンが明確(ドラマのような複合困難が少ない)
VibeVoiceのような統合型・実環境データ学習済みモデルでは、前処理として背景音分離を加えても効果は薄く、場合によっては逆効果になり得る。
実運用に向けた選択指針
討論・会議・ポッドキャスト系
第一選択:VibeVoice(DER 9.19%、実用レベル)
ASRとの統合も強みで、話者ラベル付きの文字起こしを1パイプラインで取得できる。
コスト重視・追加改善を狙うなら:NeMo Clustering + Demucs背景音分離
背景音分離を組み合わせることで10.72%まで改善でき、VibeVoiceとの差を縮められる。オープンソースで完全ローカル動作する点もメリット。
ドラマ・映像コンテンツ系
現時点では決定打なし
VibeVoiceが27%台で最善だが、実運用には課題が残る。NeMo SortformerやE2Eモデルの成熟を待ちながら、以下の追加策を検討:
- 役者ごとのvoice profileを事前登録して話者検索(Speaker Identification)に切り替える
- ドラマ特化データでのファインチューニング
FAQ
Q. 話者数を事前に指定すれば精度は上がるか?
A. 上がるケースが多い。NeMoもpyannoteも話者数を指定するオプションがあり、自動推定より精度が改善する傾向がある。ただし話者数が不明の実運用シナリオでは難しい。
Q. 日本語の話者分離は英語より難しいか?
A. 学習データの量・質の問題で難しいのが現実だ。VibeVoiceも元は英語・中国語中心で、日本語は別途ファインチューニングが必要だった。良質な日本語話者分離データセットが少ないことが業界全体の課題。
Q. 背景音分離はすべてのモデルに適用すべきか?
A. モデルによって効果が異なる。クラスタリングベース(NeMo Clustering・MSDD)には討論系で3〜4pt改善の効果があった。VibeVoiceは学習データにノイズ入り音声が含まれているため効果が薄く、むしろ微妙に悪化する場合がある。事前にA/Bテストで確認することを推奨する。
Q. pyannote preciseとOSSのpyannoteで精度差はあるか?
A. 今回の検証にはOSS版を使用した。有料APIのpyannote preciseは追加チューニングやより大規模な学習データを使っているとされており、精度向上が期待できる。実運用での比較検証は今後の課題だ。
Q. リアルタイム処理は可能か?
A. NeMo Clusteringはオフライン処理が前提で、リアルタイムには向かない。VibeVoiceはストリーミング対応の検討が進んでいるが、現時点では録音済みファイルに対するバッチ処理がメインユースケースだ。
Q. 重なり発話(Overlap)が多い音声に最適なモデルは?
A. NeMo Sortformerが唯一Overlapを明示的に扱える設計になっているが、現状は最大4話者の制約があり安定性に課題が残る。Overlapが多いシナリオへの本格対応は今後の技術進化に期待する段階だ。
Q. 話者分離の精度をさらに上げるために試すべきことは?
A. 優先度順に以下を検討:①話者数の事前指定、②クラスタリング系モデルへの背景音分離(Demucs)の前処理追加、③ドメイン特化ファインチューニング、④話者プロファイルを使ったSpeaker Identificationへの切り替え。
まとめ
話者分離の精度は「討論系・会議系」と「ドラマ・映像作品」で全く異なる難しさを持つ問題だ。本検証で得られた重要な知見を3点にまとめる:
- VibeVoiceは討論系でDER 9.19%と現状最高精度。ASR統合の強みもあり実運用に最も近い。
- 背景音分離(Demucs)はモデルを選ぶ前処理。クラスタリングベースのNeMoには討論系で3〜4pt改善の効果があるが、VibeVoiceのような学習済みモデルには効果がなく微妙に悪化する可能性もある。
- ドラマ系の多話者分離にはまだ決定打がない。精度低下の要因が複合的で、背景音分離だけでは解決できない。
データ特性とモデルアーキテクチャの相性をきちんと評価した上でモデルと前処理の組み合わせを選ぶことが、実運用での精度最大化の鍵となる。
ソースコード全体は https://github.com/y-dai20/speechlab で公開中。