Faster-Whisper:高速に音声をテキストに変換できます。インターネット接続なしでも。 GPU
Faster-Whisper(SYSTRAN/faster-whisper、MIT ライセンス)は、CTranslate2 エンジン上で Whisper を再実装したものです。プロジェクトは、openai/whisper と同等の精度で、メモリ使用量を抑えながら最大 4 倍の速度を実現すると発表しています。プロジェクト自身の CPU ベンチマーク(Intel i7-12700K、small モデル)では、13 分の音声を int8 で 1 分 42 秒で文字起こしします。openai/whisper の 6 分 58 秒と比べ、グラフィックスカードを使わず、CPU 上で約 4 倍の速さです。
Faster-WhisperはWhisperの再実装で、同等のテキスト品質を保ちながら、文字起こしを大幅に高速化し、メモリ消費もかなり抑えます。新しいモデルではありません。同じ重みを、SYSTRANがMITライセンスで公開した別の推論エンジン、CTranslate2で実行します。ローカルで文字起こしをする際の標準的な選択肢となる実装であり、プロジェクト自身のベンチマークは、「CPUでの文字起こしがようやく現実的になる」とは実際にどういうことかを、具体的な数値で示しています。
#何であり、何ではないのか
Whisperは、モデルファミリーと、それらを実行するOpenAIのリファレンス実装の両方を指します。Faster-Whisperはモデルをそのまま使い、実装をCTranslate2に置き換えます。CTranslate2はTransformer型モデル向けに最適化された推論エンジンで、もともとはOpenNMTで機械翻訳用に開発されました。同等の品質で得られるテキストは同じです。変わるのは、そのテキストを得るために必要な時間とメモリであり、最終結果の内容ではありません。
実用上は、Whisperのモデルサイズの選び方についてすでに知っていることが、すべてそのまま通用します。また、日常的に目にするローカル文字起こしツールの大半は、すでに内部でこれを使っており、そのことを明示したり、ドキュメントに記載したりしていない場合も多くあります。もう一つ便利な点として、openai-whisperとは異なり、FFmpegをシステムに別途インストールする必要はありません。音声はPyAVライブラリでデコードされ、PyAVにはFFmpegのライブラリが同梱されています。
#高速化はどこから来るのか
お使いのマシンで、プライベートかつ無料のChatGPTを1時間で構築 — LM Studio、Ollama、Open WebUI、ご自身のドキュメント、クラウド不要。
- 永久に利用できるオンラインスペース
- PDF + ファイル
- 生涯アップデート
- 専用の推論エンジン
- PyTorchのような汎用フレームワークを直接使うのではなく、トランスフォーマーを効率的に実行するために開発されたCTranslate2を使います。
- 量子化
- モデルを8ビットで実行すると、メモリ使用量を減らして処理を高速化できます。文字起こしの品質は低下しますが、通常は気づかない程度です。
- バッチ処理
- 長いファイルは、厳密に一つずつ順番に処理する代わりに、分割して並列処理できます(batch_size)。ただし、メモリ使用量は増えます。
- 音声区間検出
- 無音部分をスキップすると、モデルが何もない部分の処理に時間を費やすのを防げます。会議の録音では、その効果は決して小さくありません。
#開発元が数値で示す性能向上
SYSTRANは、読者が推測に頼らずに済むよう、独自のベンチマークを公開しています。13分間の音声の文字起こしについて、同じハードウェア上で複数の実装を比較し、それぞれの処理時間とメモリ使用量を示しています。特に重要なのは、専用グラフィックスカードを使わない場合の2組の測定結果です。これは、企業の業務用PCの大半に当てはまる利用環境です。
| 実装 | 精度 | 時間 | RAMメモリ |
|---|---|---|---|
| openai/whisper | fp32 | 6分58秒 | 2,335 MB |
| faster-whisper | fp32 | 2分37秒 | 2 257 MB |
| faster-whisper | int8 | 1分42秒 | 1 477 MB |
| faster-whisper(バッチサイズ8) | int8 | 51 s | 3 608 MB |
したがって、CPU上ではFaster-Whisperのint8版はopenai/whisperの4.1倍の速さで文字起こしを行い、メモリ使用量も少なくなります(1,477 MB対2,335 MB)。これは、プロジェクトが全般的に掲げる「メモリ使用量を抑えながら…最大4倍高速」という説明と整合する結果です。GPU上では、同じベンチマークでlarge-v2モデルを使用した場合(RTX 3070 Ti)、fp16では1分03秒、int8では59秒で、openai/whisperの2分23秒を下回ります。ここでは量子化による速度向上はCPUの場合より控えめですが、ビデオメモリ使用量は4,708 MBから2,926 MBに減少します。
リポジトリでは、distil-whisper-large-v3という派生モデルを使った比較も公開されています。これは量子化ではなく、蒸留によって軽量化されたモデルです。GPU上でtransformersライブラリを使い、fp16、バッチサイズ16で処理すると、テストコーパスの文字起こしに46分12秒かかり、単語誤り率は14.801です。同じ設定でFaster-Whisperを使うと、25分50秒、単語誤り率13.527となります。この特定のテストでは、より高速で、かつより正確です。これは、CTranslate2による改善が量子化だけにとどまらないことを示しています。実行する具体的なモデルとは別に、実行エンジン自体も重要なのです。
このベンチマークでは、Faster-Whisperとwhisper.cppも比較しています。whisper.cppは、特にMacや組み込み機器で広く使われている別の再実装です。large-v2モデルをfp16で実行した場合、Flash Attentionを使用したwhisper.cppは、ビデオメモリ4,127 MBで1分05秒かかり、Faster-Whisper(1分03秒、4,525 MB)とほぼ互角です。これは、Faster-Whisperだけが高速な選択肢ではないことを思い出させてくれます。このガイドでFaster-Whisperを最も詳しく取り上げているのは、そのPythonエコシステムがRAGパイプラインや報告書の自動作成に最も組み込みやすいからです。
#インストールして最初のファイルを文字起こしする
インストールは1行で完了します。PyAVがPythonパッケージに直接組み込まれているため、音声のデコードに必要なシステム依存関係を管理する必要はありません。最小限のコードには、モデルを単純に使う場合と大きな差を生む3つのパラメータが含まれています。device(cpuまたはcuda)の明示的な選択、計算型(compute_type。CPUではint8から始めるのが妥当です)、そして音声活動検出フィルターの有効化です。
公式ベンチマークで測定された差の大部分を説明する2つの設定を適用するには、3行のコードで十分です。量子化には compute_type="int8"、音声活動検出には vad_filter=True を使用します。language="fr" パラメータは、録音の最初の数秒で最も誤りが多い自動言語検出を無効にします。
#どのモデル、どの精度
| サイズ | 8ビットでの推定メモリ | 用途 |
|---|---|---|
| 小型(small) | CPUでint8を使用した場合、約1.5 GB(公式のテスト環境で測定) | 迅速なメモ取り、クリアな音声、単一言語 |
| 中程度 | 約1〜2 GB | 長時間の録音でよく選ばれるバランス型 |
| 大規模(large-v2) | GPU上でint8で約2.9GB(公式テストベンチで測定) | 整ったフランス語、専門用語、聞き取りにくい音声 |
フランス語の場合、中規模モデルと大規模モデルの差は、主に固有名詞、略語、複数の人が同時に話す箇所に表れます。文字起こしの結果を、その後、構造化された議事録を作成する言語モデルに渡すのであれば、珍しい単語の単発の誤りは、直感的に思うほど大きな問題ではありません。一方、人がそのまま読む必要があるなら、大規模モデルを使う意義があります。ただし、本ガイドの前の部分で示した時間とメモリの負担が伴います。
#実際に重要な設定
- 01言語を固定する自動検出は冒頭の数秒で誤判定します。特に、録音が無音や短い挨拶から始まる場合に起こります。言語を指定すれば、ある種類のエラーをまとめてなくせます。
- 02音声区間検出を有効にする無音部分の文字起こしを防ぎ、ファイル末尾でモデルが無音から架空のテキストを生成するハルシネーションを減らします。
- 03int8量子化を選ぶこれは公式テストベンチで観察された性能差の主な要因です。CPU では、small モデルの実行時間は2分37秒から1分42秒に短縮され、メモリ使用量が減少します。
- 04メモリに余裕があればバッチ処理を有効にするbatch_size=8にすると、公式ベンチマークでは処理時間がさらに半分になりますが、その分メモリ使用量が増えます。メモリに余裕があるマシンでのみ使用してください。
#一般的なマシンでの 3 つの具体的な使用例
公式ベンチマークの数値は、専用グラフィックスカードを搭載していない業務用PCでの実際の利用例に照らすと、その意味がよく分かります。これは企業で最も一般的な環境です。
- 議事録
- 1時間の会議をデスクトップ用プロセッサでint8を使って文字起こしする場合、13分の音声で測定した数値から換算すると、所要時間はおよそ7〜8分です。会議直後のコーヒーブレイク中に文字起こしを開始する運用に十分適しています。
- ポッドキャストやウェビナーのアーカイブ
- 長いファイルをまとめて夜間にバッチ処理すれば、batch_size=8で測定された性能向上の恩恵を直接受けられ、朝まで実行を監視する必要もありません。
- 動画に後から字幕を付ける
- Faster-Whisperは動画の文字起こしの生テキストを生成します。その後、WhisperXで単語ごとのアライメントを行い、動画編集で実際に使える字幕ファイルに必要な正確なタイムスタンプを追加します。
3つのケースに共通するのは、グラフィックスカードを使わないことです。公式ベンチマークのCPU測定結果は、最近のデスクトップ向けプロセッサで一般的な用途には十分対応できることを示しています。そのため、単に文字起こしが必要なだけなら、追加のハードウェアを購入するかどうかよりも、モデルのサイズと量子化をどう選ぶかが本当の検討課題になります。
#Faster-Whisper またはその他の選択肢
| ニーズ | 選択 |
|---|---|
| ローカルで素早く文字起こし。GPUなしでも可能 | Faster-Whisper |
| 字幕作成用の単語ごとのタイムスタンプ | 強制アライメントを組み込んだパイプライン(WhisperX) |
| 誰が話したかを知る | 話者分離を組み込んだパイプライン |
| 連続ストリームのリアルタイム文字起こし | Voskのようなストリーミング向けエンジン |
| GPUを搭載していない、非常に低スペックなマシン | Faster-Whisperをint8で使用し、smallまたはmediumモデルを指定 |
- WhisperX:単語単位のタイムスタンプと話者識別
- ローカルでWhisperを使用する:基本的な知識
- オーディオファイルからレポートへ
- Vosk:ファイルではなく、ストリーミングで文字起こし
- 出典:Faster-Whisperの公式リポジトリとそのベンチマーク
- 出典:CTranslate2推論エンジン
- 出典:openai/whisperの公式リポジトリ(比較の基準)
#FAQ
Faster-WhisperはWhisperよりも正確性が低いですか?+
GPU は必要か?+
音声のない区間で、モデルが架空の文章を生成するのはなぜですか?+
フランス語の処理にはどのサイズのモデルが適していますか?+
リアルタイム処理はできますか?+
実際に int8 量子化がもたらす効果はどれくらいですか?+
Faster-Whisper は他の実装よりも常に速いですか?+
ご意見、誤りのご指摘、補足はありますか?ぜひお知らせください。皆さんにとってより良いガイドにするために役立ちます。