Whisper
更新日:
定義
Whisperは、OpenAIが2022年に公開したオープンソースの音声認識モデルのファミリーで、68万時間の音声で訓練され、約99言語に対応しています。重みが自由に入手できるので、Whisperは多くのローカル文字起こし・音声入力ツールのエンジンになりました。
Whisperにはtinyからlargeまでのサイズがあり、大きいモデルほど精度が高く、遅くなります。ストリーミングではなくバッチで文字起こしするので、言葉をリアルタイムで表示するツールは、たいていストリーミングモデルと組み合わせ、ストリーミングモデルが対応していない言語にWhisperを使います。
Apple siliconでは、最適化されたランタイムによって、大きめのWhisperモデルでもデバイス上で快適に動きます。これが、現世代のプライベートでローカルなMac音声入力ツールを可能にしました。
サイズと、どれを選ぶべきか
tinyとbaseは高速ですが粗く、ボイスメモ程度なら十分です。smallは音声入力に使える最低ラインです。mediumとlargeはプロの仕事に十分な精度があり、最近のMacなら十分に高速です。現在いちばんバランスが良いのはlarge-v3-turboです。デコーダを軽量化したlargeモデルで、精度の大部分を保ったまま数倍の速度が出ます。選択肢を用意しているMacツールのほとんどはこれらを提供しています。音声入力に適しているのは、待ちくたびれる前にテキストを返してくれる範囲で、いちばん大きなモデルです。
ストリーミングではなくバッチ
Whisperは音声の一定区間を読み、それからその区間の文字起こしを書きます。フレーズ全体を見てから判断するので精度は高くなりますが、バッチ処理になります。話し終えるまで何も表示されません。Whisperだけで作られたツールは、1文ごとに待たされる感じがします。ストリーミングするツールは、リアルタイムの言葉にはトランスデューサモデルを組み合わせ、そのモデルが扱えない言語にWhisperを使います。
既知の弱点
Whisperは無音やごく短いクリップでハルシネーションを起こし、誰も言っていないもっともらしいフレーズを生成します。長い音声では同じ部分を繰り返すこともあります。どちらもよく知られており、対策も確立しています。モデルを動かす前に無音を削る、チャンクを短く保つ、話し声でない音声に対する出力は疑ってかかる、の3つです。数字や固有名詞は、ほかのASRと同じく、あなたの意図した表記ではなく、いちばんありそうな表記になります。
Macの「ターミナル」でWhisperを実行する方法
OpenAIは、WhisperをコマンドラインツールつきのPythonパッケージとして公開しています。プロジェクトによると、コードはPython 3.8から3.11で動作する想定で、オーディオファイルの読み込みにはffmpegツールが必要です。以下の手順は、PythonとHomebrewがすでにあることを前提にしています。
- 「ターミナル」を開き、ffmpegをインストールします:brew install ffmpeg
- Whisperをインストールします:pip install -U openai-whisper
- ファイルを文字起こしします:whisper audio.mp3 --model turbo
- 初回の実行ではモデルがダウンロードされるので待ちます。モデルはホームフォルダの.cache/whisperフォルダに保存され、以降はそれが使われます。
- 文字起こしは現在のフォルダにあります。デフォルトでは、Whisperはtxt、vtt、srt、tsv、jsonのファイルを書き出します。
- 自動検出を省きたい場合は、--languageのあとに言語名を付けます。例:--language Japanese
- whisper --helpを実行すると、すべてのオプションを確認できます。
Whisper turboとlarge:公開されている数値
OpenAIの表では、largeモデルはパラメータ数15億5,000万、ビデオメモリ約10GB、相対速度1xです。turboモデルはパラメータ数8億900万、約6GB、約8xです。OpenAIはturboを、精度の低下を最小限に抑えたlarge-v3の最適化版と説明しており、コマンドラインツールのデフォルトモデルになっています。
これらの数値には注意点が2つあります。速度は、英語を文字起こしするNVIDIA A100グラフィックカードで測定されたもので、OpenAIは実際の速度は言語、話す速さ、ハードウェアによって大きく変わる可能性があるとしています。また、turboは翻訳用に学習されていないので、翻訳を指示しても元の言語のまま返します。
- tiny:パラメータ数3,900万、約1GB、約10x。
- base:パラメータ数7,400万、約1GB、約7x。
- small:パラメータ数2億4,400万、約2GB、約4x。
- medium:パラメータ数7億6,900万、約5GB、約2x。
- large:パラメータ数15億5,000万、約10GB、1x。
- turbo:パラメータ数8億900万、約6GB、約8x。
Whisperは翻訳できますか?ほかの言語をどう扱うか
Whisperは2つの作業で学習されました。音声をその言語のまま文字起こしすることと、ほかの言語の音声を英語に翻訳することです。学習データ68万時間のうち、約43万8,000時間は英語の音声と英語の文字起こし、約12万6,000時間は英語以外の音声と英語の文字起こし、約11万7,000時間は英語以外の音声と同じ言語の文字起こしで、98言語にわたります。
そのため、翻訳は一方向にしか行えません。英語以外の音声から英語のテキストを得るには--task translateを追加し、OpenAIが勧めるとおりmediumかlargeのモデルを使います。Whisperは英語の音声をほかの言語に翻訳しません。
tiny、base、small、mediumの各サイズには、名前が.enで終わる英語専用版もあります。OpenAIによると、英語ではこちらの方が性能が高い傾向があり、特にtiny.enとbase.enで顕著で、small.enとmedium.enでは差が小さくなります。
よくある質問。
Whisperは無料で使えますか?
はい。モデルはMITライセンスのオープンソースで、自分のハードウェアで動きます。手間がかかるのは、それを使いやすい音声入力ツールに仕上げることで、Macのローカル音声入力アプリの多くが料金を取っているのはその部分です。
Whisperはクラウドなしで、Macで動きますか?
はい、しかも快適に動きます。Apple silicon向けに最適化されたランタイムなら、大きなモデルも実用的な速度でローカルで動きます。市販されているMacのローカル音声入力・文字起こしツールはどれも、Whisperかそれに近いモデルをこの方法で使っています。
Whisperは話している間にテキストをストリーミングしますか?
標準ではしません。チャンクが終わってから、そのチャンクを文字起こしします。言葉をリアルタイムで表示するツールは、ストリーミングモデルを併用し、ストリーミングモデルが対応していない言語にWhisperを使っています。
Whisperにはどのくらいのメモリが必要ですか?
OpenAIが示すビデオメモリの目安は、tinyとbaseが約1GB、smallが約2GB、mediumが約5GB、turboが約6GB、largeが約10GBです。
Whisperのbaseとbase.enの違いは何ですか?
base.enは英語専用に学習されたモデルで、baseは多言語モデルです。OpenAIによると、英語では.enモデルの方が性能が高い傾向があり、特にtinyとbaseのサイズで顕著です。
Whisperは英語をほかの言語に翻訳できますか?
できません。Whisperのtranslateタスクは、ほかの言語の音声を英語のテキストにするものです。turboモデルはそもそも翻訳用に学習されていないので、このタスクにはmediumかlargeを使ってください。