
Whisper のオーディオチャンキング:長い音声を効率よく文字起こしする方法
Eric King
Author
はじめに
Whisper は強力な音声テキスト変換モデルですが、入力長に厳しい上限があります。
ポッドキャスト、会議、コールセンター音声など長い録音ではオーディオのチャンキングが不可欠で、正確でスケーラブルな文字起こしのために必要です。
ポッドキャスト、会議、コールセンター音声など長い録音ではオーディオのチャンキングが不可欠で、正確でスケーラブルな文字起こしのために必要です。
この記事では次の内容を説明します。
- Whisper におけるオーディオチャンキングとは何か
- チャンクサイズが重要な理由
- 長時間音声とリアルタイム文字起こしのベストプラクティス
- よくあるチャンキングの失敗とその回避
Whisper におけるオーディオチャンキングとは?
オーディオチャンキングとは、Whisper に送る前に長い音声ファイルを短いセグメントに分割することです。
必要な理由:
- Whisper は一度に約 30 秒分の音声を処理する
- それより長い音声は分割が必要
- チャンキングでメモリ使用量と遅延を抑えられる
各チャンクは独立して文字起こしされ、後から全文にマージします。
チャンクサイズが重要な理由
不適切なチャンクサイズは文字起こし品質を大きく損ないます。
短すぎるチャンク
❌ 文脈が失われる
❌ 文の断片化が増える
❌ 単語誤り率が上がる
❌ 文の断片化が増える
❌ 単語誤り率が上がる
長すぎるチャンク
❌ GPU メモリの問題
❌ 推論が遅くなる
❌ 切り捨てのリスク
❌ 推論が遅くなる
❌ 切り捨てのリスク
推奨チャンク長
| 用途 | チャンク長 |
|---|---|
| バッチ文字起こし | 20〜30 秒 |
| ストリーミング/リアルタイム | 5〜10 秒 |
| ノイズの多い通話音声 | 10〜15 秒 |
固定長チャンキングと VAD ベースのチャンキング
1️⃣ 固定長チャンキング
N 秒ごとに音声を分割します。
メリット
- シンプル
- 挙動が予測しやすい
デメリット
- 文の途中で切れる
- 会話では精度が落ちやすい
2️⃣ VAD ベースのチャンキング(推奨)
**音声活動検出(VAD)**で無音位置で分割します。
メリット
- 文の境界が自然
- 精度が高い
- 読みやすい書き起こしになる
代表的な VAD ツール
- WebRTC VAD
- Silero VAD
- pyannote.audio
チャンクのオーバーラップ:重要な工夫
チャンク境界で単語が欠けないよう、重なりのあるチャンクを使います。
例
- チャンク長:20 秒
- オーバーラップ:2〜3 秒
境界付近の単語を Whisper が二重に「聞く」ことになります。
その後:
- 重複部分のテキストを重複排除
- 信頼度の高い側を採用
例:Python で長い音声をチャンク分割
import librosa
audio, sr = librosa.load("long_audio.wav", sr=16000)
chunk_size = 20 * sr
overlap = 3 * sr
chunks = []
start = 0
while start < len(audio):
end = start + chunk_size
chunk = audio[start:end]
chunks.append(chunk)
start += chunk_size - overlap
各チャンクは独立して Whisper に渡せます。
チャンキングを使った Whisper のストリーミング
リアルタイム音声認識では:
- 小さなチャンク(2〜5 秒)を使う
- VAD と組み合わせる
- リングバッファを使う
典型的なストリーミングパイプライン:
Microphone → VAD → Buffer → Whisper → Partial Result
⚠️ トレードオフ:
- チャンクが小さいほど遅延は低い
- チャンクが大きいほど精度は上がりやすい
チャンク間のコンテキストの扱い
Whisper はデフォルトでは前のチャンクを覚えていません。
対策:
- 直前のテキストをプロンプトとして渡す
- オーバーラップするチャンクを使う
- 後処理で言語モデルを適用する
例:
result = model.transcribe(chunk, initial_prompt=previous_text)
よくあるチャンキングの失敗
❌ 避けるべきこと:
- チャンク間にオーバーラップがない
- 単語の途中で分割する
- 1 チャンクに複数話者を混在させる
- 無音検出を無視する
✅ ベストプラクティス:
- VAD を使う
- オーバーラップを入れる
- 賢くマージする
パフォーマンスのヒント
- 音声をモノラル 16 kHz に変換する
- 音量を正規化する
- GPU 効率のためチャンクをバッチ処理する
- fp16 推論を使う
大規模な文字起こしシステムではこれらの最適化が効きます。
本番システムでのチャンキング
規模が大きくなると、チャンキングは次と組み合わされることが多いです。
- メッセージキュー(RabbitMQ / Kafka)
- 非同期ワーカー
- 失敗チャンクのリトライ
- タイムスタンプの整合
これにより、数時間の音声やエンタープライズ負荷にも Whisper を適用できます。
まとめ
Whisper のオーディオチャンキングは単なる回避策ではなく、信頼できる音声テキストシステムの中核パターンです。
適切なチャンクサイズ、オーバーラップ、VAD があれば:
- 長さに制限のない音声を文字起こしできる
- 遅延を下げられる
- 精度を大きく改善できる
チャンキング・ストリーミング・最適化を最初から備えたソリューションが欲しい場合は、SayToWords のようなツールがパイプライン全体を簡素化できます。
FAQ
Q: Whisper は長い音声をそのまま扱えますか?
A: いいえ。長い音声は約 30 秒程度のセグメントに分割する必要があります。
Q: Whisper に最適なチャンクサイズは?
A: バッチは 20〜30 秒、ストリーミングは 5〜10 秒が目安です。
Q: オーバーラップは必要ですか?
A: はい。2〜3 秒のオーバーラップを強く推奨します。
