こんにちは、エンジニアの風速です。
今回は音声データから文字起こしをする方法を調査していたところ、OpenAIが提供している、Whisperというサービスがあったのでそれを利用しようとしたのですが、APIは有料ですが、Pythonからの使用は無料ででき、Pythonを知らない自分でも簡単にできたので、音声データからテキストになるまでをまとめたいと思います。
Whisper
OpenAIが開発、提供をしている、自動音声認識(ASR: Automatic Speech Recognition)モデルで、多言語対応で、高精度な文字起こしが可能です。
Google Colab
Googleが提供するクラウドベースのPython開発環境でGPUも無料で利用できるので、機械学習やデータ分析に適しています。
Google Colabには90分ルールや12時間ルールなどがあり、セッションが切れてから90分や新しいインスタンスを起動してから12時間経つと、インスタンスがリセットされてしまうので、Google Colabの環境を再度使用する場合は、今回のインストールなどの手順を再度実行する必要があります。
手順
ノートブックの作成
GoogleDriveから作成できます。
右クリック > その他 > Google Colaboratory
GPUの選択
ランタイム > ランタイムのタイプを変更 > ハードウェアアクセラレータ > Python 3, T4 GPU
whisperのインストール
GPUが割り当てられると、Pythonが対話形式で利用できるので、pipでwhisperをインストールします。
!pip install git+https://github.com/openai/whisper.git
オーディオファイルのアップロード
今回はzoomでの会議でレコーディングした音声ファイル(.m4aファイル)をそのまま使用します。長さはだいたい32分ぐらいです。
インスタンスに接続されるとwebからファイルシステムにアップロードできます。出力ファイルなどは/content
配下に置かれるみたいなことをみたので、ここに配置します。
モデルの選択と文字起こし
利用可能なモデルは以下になります。英語対応のみと、多言語対応があります。
サイズが大きいものを選択すると、文字起こしの精度は上がりますが、必要スペックなども上がります。
実行コード
# インポート
import whisper
# モデルの読み込み(今回は日本語なのでbase or small or midium)
model = whisper.load_model("base")
# 音声ファイル
audio = "/content/audiofile.m4a"
# 音声ファイルを文字起こし
result = model.transcribe(audio)
# 文字起こし結果を表示
print(result['text'])
transcribe()
メソッドは30秒ごとの音声を解析して文字起こし
出力結果
個人名などがでてくるので、多くは割愛しますが、以下のように出力されました。実行時間はmodelがbaseの場合はだいたい1分ぐらいで、smallの場合は2分、midiumは4分ぐらいでした。
# base
今レコーディングしましたすいませんあ そのでは忘れましたでは 方向世はこれでいいです...
# small
今、レコーディングしました。すいません。すみません。忘れなさい。報告性はこれでいいです...
# midium
今レコーディングしました。すみません。すみません。忘れなしです。方向性はこれでいいです...
まとめ
精度をみると違うように文字起こしされている所もありましたが、普通の会話音声を文字起こししただけで良い精度のものがでてきて、かなり驚きました。実際に人が聞いて文字起こしするよりは早くできるので、small, midiumぐらいでも実用できると思いました。baseだと日本語は厳しいかもというのが自分の感想です。今回使用したGoogle Colabでは外部からの起動などはなかなか難しいと思うので、実際に何かに組み込むなどの用途で使用するには、Pythonの実行環境を他で用意してやるのが良いかなと思いました。
参考