こちらに書いた記事をQiitaにも書き記しておきます。
https://zenn.dev/buno15/articles/7631de0ea967bf
想定読者
AIを使用して文字起こし・話者分離をしたい方
背景
業務で音声データの文字起こし・話者分離を実装することになり技術選定を行っています。そんな中つい先日使用可能になった、gpt-4o-transcribe-diarizeモデルを見つけたため、それについて説明します。
gpt-4o-transcribe-diarize とは
OpenAIが提供するテキスト文字起こしモデルです。既存のモデルとしてgpt-4o-transcribeがありますが、このdiarizeモデルは話者分離を行えることが特徴です。単に音声データをテキスト文字起こしするだけでなく、誰がいつ喋ったかを分類しjsonで出力してくれます。
話者サンプル
最大4人の話者が単独で話しているサンプル音声データと個人名をモデルに提供することで、高い精度で話者分離が可能になります。加えて文字起こしの際に、個人名でラベルを付与できることも特徴です。
サンプルを指定するにはAPIリクエストパラメータに以下の値を追加します。
extra_body={
"known_speaker_names": ["ラベル"],
"known_speaker_references": ["音声ファイル"],
}
感想
今回は試しに6人の人間が会話しているデータを文字起こし・話者分離してみました。OpenAIのAPIではリクエストできるファイルサイズが最大25MBであったので、分割してリクエストする必要がありました。公式ドキュメントのサンプルコードを参考にしました。
https://platform.openai.com/docs/guides/speech-to-text?lang=python#speaker-diarization
話者分離の精度
音声サンプル人数 >= 会話内の人数 の方が話者分離の精度が高い印象でした。音声サンプル人数が少ないと、例えばAさん(サンプルなし)の話している内容がBさん(サンプルあり)として判定されてしまいました。
チャンク分離の対策
話者分離可能な最大人数が4人であるため、4人以上の人間が会話しているデータについては、チャンク分けを考えて行う必要があります。チャンク内で会話している人数が4人以下になるように、会話データを分割する必要があります。
参照