ICレコーダーで録音したログ用の音声ファイルや会議の音声ファイルなど、そのままではただの音声ファイルですので検索性が悪い状態です。これらを文字起こしサービスなどでテキスト化できれば使い勝手のよい情報になります。以前から、AutoMemoのような製品を購入して文字起こしサービスを利用することを考えていましたが、製品を購入しなければならないのはもちろんのこと、音声ファイルの文字起こしの無料時間に限りがあって購入を躊躇していました。そんな中、Whisperライブラリが公開されていることを知りました。WhisperはOpenAIによって開発された音声認識モデルで、多くの言語に対応しており、特に英語の音声認識においては高い精度を発揮するとのことでした。そこで、早速、Google ColabでMP3ファイルの文字起こしをしてみることにしました。
TOEIC Attack Courseの音声ファイルで、以下の内容の音声が収録されているものを認識させてみることにします:
# input.mp3
「これでユニット21ステップ3のテープ学習は終わりです。」
Google Colabにアクセスし、まずは、Google Colabのランタイムを変更して、GPUを選択します。私は、T4 GPUを選択しました。nvidia-smiコマンドを使うと、GPU Nameなどが確認できます。
!nvidia-smi
その後、Whisperライブラリをインストールする必要があります。これには時間が2、3分かかりました。結構なサイズのデータ(3GBくらい)をダウンロードしているようでした。
# 必要なライブラリをインストール
!pip install git+https://github.com/openai/whisper.git
MP3ファイルをGoogle Colabにアップロードします。ここでは、TOEIC Attack Courseの音声ファイルで、「これでユニット21ステップ3のテープ学習は終わりです。」というフレーズの入った音声ファイル(‘input.mp3’)をアップロードしました。
# MP3ファイルをGoogle Colabにアップロードする
from google.colab import files
uploaded = files.upload()
あとは、whisperライブラリをインポートし、Whisperモデルのロードをして、transcribeメソッドで文字起こしをするだけです。
ただ、load_modelには、tiny, base, small ,medium, largeがあり、モデルサイズが大きくなるほど時間はかかりますが、認識精度が上がります。
modelのtranscribeメソッドで、model.transcribe(“input.mp3″, verbose=True, language=”jp”)のように指定すると、テキストの音声時間が表示されるのと、言語の指定をすることができます。
import whisper
# Whisperモデルのロード
model = whisper.load_model("base")
# 音声ファイルをディクテーションする
result = model.transcribe("input.mp3")
# 結果を表示する
print("# baseモデル")
print(result["text"])
# 必要に応じてディクテーション結果を保存
with open('transcription.txt', 'w') as f:
f.write(transcription)
# baseモデル
これでユニット21ステップサンドテープ楽集終わりです
文字起こしを行うことができました。すばらしいです。でも、認識率があまりよくありませんでした。元のフレーズは、「これでユニット21ステップ3のテープ学習は終わりです。」ですから。そこで、モデルとしてlargeモデルをロードして音声認識させてみました(ついでに、transcribeメソッドでverbose=Trueとして実行)。
# largeモデル
[00:00.000 --> 00:07.400] これでユニット21ステップ3のテープ学習は終わりです。
largeモデルだと、より正確に文字起こしを行うことができました。音声ファイルの言語は、自動でも認識してくれるようですが、language=”en”として、TOEIC用の音声ファイルの文字起こしを行ってみたところ、満足した結果が得られました。今後、音声ファイルの文字起こしに使っていく予定です。