Pythonで高精度話者認識:pyannote.audioの使い方

Python

はじめに

さて今回は、Pythonを使った音声データの話者認識/話者分離(speaker diarization)についてまとめたいと思います。

実は以前、Whisperを使った音声データ文字起こしのやり方についてまとめました。まだ記事を読んでいない方はそちらをチェックです!

そちらでご紹介した内容ですと、例えば複数の人が会話している音声データだったとしても、誰がどのような発言をしたかは分かりません。ただ単純に、音声データが文字起こしされ、テキストの羅列として出力するだけです。

それでももちろん素晴らしい技術ですが、少し活用の幅を広げにくいですよね??

とまぁそんなこんなで、私も話者認識/話者分離(speaker diarization)をやりたいな~と思い、色々調べましたので、備忘録的にまとめておきます。

Q
話者認識/話者分離(speaker diarization)とは??
A

話者認識/話者分離(speaker diarization)は、音声データを解析し、「誰が」「いつ」「何を」話しているか、について特定する技術です。

たとえば、複数の人が会話している録音を考えてみましょう。この技術を使うと、その音声ファイルから「Aさんがこの部分で話していて、Bさんが別の部分で話している」というように、話者ごとに音声を分けることができます。

これにより、インタビューや会議の録音から、各話者がどの部分で話していたのかを特定することが可能になります。Speaker Diarizationは、音声認識や字幕生成の精度向上にも役立ち、コールセンターの通話解析やポッドキャストのトランスクリプションなど、幅広い分野で活用されています。

皆さんの参考になれば嬉しいです!それではさっそく見ていきましょう~

pyannote.audioとは??

今回は話者認識/話者分離(speaker diarization)を実施するにあたり、Pythonの「pyannote.audio」というライブラリを利用いたしました。まずはどのようなライブラリか、しっかりと理解しておきましょう。

pyannote.audioは、音声処理に特化したPythonライブラリで、特に音声認識や音声分離などのタスクで使用されます

主な機能として、音声の話者分離(誰が話しているかを特定する)、音声区間検出(音声がある部分を識別する)、話者認識(話者の特定)などがあります。

このライブラリはディープラーニング技術を活用し、音声処理の精度を高めるために事前学習されたモデルを提供しています。初心者でも使いやすいAPIが用意されており、音声データの解析や処理を簡単に行えるため、研究者や開発者が音声関連のプロジェクトで利用することができます。

以下GitHubもご参考になればと思います。

実行環境

今回は、Google Colaboratory(Google Colab)を活用しました。皆さんも簡単に利用できますので、是非試してみてくださいね。

ちなみに、ランタイムのタイプ(処理の方式)は「T4 GPU」を選択しています。

これはなぜかというと、ずばりCPUと比較してGPUの方が処理速度が格段に速いからです。デフォルトでは「CPU」で処理する方式となっていますので、必ず変えるようにしましょう。

余談ですが、なぜGPUの方が処理が速いの?!と気になっている方は以下をチェックです。

また、ランタイムのタイプ変更方法が分からない方は、以下記事を参考にしてください。

事前準備

続いて、色々な事前準備を済ませましょう。

Hugging Faceアカウントの作成

今回のライブラリを利用するには、Hugging Faceアカウントが必須です。アカウントを作ったことが無い方は、まずはアカウントを作成しましょう。

アカウントの作成手順を知りたい方は以下をチェックです!

ライブラリの利用承認

続いて、ライブラリ・リポジトリの利用承認をしておきましょう。

「user conditions」のAcceptという手順ですね。

下記2つのURLにそれぞれアクセスして、必要事項を記入し、リポジトリのアクセスボタンを押下してください。

Hugging Faceアクセストークンの作成

ライブラリの利用には、Hugging Faceのアクセストークンも必要です。

作成方法が分からない方は以下をチェックです!

話者認識/話者分離(speaker diarization)の実行

いよいよお待ちかねの話者認識/話者分離(speaker diarization)です。

ライブラリのインストール

まずは必要なライブラリをインストールしましょう。

以下を実行して、「pyannote.audio」をインストールします。

!pip install pyannote.audio

話者認識/話者分離(speaker diarization)

さて、必要な準備はできたのであとは以下のコードを実行するのみです。

from pyannote.audio import Pipeline
import torch

pipeline = Pipeline.from_pretrained(
    "pyannote/speaker-diarization-3.1",
    use_auth_token="ご自身のアクセストークンを入力してください") # ご自身のアクセストークンを入力

# GPUでのpipeline処理
pipeline.to(torch.device("cuda"))

# pipelineの適用
# "audio.wav"は処理をしたいオーディオファイルの名称を入力
diarization = pipeline("audio.wav")

# 結果の出力
# start=0.2s stop=1.5s speaker_0
# start=1.8s stop=3.9s speaker_1
# start=4.2s stop=5.7s speaker_0
# ...
for turn, _, speaker in diarization.itertracks(yield_label=True):
    print(f"start={turn.start:.1f}s stop={turn.end:.1f}s speaker_{speaker}")

「use_auth_token=”ご自身のアクセストークンを入力してください”」には、事前準備で作成したご自身のアクセストークンを入力してください。

「pipeline.to(torch.device(“cuda”))」についてはGPU処理をしたいから入れているだけです。入れなくても動きはしますがめちゃくちゃ処理が遅くなります。

結果の出力方法としては、startの時間、stopの時間、誰が話していたかをテキスト形式で出力させるようにしています。この辺りはまぁおまかせで、正直結果をどう出すか次第なので。

ちなみに、以下を実行すると、画像形式で結果が出力されます。

diarization

結果は以下です。

キッチリと話者認識/話者分離(speaker diarization)できていることが分かりますね。

最後に

さて今回は、Pythonを使った音声データの話者認識/話者分離(speaker diarization)についてまとめました。

後々分かることですが、今回はあくまでも序章にすぎません。今後やりたいことの前準備です。

話者認識ができると色々なことに応用できるかと思いますので、是非このライブラリを活用して色々な遊び方を楽しみましょ~。こんなことできますよ!みたいなアイデアがあれば是非教えてもらえると嬉しいです。

以上!

Python関連は色々と記事をまとめていますのでそちらも読んでもらえると嬉しいです。

その他の勉強記事も是非!

コメント

タイトルとURLをコピーしました