WhisperXによる、音声文字起こし&話者分離(Windows11環境)

OpenAIによる、オープンソースの文字起こしWhisper。こちらに改良を加えたWhisperXというものが公開されています。こちらは、faster-whisperを使った速い文字起こし、音のタイミングと文字のタイミングを合わせるテキストアラインメント、pyannoteを使った話者分離などが可能です。

開発者さんのTwitterアカウントはこちら。テキストアラインメントと話者分離のデモの映像も付いています。

こちらを使って、複数話者がいる音声を、話者分離して文字起こしをしてみました。Google Colabでは上手く動かせなかったので(何故)、Windows11環境のローカルで動かしています。

pip install git+https://github.com/m-bain/whisperx.git

venvで仮想環境を用意し、そこに↑のpipコマンドでインストールします。

そして、以下のスクリプトを実行します。「起こしたい音声ファイル名」の部分には、実際のファイル名を入れてください。'hugging faceのトークン'にも同様に、ご自身のHugging Faceのトークンを入れてください。

import whisperx
from datetime import timedelta
from tqdm import tqdm

device ="cuda"
audio_file = "起こしたい音声ファイル名"
batch_size = 16 # reduce if low on GPU mem
compute_type = "float16" # change to "int8" if low on GPU mem (may reduce accuracy)

model = whisperx.load_model("large-v2", device, compute_type=compute_type)
audio = whisperx.load_audio(audio_file)
result = model.transcribe(audio, batch_size=batch_size)

model_a, metadata = whisperx.load_align_model(language_code=result["language"], device=device)
result = whisperx.align(result["segments"], model_a, metadata, audio, device, return_char_alignments=False)

diarize_model = whisperx.DiarizationPipeline(use_auth_token='hugging faceのトークン', device=device)
diarize_segments = diarize_model(audio_file)
result = whisperx.assign_word_speakers(diarize_segments, result)

# 同時に結果をテキスト形式で保存します。
with open('result.txt', 'w', encoding='utf-8') as f:
    for segment in tqdm(result["segments"], desc="Processing segments", ncols=75):
        start_time = str(timedelta(seconds=segment["start"]))
        end_time = str(timedelta(seconds=segment["end"]))
        speaker = segment["speaker"]
        text = segment["text"]
        f.write(f'{start_time}-{end_time}\n{speaker}\n{text}\n\n')

pyannoteによる話者分離をするには、事前にHugging Faceのアカウントを取得し、以下のページで利用規約に同意した上で、トークンを取得する必要があります。

トークンはHugging Faceにログインした状態で以下のページにアクセスすると取得出来ます。

今回は試しに、以下の参議院予算委員会の中継から、00:30:30からの部分の音声を抜き出して利用してみました。

著作権法の40条にて、公開の場で行われた政治上の演説は自由に利用できることが定められているおり、国会での演説はこちらに該当すると思ったので、実験に利用させてもらっております(この解釈が間違っていたらすいません)

 政治上の演説等の利用
(第40条) [1]公開の場で行われた政治上の演説や陳述,裁判での公開の陳述は,ある一人の著作者のものを編集して利用する場合を除き,方法を問わず利用できる。
 [2]議会における演説等は,報道のために新聞等への掲載,放送等により利用することができる。同様の目的であれば,翻訳もできる。

https://www.bunka.go.jp/seisaku/chosakuken/seidokaisetsu/gaiyo/chosakubutsu_jiyu.html

上記のスクリプトで、実際に文字起こししてみたものの冒頭部分が以下です。

0:00:02.748000-0:00:28.050000
SPEAKER_08
我が国の創薬力を強化するために医薬分野の研究開発について有識者の知見も踏まえながら政府一体とした支援を行うことこういった御指摘極めて重要であると認識をいたします私を本部長とする健康医療戦略推進本部において健康医療戦略や医療分野研究開発推進計画に基づいて

0:00:28.677000-0:00:43.307000
SPEAKER_08
戦略的かつ一体的に予算を配分するため 政府全体の総合調整これを行っているところですそして委員の方から英国の事例 このご紹介いただきましたがそれも一つの手法ではありますが

0:00:43.807000-0:01:13.414000
SPEAKER_08
我が国どこの健康医療戦略推進本部においても有志者の知見をいただく仕組み取り入れております有志者専門家の会議体として参与会合専門調査会を設けており健康医療戦略や医療分野研究開発推進計画の策定にあたり会議体でいただいた意見を反映するなど有志者にも具体的に関与いただきながら取り組みを進めているところであります

0:01:14.034000-0:01:43.223000
SPEAKER_08
こうした取り組みを進めながら 実際の予算の配分においてもまた予算の執行においてもそれぞれ 工夫を凝らしてスタートアップ支援など成果につなげていきたい このように考えております竹見慶忠君実際にこのAメドも作って10年改めて これを抜本的に見直す時期に入りましたそしてさらにこうした政府の

0:01:44.089000-0:01:58.560000
SPEAKER_01
抜本的な改革や努力というものに 合わせた形で私はこれから創薬の担い手である日本の製薬企業 改めてその規模が小さすぎますおおよそ六種であればその投資金額は 一兆五千億

0:01:59.496000-0:02:19.001000
SPEAKER_01
そしてファイザーであれば二兆円 の投資金額を持っております我が国は第一産業あたりでおそらく四千億 ぐらいですこれでは立ち打ちできません改めてこうした政府努力 に対応した形で日本の製薬企業のそうしたメジャーと対峙できる そうした基盤づくりというものを

0:02:19.621000-0:02:42.038000
SPEAKER_01
我が国の中でしなければならない というふうに思いますそのたまには場合によってはこうした制約企業の 大規模な再編成をもすることが必要でありそのための政府の果たす役割を 期待を申し上げ私の質問を終わります ありがとうございました以上で武見恵三君の質疑は終了いたしました

0:03:11.040000-0:03:20.124000
SPEAKER_06
次に、加田博之君の質疑を行います。加田博之君。以上、自由民主党の加田博之でございます。

https://youtu.be/6GXkdgt9ttU?t=1830
を上記スクリプトによって文字起こし

実際には以下の文章の「考えております」と「竹見」の間で話者が切り替わっているのですが、そこは上手く拾えていなかったようです。ただ、全体としては、おおよそ分離出来ています。

0:01:14.034000-0:01:43.223000
SPEAKER_08
こうした取り組みを進めながら 実際の予算の配分においてもまた予算の執行においてもそれぞれ 工夫を凝らしてスタートアップ支援など成果につなげていきたい このように考えております竹見慶忠君実際にこのAメドも作って10年改めて これを抜本的に見直す時期に入りましたそしてさらにこうした政府の

ちなみに、話者分離にはかなり時間がかかります。使っているGPUによっては、録音データの実時間以上余裕でかかることもあるでしょう。

正直なところ、LINE CLOVA Note、Nottaのような話者分離機能を謳った文字起こしツールの方が高速ですし、正確でもあると思います。

ただ、機密性の高い会議の音声など、クラウドにアップロードするのが社内規定上認められないため、ローカルPCで文字起こしを行いたいといった場面はあると思います。無料で、ローカルで動く話者分離付き文字起こしとしては、十分に実用的な範囲ではないでしょうか。

というわけで、WhisperXを試してみたという話でした。Google Colabで動かせたという方は、是非やり方を教えてください…!

いいなと思ったら応援しよう!

この記事が参加している募集