🐥

pyannote.audioって何?

2024/12/24に公開

私たちの研究室

https://nisk.doshisha.ac.jp/

アドベントカレンダー 24日目 🎄

https://nislab-advent-calendar-2024-12.vercel.app/

TL;DR

音声データから「いつ、誰が話したか」を推定するライブラリである、pyannote.audioの紹介をしました。

pyannote.audioとは

pyannote.audioは、speaker diarization(発話者分離)を行うためのPythonライブラリです。これを使用することで、音声データから「いつ誰が話したか」を自動で推定できます。
https://github.com/pyannote/pyannote-audio
https://arxiv.org/abs/1911.01255

speaker diarizationとは

speaker diarizationは、会話音声を分析し、「いつ、誰が話したか」を自動で特定する技術です。
様々な用途での利用が考えられるspeaker diarizationですが、主な利用例は会話音声の文字起こしです。
音声認識で話題になったOpenAIのwhisperというモデルが有名ですが、こちらは高い精度の音声認識を実現することができますが、発話者を区別した文字起こしをすることはできません。
このように多くの音声認識技術では、発言者を区別せずに文字起こしが実行されます。これに対して、speaker diarizationを使用することで、発言者を区別した文字起こしが可能になります。

speaker diarizationにより発話時間を特定後、各時刻に対して音声認識を行う。
通常の音声認識(左)とspeaker diarizationを利用した音声認識(右)のフロー

これにより、発話者を区別した文字起こしが可能になります。

通常の音声認識(左)とspeaker diarizationを利用した音声認識(右)の認識結果

pyannote.audioの処理フロー

pyannote.audioでは以下のようなパイプラインでspeaker diarizationを実現します。

  1. 音声データを入力として受け取り、特徴量の抽出
  2. 話者セグメンテーション
  3. 話者埋め込みの生成
  4. クラスタリング
    これらの工程を経て、話者ダイアライゼーションを実現します。

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では以上のような発話者の分類に加え、パイプラインの機能を応用することにより、発話の重なりといった音声の特徴を分析することも可能です。
研究や開発の用途で活用してみてはいかがでしょうか。

NISLab 小板研究室

Discussion