こんにちは、Zero-Cheeseです。
- 「音声データを文字起こししたいけど、オフラインやプロキシの制約で、APIが使えない・・」
- 「機密情報を扱っているので、外部のAPIは使えない・・」
こんな悩み、持っていませんか?
この記事を通して、
- 音声認識ツールである、Whisperの特徴と認識精度
- ローカル環境での、Whisperのセットアップ方法、
- Pythonからの利用方法(文字起こしと、英語翻訳)
を解説します。
Whisperとは? 特徴も併せて紹介
Whisperとは?
Whisperは、ChatGPTで有名なOpenAIが開発した、音声認識モデルです。
680,000時間という膨大な多言語・マルチタスクの教師データを用いて、トレーニングされています。
日本語を含む99言語において、高精度な音声認識が実現されています。
Whisperによる、音声認識の精度
Fleursデータセットを使用した際の、WER(Word Error Rate:単語誤り率)は、以下の通りです。(large-v2モデルの結果)
日本語はランキング6位で、WERが5.3%です。
つまり認識精度は95%となり、これは非常に高い水準です。
認識精度の目安
- 75%の認識精度:大部分の文章が理解できるレベルです。日常の会話やノイズの多い環境で、このレベルが求められます。
- 85%の認識精度:議会の会議やビジネスミーティングの録音で、必要とされるレベル。
- 95%の認識精度:アナウンサーやプロのナレーターが明瞭に発話するレベル。95%以上は、ほぼ完璧といえます。
WER(Word Error Rate:単語誤り率)の算出方法:
認識結果と正解テキストとの間で
- 単語の挿入、削除、置換を考慮して
計算されます。
WER = ( 置換単語数 + 削除単語数 + 挿入単語数)/正解単語数
- 置換 単語数: 単語のスペルミス数
- 削除 単語数: 単語の欠落数
- 挿入 単語数: 誤って認識された単語数
Whisper 各モデル別の特徴と、求められるVRAM量
Whisperには、複数のモデルが提供されています。
これらのモデルごとに、求められるGPUのメモリ量(VRAM量)が、異なってきます。
以下に、各モデルの詳細を記します。
モデル名 | パラメータ量 | 英語専用 モデル名 | 多言語 モデル名 | 必要な VRAM | 相対速度 |
---|---|---|---|---|---|
tiny | 39 M | tiny.en | tiny | 〜 1 GB | 〜 32x |
base | 74 M | base.en | base | 〜 1 GB | 〜 16x |
small | 244 M | small.en | small | 〜 2 GB | 〜 6x |
medium | 769 M | medium.en | medium | 〜 5 GB | 〜 2x |
large | 1550 M | 無し | large | 〜 10 GB | 1x |
large-v2 | 1550 M | 無し | large-v2 | (〜 10 GB)? | (1x)? |
※ 相対速度とは、「largeモデル」を基準の 1 とした際の、処理速度の相対指標です
※ large-v2モデルは、largeモデルに対し、2.5倍のエポック数で追加学習され、性能が向上(リンク先論文のP4参照)
商用利用は、許可されているのか?
Whisperは、商用利用、改変、再配布、有料販売など、全て許可されています。
これはMITライセンスに基づいています。
ただし、使用の際には「著作権表示」と「MITライセンスの全文」の記載が必要です。
(MITライセンスの全文を直接記載する代わりに、MITライセンスへのリンクを掲載することも可能です。)
WhisperのMITライセンスは、こちら
その他の情報
Github:https://github.com/openai/whisper
論文: https://cdn.openai.com/papers/whisper.pdf
公式サイト:https://openai.com/blog/whisper
Whisperをローカル環境で、使用する際の注意点
Whisperはディープラーニングを使用するため、高いマシンスペックが求められます。
CPUだけでも処理は可能ですが、GPUを利用することで処理速度が、大幅に向上します。
参考として、RTX3090でのテスト結果と、Mac M2Max(ただしCPUを使用)の結果を表示します。
RTX3090での、テスト結果
条件:
- モデルは、「large-v2」を使用
- mp3ファイル(音声の長さは、2分)
結果:
- 文字起こしに要した時間: 約 43 sec
- VRAM使用量:約 11.5 GB
「large-v2」を使用する際、12GB以上のVRAMが推奨されます。
最近(2023年9月時点)は、GPUの価格も下がり、お買い得なものが増えてきています。
ディープラーニング用の自作PCを検討している方は、以下の記事で注意点やおすすめパーツを、紹介しています。
Mac M2MAX(38コア版)での、テスト結果
- (RTX3090での検証と同じ条件で検証)
- ただし、MacのGPUは標準でWhisperに対応していないため、CPUを使用
結果:
- 文字起こしに、要した時間: 約 117 sec
- cpu使用率:約 1150 % (1コアのフル使用を、100%として計算)
- メモリ使用量:約8GB
バッテリーでの使用時、目に見えて、減っていくのが分かります・・
インストール方法
Whisperはpipを使用して、GitHubからインストールできます。
また、Whisperの動作にはffmpeg
も必要ですので、併せてインストールが必要です。
以下のコマンドで、Whisperをインストールします。
GitHubからインストールする場合、「git+」に続けて、URLを指定します。
pip install git+https://github.com/openai/whisper.git
ffmpeg
のインストール方法は、以下の通りです。
- Windowsの場合 -> こちらからzipファイルをDL。解凍後、binフォルダのPATHを、システム環境変数に追加して下さい。(詳細は、「FFmpegのダウンロードとインストール手順」サイトで、解説されていました。)
- Macの場合 -> brewでインストール可能です。(下記コード参照)
- Linuxの場合 -> Ubuntu等の場合、aptからインストール可能です。(下記コード参照)
# Macに,ffmpegをインストールする場合
brew install ffmpeg
# Linuxに、ffmpegをインストールする場合
apt install ffmpeg
さらに、Pythonからffmpeg
を利用できるようにするために、次のパッケージもインストールします。
pip install ffmpeg-python
pipの詳細な使い方、操作方法に関しては、下記の記事を参照して下さい。
音声ファイルからの文字起こし方法
Whisperが対応しているファイル形式は、以下の通りです。
- mp3, mp4, mpeg, mpga, m4a, wav, webm
mp4などの動画ファイル形式も、そのまま入力可能です。
基本的な使い方
下記の順番で、コードを記載します。
- modelをロードする
- 文字起こし
コード例:
import whisper
# modelのロード(large-v2を選択する場合)
model = whisper.load_model("large-v2")
# 文字起こし
result = model.transcribe("test.mp3")
# 結果表示
print(result['text'])
結果(例):
メルカリで購入した商品が届きました。迅速に対応をしていただき、ありがとうございました。思ったよりも大きいです。機構としては、水平に1軸、上下に1軸のモータが付いています。重量は570gと持ち運びは全然大変ではないです。
resultには、JSON形式のデータが、代入されます。
その中の「’text’」キーに、文字起こしした結果が、格納されています。
このJSONには、
- 言語情報や、
- 文字起こしした各単語のトークン情報
等も、格納されています。
transcribe( ) メソッドの引数について
上記コードの6行目、transcribe( )メソッドは、さまざまな引数を指定して、より高度な使い方ができます。
言語の指定
言語を指定すると、言語判定処理がスキップされ、処理が少し高速になります。
result = model.transcribe("test.mp3", language='ja')
途中処理のログ表示
verbose引数をTrueに指定すると、途中処理ログが、表示されます。
result = model.transcribe("test.mp3", verbose=True)
結果(例):
Detecting language using up to the first 30 seconds. Use --language
to specify the language
Detected language: Japanese
[00:00.000 –> 00:03.120] メルカリで購入した商品が届きました。
[00:03.620 –> 00:07.360] 迅速に対応をしていただき、ありがとうございました。
[00:07.860 –> 00:09.660] 思ったよりも大きいです。
[00:10.220 –> 00:16.120] 機構としては、水平に1軸、上下に1軸のモータが付いています。
[00:16.620 –> 00:21.820] 重量は570gと持ち運びは全然大変ではないです。
文字起こし内容の翻訳
文字起こしした内容を、英語に翻訳する場合は、task引数を’translate’に指定します。
result = model.transcribe("test.mp3", task='translate')
結果(例):
I received the product purchased at Mercari. Thank you for responding quickly. It is bigger than I expected. As for the mechanism, it has a horizontal axis and a vertical axis motor at the top and bottom. The weight is 570g and it is not difficult to carry.
さいごに
今回のWhisperの使い方は、基本的な内容のみを、取り扱いました。
次回は、リアルタイム(ストリーミング)方式での、whisperの使用方法をご紹介します(完成次第、本記事にリンクを貼り付けます。)
最後まで読んで頂き、ありがとうございました。
また次回、お会いしましょう!