文字起こしの仕組みガイド
Whisper・オンデバイス処理・モデル選択・WebGPU・言語指定について詳しく解説します。
目次
Whisper とは何か
Whisper は OpenAI が 2022 年に公開した自動音声認識(ASR: Automatic Speech Recognition)モデルです。初代 Whisper は 68 万時間の多言語音声で学習されましたが、2023 年公開の large-v3 では 100 万時間の弱ラベル音声と、large-v2 で擬似ラベル付けした 400 万時間の音声を合わせた約 500 万時間まで学習データが拡張されています。99 言語の認識・翻訳・タイムスタンプ付与を単一モデルで処理できる「汎用音声理解モデル」として設計されており、AudioBuff が採用する large-v3-turbo はこの v3 系の学習済み重みを継承しています。
アーキテクチャは Transformer のエンコーダー・デコーダー型で、入力音声を 80 次元の log-Mel スペクトログラムに変換してエンコーダーに与え、デコーダーがテキストトークンを順次生成します。Whisper には tiny(39M パラメータ)、base(74M)、small(244M)、medium(769M)、large(1550M)の 5 サイズに加え、推論を高速化した large-v3-turbo(809M、デコーダー層を 32→4 に削減)が公式にリリースされています。
AudioBuff は標準モデルに whisper-small(244M)、高品質モデルに whisper-large-v3-turbo(809M)を採用しています。tiny/base ではなく small を標準にしているのは、日本語の漢字・カタカナの誤認率が tiny/base では実用上問題が出やすいためです。
なぜブラウザで動くのか
従来の Whisper は Python + PyTorch で動かすのが一般的でしたが、AudioBuff は @huggingface/transformers(旧 transformers.js)と ONNX Runtime Web を組み合わせ、すべての推論をブラウザ内の Web Worker で実行しています。サーバーへの音声送信は一切発生しません。
モデルファイルは Hugging Face Hub から初回のみ取得され、ブラウザの Cache Storage に保存されます。一度ダウンロードすれば次回からはネットワーク接続なしで動作します。標準モデルで約 600MB、高品質モデルで約 1GB のキャッシュ容量を確保する必要があります。
プライバシー上の意味は大きく、医療・法務・社内会議など機密性の高い音声を外部 API に送らずに文字起こしできます。GDPR や HIPAA の文脈でも、データが端末から出ない設計は監査上の優位性があります。
初回ダウンロードはモデルサイズに応じて数分かかることがあります。標準モデル(600MB)は 100Mbps 環境で 1 分前後、モバイル回線では 10 分以上かかる場合もあるため、Wi-Fi 環境での初回起動を推奨します。
モデル選択:標準(small)vs 高品質(large-v3-turbo)
AudioBuff では「標準」と「高品質」の 2 モデルから選択できます。両者の違いは精度・速度・ダウンロード容量・メモリ使用量のトレードオフにあります。
| 項目 | 標準(whisper-small) | 高品質(large-v3-turbo) |
|---|---|---|
| パラメータ数 | 244M | 809M |
| DL 容量(量子化後) | 約 600MB | 約 1GB |
| encoder 量子化 | fp32 | fp16 |
| decoder 量子化 | q4(4bit 量子化) | q4(4bit 量子化) |
| 日本語精度(体感) | 実用十分 | 固有名詞・専門用語に強い |
| 推論速度(WebGPU) | 実時間の 0.3〜0.5 倍 | 実時間の 0.5〜0.8 倍 |
| メモリ使用量 | 比較的軽い | ピーク時 1.5GB 前後 |
| 推奨用途 | ポッドキャスト・日常会話 | 会議録・専門分野・固有名詞多め |
高品質モデルの encoder を fp32 のままロードすると、ブラウザの ArrayBuffer 上限(32bit ブラウザで 2GB、Chrome の単一バッファ実装上限の都合)に抵触し、OOM エラーで落ちます。AudioBuff は fp16 化することでこの壁を回避しつつ、精度劣化はほぼゼロに保っています(faster-whisper も fp16 をデフォルトとしており、large 系では fp16 が標準的選択)。
WebGPU 加速と WASM フォールバック
AudioBuff は推論時に WebGPU が利用可能かを自動判定し、対応環境では GPU 経由で実行、非対応環境では WebAssembly(SIMD 拡張)で CPU 実行にフォールバックします。コード上は `navigator.gpu` の有無で判定しているだけなので、追加設定は不要です。
WebGPU は 2026 年 1 月時点で、Chrome / Edge / Brave / Opera など Chromium 系(2023 年〜)に加え、Safari(macOS 26 / iOS 26 / iPadOS 26 / visionOS 26 で標準サポート)、Firefox(Windows は 141+、macOS ARM64 は 145+ で正式対応、Linux は 2026 年中の対応予定)と、主要ブラウザでの対応が出揃った状態です。
速度差は環境によって大きく異なりますが、目安としては WebGPU 利用時に CPU 実行比で 2〜5 倍程度の高速化が期待できます。特に高品質モデル(large-v3-turbo)は WebGPU なしでは実用速度に届かないため、可能な限り WebGPU 対応ブラウザでの利用を推奨します。
- WebGPU が使える主な環境
- Chrome 113+、Edge 113+、Opera 99+、Brave 1.50+(macOS/Windows/Linux)、Safari 26+(macOS Tahoe / iOS 26 / iPadOS 26 / visionOS 26)、Firefox 141+(Windows)/ 145+(macOS ARM64)。Android Chrome および Linux 版 Firefox は端末・バージョン依存。
- WASM フォールバック時の注意
- CPU 推論は時間がかかります。標準モデルでも実時間の 1〜2 倍、高品質モデルでは 3〜5 倍以上かかる場合があるため、WASM 環境では標準モデルの利用を強く推奨します。
言語選択と精度
Whisper は言語を自動検出する機能を持ちますが、AudioBuff では明示的に「日本語」「英語」を指定する設計にしています。これは UX 上の理由ではなく、精度上の理由です。
自動検出は冒頭 30 秒の音声から推論されますが、無音・ノイズ・短い発話・コードスイッチ(日英混在)の場面では誤判定が起きやすく、誤った言語で進むと文字起こし全体が破綻します。明示指定によりデコーダーの最初に該当言語のトークンを強制し、推論を安定させることができます。
言語別の精度傾向としては、英語が最も高精度で、日本語は漢字変換・固有名詞でやや劣ります。話速が速い・複数話者が重なる・音量が小さい・残響が多い音声では、いずれの言語でもエラー率が上昇します。文字起こしへ渡されるのはトリム済みの元音声で、EQ・無音カット・ラウドネス調整は反映されません。精度を最大化したい場合は、まず Buff it で書き出した音声を再アップロードしてから文字起こしを実行してください。
- 精度を上げる Buff it の推奨設定
- EQ:ハイパスフィルター ON(低域のノイズや空調音を除去)/プリセットは「Clarity」または「Podcast」。仕上げ:無音カット ON(hallucination 抑制)、コンプレッサー ON(音量ムラを均す)、ラウドネス -16 LUFS(小声の聞き取りやすさ向上)。出力:WAV 推奨(再エンコードによる音質劣化を避ける)。書き出した音声を再度ドロップして「文字起こし」タブで実行します。
- 日英混在音声(コードスイッチ)
- Whisper は混在音声に対応しますが、明示指定された言語に強く引きずられます。会議録などで両言語が頻繁に切り替わる場合は、主要言語を選択した上で誤認部分を手動修正するのが現実的です。
- 誤認しやすいパターン
- 人名・地名・専門用語・略語・新しい固有名詞(学習データ収集時点以降のもの)。高品質モデル(large-v3-turbo)はこれらの誤認が標準モデルより明確に少なくなります。
- 無音・極小音量での hallucination
- 完全な無音や非常に小さい音に対して、Whisper は学習データに含まれる「字幕の典型パターン」(例:「ご視聴ありがとうございました」)を生成してしまうことがあります。Buff it で無音カットを有効にした音声を再アップロードして文字起こしすると、この種の誤生成を抑制できます。