Speaker Identification
音声認識における「話者」関連の処理は以下のようなものがある(ChatGPTしらべ)
| 英語 | よく使われる日本語訳 | 主な役割 | ユースケース |
|---|---|---|---|
| speaker diarization | 話者分離 / 話者ダイアライぜーション |
音声を時間で区切って「誰がいつ話したか」をラベル付けする | 会議録で「話者A / 話者B」を自動で振り分ける、マルチスピーカの会話ログ作成 |
| speaker segmentation | 話者セグメンテーション | 音声を話者変化点などで区切る(境界を見つける) | 一般的にはspeaker diarizationとセットで使用される。 |
| speaker recognition | 話者認識 / 話者識別(広義) |
声から「誰か」を判別する処理の総称 | 音声ログから同一人物かどうかざっくり見分ける |
| speaker verification | 話者照合 / 話者認証 |
「この声は本当にXさんか?」をYes/Noで判定 | 声紋を使った本人認証(ログイン、電話での本人確認など) |
| speaker identification | 話者識別 / 話者特定 |
候補リストの中から「この声は誰か」を当てる | 登録済みユーザ数十人の中から話者を特定する |
日本語だと 「話者識別」「話者認識」 の区別がちょっとゆるめに使われているかな、自分も結構適当な言い方をしているかも。話者分離とかは「ダイアライぜーション」とそのまま使われていることも多い印象。
speaker diarizationは、最近のASRだとほぼほぼ対応していることが多くて、"Speaker 1"、"Speaker 2" みたいな話者IDがラベルとして付与される。ただし、その入力音声「内」の区別としてのラベルなので、異なる音声データを渡しても同じようなラベリングになるし、話者IDが特定の話者を示すものではない。
特定話者を識別するのは、speaker identification になるが、ASRサービスで対応しているものはほとんどないように思う。speaker identificationの場合は固有の音声から特徴量を抽出して類似度を図るといった仕組みになるので、事前に話者の音声データとラベルを用意する必要がある。まあASRサービスからするとspeaker diarizationにもうひと手間加えることになるし、ビジネスとしてそこまでのニーズがないのかもしれない。
いろいろ調べてみると、話者ダイアライぜーションについてはいろいろ情報があって、定番は pyannote.audio を使う方法。
自分も過去試している
で、speaker identification になると情報が一気に少なくなるけど、どうやらpyannote.audioで使えるモデルがあるみたい
pyannoteがやってるクラウドサービスでも対応している
あとASRプロバイダーのGradiaが出している記事に、話者識別のPoC実装をしている記事があった。
ざっと見た感じ、pyannoteの話者ダイアライぜーションモデルと SpeechBrainというところの話者識別モデルを組み合わせている様子
ここでもpyannote.audioよりSpeechBrainがおすすめされていた
あとこのスレには他にもいろいろ話者識別関連のリンクがある
pyannote自身がだしている話者embeddingモデルみたい
NVIDIAのドキュメント
スレ主が提供している音声embeddingツールキットらしい
キーワード検出用もある
めっちゃまとまっていた
記事によると、以下が紹介されていて、Style−BERT-VITS2のスタイルでも使用されているらしい。
VOSK でもできるっぽいが、ドキュメントが皆無・・・
サンプルコードっぽいものはレポジトリ内にある。
ここにSpeaker identification model (vosk-model-spk-0.4)があるのでこれを使えばよさそう。
embeddingはどうやってつくればいいのかな?と思ったけど、上のコードの中で比較してるところから引っ張れば良さそう。
試していくなら WeSpeaker のモデルがまずは最初になりそう。
以下も参考になる
次はpyannote.audio。
これがpyannote公式の音声ベクトル化モデルかな、ただしpyannote.audio 2.1に依存しているらしい(今のpyannote.audioの最新バージョンは4)
もう一つ、こちらはWeSpeakerが提供しているモデルの一部を、pyannote.audioがラッパーという形で使えるようにしているみたい。
後者は多く使われている定番パターンのようなので、試してみた。
次は、上のXのツイートで紹介されていた、SpeechBrainのやつを試してみた
上で上げたVOSKでもやってみた。
余談だが、Alexaの音声プロフィールってのも話者識別だね