日本語の文字起こしサービスのエンジンを決めるため、Gemini(gemini-3.8-flash)と OpenAI(gpt-4o-mini-transcribe)を、公開されている日本語音声 12 クリップ・合計 85.6 分で比較しました。結論から言うと、平均精度は Gemini が上でしたが、より重要だったのは失敗の出方の違いです。Gemini は時刻がずれ、まれに応答が空になる。OpenAI はエラーなしで内容を落とします。
結論先行
| 区分 | Gemini CER | OpenAI CER |
|---|---|---|
| 朗読音声(FLEURS、4 本・約 12 分) | 2.4% | 5.1% |
| 記者会見・演説(正解テキストが全発話を含む 6 本の合算) | 8.7% | 17.6% |
| 台本ありの演説 1 本(8 分) | 5.8% | 55.0% |
| 質疑応答 12 分(整った文のため OpenAI が有利) | 10.2% | 3.4% |
| 項目 | Gemini | OpenAI |
|---|---|---|
| コスト(1 音声時間) | 約 ¥21 | 約 ¥27 |
| 話者ラベル・時刻 | あり(一貫性は会話の長さに依存) | なし |
| 主な失敗 | 時刻のずれ(最大 1.67 倍)、応答が空 | 無言の欠落・言い換え、途中打ち切り |
会見での Gemini の CER は、えー・あのを残す逐語出力と整文の正解との差が大半です。数字は単回測定の目安です。
なぜ測ったか
文字起こしサービスのエンジン選定が目的でした。英語圏の比較は多くても、日本語の会見や会話を同条件で並べた数字は見つけられませんでした。
音源は再配布・利用条件を確認できるものに限りました。放送局の番組や動画サイトの音声は、条件の読み取りに確信が持てなかったため使っていません。ReazonSpeech もログイン必須で利用目的の制限があるため、ダウンロードしていません。
測定方法
- データ: 首相官邸の首相会見・演説 8 クリップ(公共データ利用規約 1.0 に基づく。音声抽出・切り出し・変換を加工として行った)と、FLEURS ja_jp の朗読 4 クリップ(CC BY 4.0、12 文 × 12 話者を連結)。
- 正解: 官邸ページの整文済み会見録、FLEURS の raw_transcription。
- CER: 編集距離 ÷ 正解文字数。NFKC 正規化のうえ、空白と句読点を除去して比較しました。クリップが長い正解の一部だけに対応する場合は、正解側の開始・終了位置を自由にして照合しています。
- 条件: 本番と同じ経路(変換 → 無音検出 → 分割 → 各エンジン)、用語リストは空、各クリップ 1 回。
限界: 12 クリップの単回測定で、統計的有意性は主張できません。正解は整文なので、逐語の Gemini は不利に出ます。官邸 0809 と 0921 は正解に首相の冒頭発言がなく CER が膨らむため、合算から除きました。国会審議と気象庁の音声は未着手です。価格は仮定値(Gemini 入力 $1.0 / 出力 $2.5 per 100 万トークン、¥150/$)で計算しています。
結果の詳細
| クリップ | 長さ(分) | Gemini | OpenAI |
|---|---|---|---|
| fleurs_1 / 3 / 4 | 2.7 / 2.9 / 3.1 | 0.9% / 3.2% / 2.8% | 2.8% / 3.0% / 2.9% |
| fleurs_2 | 3.0 | 応答ブロック | 11.4% |
| gov_0917 冒頭 | 15.0 | 3.5% | 8.3% |
| gov_0917 質疑 | 12.0 | 10.2% | 3.4% |
| gov_0923 | 10.0 | 7.6% | 6.2% |
| gov_0825 | 14.8 | 11.9% | 10.0% |
| gov_0925 | 4.5 | 16.5% | 47.3% |
| gov_1005 | 8.0 | 5.8% | 55.0% |
OpenAI の失敗はエラーとして現れません。 gov_1005 では冒頭の段落を飛ばし、以降を言い換えました。gov_0925 では本文が音声の約 84% 分しかなく、意味の通らない崩れた文が混ざりました。gov_0917 の質疑では 12 分の区間の約 75% で出力が止まりました。ループや日本語以外の文字は出ません。
Gemini の失敗は 2 種類です。 1 つは fleurs_2 での空応答(blockReason=OTHER)で、手動の再試行 3 回のうち 2 回は再びブロック、1 回は成功しました。軽量モデル(3.1-flash-lite)は成功しました。もう 1 つは時刻で、最後の発話の終了時刻が音声長の最大 1.67 倍になりました。1.2 倍を超えたのは 4 クリップ(1.21〜1.67 倍)です。無音への幻覚発話、繰り返し、簡体字は 0 でした。
話者ラベルは、会話が長く続くほど一貫していました。gov_0923 の純度は 0.98、gov_0925 は 0.86、gov_0809 は 0.92(ラベル切替 9 回に対し実際は 5 回)です。FLEURS は 15 秒ごとに話者が替わるのに A〜C しか付かず、ターンが短いと別人が同じラベルに統合されます。処理時間は音声 1 分あたり Gemini 3.7 秒、OpenAI 1.9 秒でした。
実装で効いた工夫
上の失敗に、製品側で次のように対処しています。
- 無音位置で約 10 分に分割: 目標 10 分、上限 12 分、下限 4 分。目標付近 ±90 秒の無音の中点で切ります。語の途中で切れるのと、1 区間の失敗コストが大きくなるのを避けるためです。区間の頭には 12 秒の重なりを持たせます。
- 時刻のクランプと比例縮小: 最後の発話の終了が区間長の 1.05 倍を超えたら、全時刻を一律に縮めて区間内に収めます。測定で時刻が信用できないと分かったためで、再生位置へのジャンプが数分ずれるのを防ぎます。
- 重なり部分は時刻ではなく文字列で除去: 前区間の末尾 4 発話を正規化した文字列と、次区間の先頭発話を包含関係(6 文字以上)で比較して重複を落とします。時刻がずれるため、時刻だけでは切れません。
- 空応答は 1 回だけ再試行: 空応答が主な失敗だったので、同じモデルにもう一度投げ、それでも駄目なら次へ進みます。
-
フォールバックの段階: Gemini → 軽量 Gemini → OpenAI の順です。OpenAI の結果には
degradedを付け、話者・時刻なし、途中で止まる可能性ありと利用側に伝えます。 - 音声長に比例したタイムアウト: 一次モデルは「音声長 × 0.6 + 30 秒」(下限 60 秒、上限 240 秒)。15 秒の音声で 100 秒止まった例があり、満額待つと切替が遅れるためです。
コストの考え方
API 費用は上記の仮定で 1 時間あたり Gemini 約 ¥21(思考トークンを出力課金とすると約 ¥23)、OpenAI 約 ¥27 でした。入力は音声 1 分あたり約 1,450 トークンです。
3 分を 1 回分とすると 1 時間は 20 回分で、API 費用は 1 回分あたり ¥1 強(目安)です。ここに音声変換、重なり 12 秒分の二重処理(10 分に対し約 2%、目安)、失敗区間の再実行、サーバー費用が上乗せされます。精度が高く安いので、主役は Gemini になります。
まとめ
- 平均精度・コスト・機能(話者、時刻)で Gemini が優位でした。OpenAI は整った文では並びますが、無言で欠落する場合があります。
- Gemini を使うなら、時刻を信用せず、空応答に備え、重なりを文字列で除去する設計が必要です。
- 限界: 12 クリップ、単回、整文正解、価格は仮定です。追試や別データでの結果があれば教えてください。
開示
筆者は日本語 OCR・文字起こしサービス AI OCR(ocrjp.com)の開発者です。本測定はそのエンジン選定のために行いました。この文字起こしは https://ocrjp.com/mojiokoshi で、最初の 3 分を無料で試せます(3 分を超える音声の場合)。