05.3.2
動画からの音声認識
whisper.load_model("base") で 74M パラメーターのモデルを読み込み、Flex LNG の 2022 年第 3 四半期決算動画の mp3 を transcribe() でテキスト化します。続けて HuggingFace の FuguMT(staka/fugumt-en-ja)を pipeline("translation") で呼び、". " で区切った 1 文ずつを日本語に翻訳します。読み終えると、モデルサイズ tiny〜large の選び方と、“Ernings” のような誤認識を後処理で直す見通しが立ちます。直感 #
海外企業の決算発表動画やアナリスト向けウェブキャストは貴重な情報源ですが、音声のままでは感情分析にもキーワード検索にも使えません。OpenAIが公開しているWhisperは、68万時間以上の多言語データで学習された自動音声認識(ASR)モデルで、英語の決算動画なら数字や社名を含めて高い精度でテキスト化できます。出力は全文の text と、開始秒・終了秒付きの segments の 2 種類です。文字起こし結果をさらに FuguMT に通せば、日本語で読みながら分析を進められます。
詳細な解説 #
環境構築 #
Anacondaを使用している場合は、以下のコマンドで専用環境を作成します。Whisper は内部で ffmpeg を呼んで mp3 を読み込むため、conda install ffmpeg を忘れると transcribe() が “No such file or directory: ‘ffmpeg’” で止まります。
| |
Whisperによる音声認識 #
音声データは『Flex LNG Q3 2022 Key Takeaways』の音声を使用しています。
Whisperのモデルサイズはtiny・base・small・medium・largeの5段階があり、大きいほど精度が高くなりますが処理時間も増えます。決算動画のような明瞭な音声であればbaseで十分な精度が得られます。次のコードは、モデルの読み込みと mp3 の文字起こしを 2 行で済ませ、全文を表示します。
| |
| |
出力を読むと、“91 million” や “47.42 million” のような数字は正しく拾えている一方で、“Third” が “TURD”、“Earnings” が “Ernings” と綴りを崩しています。数字が正しく、語の綴りだけが崩れるのは base モデルに典型的な誤り方で、置換辞書で直せる範囲です。
モデルサイズによる精度の違い #
モデルサイズを上げると固有名詞や専門用語の認識精度が向上します。WER(Word Error Rate)は認識した単語のうち誤った割合で、tiny から large に上げるほど下がりますが、パラメーター数は 39M から 1550M へ約 40 倍に増えます。
| モデル | パラメーター数 | 英語WER | 処理速度 | 推奨用途 |
|---|---|---|---|---|
| tiny | 39M | 高 | 最速 | プロトタイプ・短時間テスト |
| base | 74M | 中 | 速い | 明瞭な音声・決算動画 |
| small | 244M | 低 | 普通 | ノイズのある音声 |
| medium | 769M | 低 | 遅い | 高精度が必要な場合 |
| large | 1550M | 最低 | 最遅 | 最高精度・GPU推奨 |
タイムスタンプ付き文字起こし #
result["segments"]にはタイムスタンプ付きのセグメント情報が含まれており、どの時間帯でどの発言があったかを把握できます。次のコードは最初の 5 セグメントについて、開始秒・終了秒・本文を 1 行ずつ表示します。
| |
FuguMTによる日本語翻訳 #
文字起こし結果を日本語に翻訳します。文単位に分割してからモデルに入力することで、翻訳品質が向上します。FuguMT は Marian 系の英日翻訳モデルで、1 回に受け取れる長さに上限があるため、全文をまとめて渡すと途中で切れたり文脈が崩れたりします。音声認識の openai/whisper と、翻訳に使う ニューラル機械翻訳モデルFuguMT(HuggingFace 版は staka/fugumt-en-ja)の公式情報は各リンク先にあります。
| |
| |
訳文を見ると、“Ernings” や “4D Quater” のような文字起こしの誤りはそのまま日本語に残っています。FuguMT は入力の綴りを直しません。したがって、Whisper の出力を翻訳の前に replace や置換辞書で修正しておくことが、日本語字幕の品質を決めます。
翻訳の正しさは保証されておらず、また本コードも動作や出力に関しては一切の責任を負えません。
使いどころと落とし穴 #
文字起こし結果に含まれる誤認識は、“TURD” → “Third”、“Ernings” → “Earnings” のように型が決まっていることが多く、re.sub と金融用語の置換辞書で翻訳前にまとめて直せます。修正したテキストを 感情分析のページ の sentiment_pipeline に渡せば、決算発表のトーン分析まで自動化できます。
長時間の動画では、transcribe() に language="en"(コマンドラインなら --language en)を指定して言語判定を固定すると、途中の無音や雑音で別言語と誤判定されるのを防げます。GPU がない環境では tiny か base を選び、1 時間の動画なら数分〜十数分で終わる処理時間を優先し、精度が必要な部分だけ small で再実行する使い分けが現実的です。
- 英語から日本語字幕データを作成 — 文字起こし結果をSRT字幕ファイルに変換
- テキストの感情分析 — 文字起こしテキストのセンチメント分析