pyannote.audioって何?
私たちの研究室
アドベントカレンダー 24日目 🎄
TL;DR
音声データから「いつ、誰が話したか」を推定するライブラリである、pyannote.audioの紹介をしました。
pyannote.audioとは
pyannote.audioは、speaker diarization(発話者分離)を行うためのPythonライブラリです。これを使用することで、音声データから「いつ誰が話したか」を自動で推定できます。
speaker diarizationとは
speaker diarizationは、会話音声を分析し、「いつ、誰が話したか」を自動で特定する技術です。
様々な用途での利用が考えられるspeaker diarizationですが、主な利用例は会話音声の文字起こしです。
音声認識で話題になったOpenAIのwhisperというモデルが有名ですが、こちらは高い精度の音声認識を実現することができますが、発話者を区別した文字起こしをすることはできません。
このように多くの音声認識技術では、発言者を区別せずに文字起こしが実行されます。これに対して、speaker diarizationを使用することで、発言者を区別した文字起こしが可能になります。
speaker diarizationにより発話時間を特定後、各時刻に対して音声認識を行う。
通常の音声認識(左)とspeaker diarizationを利用した音声認識(右)のフロー
これにより、発話者を区別した文字起こしが可能になります。
通常の音声認識(左)とspeaker diarizationを利用した音声認識(右)の認識結果
pyannote.audioの処理フロー
pyannote.audioでは以下のようなパイプラインでspeaker diarizationを実現します。
- 音声データを入力として受け取り、特徴量の抽出
- 話者セグメンテーション
- 話者埋め込みの生成
- クラスタリング
これらの工程を経て、話者ダイアライゼーションを実現します。
pyannote.audioを使ってみる
ここでは、pyannote.audioを使って音声データの分析を行う方法を紹介します。
1. Hugging Faceでトークンを発行する
以下2つのリポジトリのユーザー条件をAcceptし、ユーザー管理画面でトークンを発行します。
2. ライブラリのインストール
pip install pyannote.audio
3. 音声ファイルを用意し、以下のコードを実行して分析を行う
from pyannote.audio import Pipeline
pipeline = Pipeline.from_pretrained("pyannote/speaker-diarization-3.1",use_auth_token="(トークンをここへ入力)")
diarization = pipeline("test.wav")
with open("audio.rttm", "w") as rttm:
diarization.write_rttm(rttm)
試しにVoxConverseというデータセットの音声に対してパイプラインを実行してみました。
RTTM形式の出力
SPEAKER eguui 1 0.42000 38.87000 <NA> <NA> spk00 <NA> <NA>
SPEAKER eguui 1 38.65000 2.25000 <NA> <NA> spk01 <NA> <NA>
SPEAKER eguui 1 41.40000 0.99000 <NA> <NA> spk01 <NA> <NA>
SPEAKER eguui 1 41.44000 4.92000 <NA> <NA> spk00 <NA> <NA>
SPEAKER eguui 1 43.15000 1.25000 <NA> <NA> spk01 <NA> <NA>
SPEAKER eguui 1 44.98000 46.50000 <NA> <NA> spk01 <NA> <NA>
SPEAKER eguui 1 47.44000 4.62000 <NA> <NA> spk00 <NA> <NA>
SPEAKER eguui 1 58.59000 7.27000 <NA> <NA> spk00 <NA> <NA>
SPEAKER eguui 1 69.09000 3.83000 <NA> <NA> spk00 <NA> <NA>
SPEAKER eguui 1 75.63000 1.28000 <NA> <NA> spk00 <NA> <NA>
SPEAKER eguui 1 77.15000 0.99000 <NA> <NA> spk02 <NA> <NA>
SPEAKER eguui 1 81.61000 1.13000 <NA> <NA> spk02 <NA> <NA>
SPEAKER eguui 1 87.92000 2.21000 <NA> <NA> spk00 <NA> <NA>
SPEAKER eguui 1 88.84000 0.96000 <NA> <NA> spk02 <NA> <NA>
SPEAKER eguui 1 90.23000 8.42000 <NA> <NA> spk02 <NA> <NA>
プロットして視覚的にするとこんな感じ
最後に
pyannote.audioでは以上のような発話者の分類に加え、パイプラインの機能を応用することにより、発話の重なりといった音声の特徴を分析することも可能です。
研究や開発の用途で活用してみてはいかがでしょうか。
Discussion