シンプルな文字起こしテストでわかること、わからないこと

シンプルな文字起こしテストでわかること、わからないこと

目次
  1. このテストでわかること、わからないこと
  2. モデルは 2 種類、リクエストは 3 モード
  3. 文字起こしの課金方式
  4. コスト
  5. 精度と対応言語
  6. ストリーミング出力
  7. 繰り返し音声のキャッシュ
  8. まず確認すべきこと、そして自分でテストすべきこと
  9. 結論
  10. 出典

Synthorai で音声の文字起こしができるようになった。2 つのファミリーにまたがる 13 個のモデルが、1 つのエンドポイントの背後にある。

この 1 つのエンドポイントは、かなりの量の作業を隠している。各モデルはネイティブの形ではほとんど別物だからだ。whisper-1 は multipart のファイルアップロードを受け取って {text} を返す。gpt-4o-transcribe は同じアップロード方式だが、token の使用量が追加される。Gemini はそもそも文字起こし API ではない。音声を base64 エンコードして JSON の generateContent リクエストに詰め込み、candidates[0].content.parts[].text からテキストを掘り出す必要がある。ByteDance の seed-asr は BytePlus AUC プロトコルを話し、Google の chirp 系モデルは OAuth でアクセスする Cloud Speech-to-Text のレコグナイザーだ。

エンドポイントも認証もレスポンスの形もバラバラで、それぞれに 1 つずつ統合作業が増える。gateway を通せば、これが OpenAI 互換の呼び出し 1 つになる。gpt-4o-mini-transcribegemini-2.5-flash-liteseed-asr-bigmodel に差し替えても、コードのそれ以外の部分は何も変えなくていい。

呼び出すのは OpenAI 互換の文字起こしエンドポイントなので、すでに Whisper を使っているならそのまま差し替えられる。

curl https://synthorai.io/v1/audio/transcriptions \
  -H "Authorization: Bearer $SYNTHORAI_API_KEY" \
  -F file=@meeting.mp3 \
  -F model=gemini-2.5-flash-lite
from openai import OpenAI

client = OpenAI(base_url="https://synthorai.io/v1", api_key="sk-syn-...")

with open("meeting.mp3", "rb") as f:
    result = client.audio.transcriptions.create(model="gemini-2.5-flash-lite", file=f)

print(result.text)

文字起こしの結果は text で返り、課金されたコストは x-total-cost-usd レスポンスヘッダーに入っている。

13 個すべてに同じシンプルなテストを通した。そのテストが何なのかが、以下のすべての数値を決める。


このテストでわかること、わからないこと

固有名詞を含まない日常的な文章(朝の様子、天気、市場への買い物)を、世界で最も話者の多い 5 言語それぞれで標準的なテキスト読み上げ音声として生成し、各クリップを 13 個すべてのモデルで文字起こしした。各クリップは約 12〜15 秒、普通のペースの発話で約 40 語、長い無音はなし。16 kHz モノラル 16-bit PCM WAV(256 kbps、1 分あたり約 2 MB)でエンコードしてある。テキストが正解データで、長さは正確だ。

これは意図的に簡単なケースにした。クリーンで台本通りの単一話者の音声、訛りもノイズも専門用語もない。だから音声の難易度に依存しない項目を見るには都合がいい。測れるのはコスト、レイテンシ、そもそもどの言語を受け付けるか、streaming できるかで、これらは安定した事実だ。

品質のベンチマークではない。訛り、背景ノイズ、業界特有の語彙、話者の重なり、1 時間に及ぶ長さといった実際の録音は、クリーンな音声では決して見えない形でこれらのモデルを引き離す。ここにある数値からそれは予測できない。精度の数値はランキングではなく最低ラインの確認として読み、コスト・対応言語・streaming の結果を、実際に頼れるベースラインとして扱ってほしい。

モデルは 2 種類、リクエストは 3 モード

13 個のモデルは 2 つの種類に分かれる。

  • ネイティブマルチモーダルモデル(6 個、Google の Gemini ファミリー:gemini-2.5-flash-litegemini-3.1-flash-lite-previewgemini-2.5-flashgemini-3-flash-previewgemini-3.5-flashgemini-2.5-pro)。音声とテキストを扱う汎用モデルで、マルチモーダルである副産物として文字起こしもこなす。
  • 専用 ASR モデル(7 個:OpenAI の whisper-1gpt-4o-transcribegpt-4o-mini-transcribe、ByteDance の seed-asr-bigmodel、Alibaba の qwen3-asr-flash、Google の chirp-2chirp-3)。音声認識専用に作られたモデル。

音声を送る方法は 3 通りある。

  • ファイル入力・バッチ出力:録音全体をアップロードし、文字起こし全文を 1 回のレスポンスで受け取る。すべてのモデルが対応している。
  • ファイル入力・テキストストリーム出力:アップロードは同じだが、文字起こしが生成されるそばから SSE で返ってくる。対応しているモデルもあれば、バッチのみのモデルもある。
  • 音声ストリーム入力・テキストストリーム出力:マイクや通話のライブ音声をリアルタイムに認識する。開発中でまだ利用できないため、以下の説明は最初の 2 モードが対象。

文字起こしの課金方式

課金の形は 2 種類ある。音声 1 分あたり課金whisper-1seed-asrqwen3-asr-flash、Chirp 系モデル):中身に関係なく、録音の実時間の長さに対して支払う。token あたり課金gpt-4o 系と Gemini 系モデル):音声は一定レートで token 化され、入力 token に加えて文字起こしの出力 token に対して支払う。無音は密度の高い発話より安くつく。

token あたり課金には落とし穴がある。表示されている入力レートはテキスト向けで、音声はもっと高く課金される(gpt-4o-mini-transcribe は入力 $1.25/M と表示されているが、音声は $3/M で課金される)。テキストのレートから見積もると安く出すぎる。ゲートウェイは実際の課金額を x-total-cost-usd ヘッダーで返すので、価格ページから推測せずにこれを読むこと。

コスト

ここはテストできれいに数字が出る部分で,モデル間の差が最も大きい。課金ヘッダーから取った1分あたりのコストは以下の通り。

モデルタイプコスト/分レイテンシストリーミング
gemini-2.5-flash-litemultimodal$0.0006≈4schunks
gemini-3.1-flash-lite-previewmultimodal$0.0016≈3schunks
seed-asr-bigmodeldedicated$0.0020≈10sno
qwen3-asr-flashdedicated$0.0021≈3sno
gemini-2.5-flashmultimodal$0.0026≈2schunks
gpt-4o-mini-transcribededicated$0.0031≈3stoken-by-token
gemini-3-flash-previewmultimodal$0.0035≈4schunks
whisper-1dedicated$0.0060≈4sno
gpt-4o-transcribededicated$0.0062≈2stoken-by-token
gemini-2.5-promultimodal$0.0082≈5schunks
chirp-2dedicated$0.0164≈3sno
chirp-3dedicated$0.0164≈4sno
gemini-3.5-flashmultimodal$0.0178≈5schunks

最安の gemini-2.5-flash-lite が1分 $0.0006,最高の gemini-3.5-flash が $0.0178 で,約30倍の開きがある。品質ではなく価格の面で,注目すべき点が2つある。まず最も安いモデルは Gemini の flash-lite で,最安の専用 ASR より3倍安い。そして Gemini ファミリー内では,今回のテストにおいて価格と精度に相関がなかった。つまり大きくて高いモデルが自動的に安全な選択になるわけではない。大きいモデルに金を払う前に,まず安いモデルを自分の音声でベンチマークすべき理由がここにある。

これらの数字が自分のファイルでどう変わるかは,課金の仕組み次第だ。分単位課金のモデル(whisper-1seed-asrqwen3-asr-flash,Chirp 系)は再生時間だけで課金するので,レートはそのまま使える。10分の音声は1分あたりの数字の10倍になり,フォーマットや内容は関係ない。

トークン単位課金のモデル(gpt-4o と Gemini の行)は,入力コストがファイルサイズではなく再生時間に比例する。プロバイダーがトークン化の前に音声をリサンプリングするためだ。同じ内容なら,重い 320 kbps の MP3 でも軽い 16 kHz の WAV でも,トークン化されるコストはほぼ同じになる。だからファイルを圧縮してもストレージは節約できるが,文字起こしのコストは減らない。トークン単位の課金額を動かすのは,実際にどれだけ話されているかだ。今回のクリップは通常のペースで無音がないので,これより密度が高い,あるいは静かな音声は出力トークンが少し増えたり減ったりする。いずれの場合も x-total-cost-usd ヘッダーが正確な値になる。

精度と対応言語

英語,スペイン語,フランス語については,その言語を受け付けるモデルなら,いずれもエラー率はほぼ 0% だった。これが下限であり,全モデルがクリアしている。この簡単なテストでも綻びが見え始めるのは中国語とヒンディー語だが,これはどのモデルが優れているという結論ではなく,自分でテストすべき箇所のヒントとして読んでほしい。

ModelMandarin (CER)Hindi (WER)Coverage
gemini-2.5-flash-lite0%13%all five
gemini-3.1-flash-lite-preview0%15%all five
seed-asr-bigmodel0%failsEnglish + Chinese only
qwen3-asr-flash0%15%all five
gemini-2.5-flash0%15%all five
gpt-4o-mini-transcribe0%4%all five
gemini-3-flash-preview16%7%all five
whisper-10%22%all five
gpt-4o-transcribe0%13%all five
gemini-2.5-pro0%15%all five
chirp-216%15%all five
chirp-32%15%all five
gemini-3.5-flash0%15%all five

ここで効いてくるのは精度ではなく対応言語だ。seed-asr はヒンディー語,スペイン語,フランス語では使い物にならない文字起こしを返す。英語と中国語専用のモデルなので,音声がこの 2 言語のどちらかでない限り選択肢に入らない。それ以外はすべて 5 言語に対応していた。

ヒンディー語のばらつきと中国語での取りこぼし(chirp-2,Gemini 1 つ)が示すのは,難しい言語では信頼する前に自分でテストすべきということであって,どれが優れているという話ではない。絶対値は合成音声とスコアリングの影響で上振れしており,実行ごとに変動する。率直に言えば,主要言語のクリーンな音声では精度でモデルに差はつかず,だからこのテストでは精度を基準に選べとは言えない。

ストリーミング出力

文字起こしをストリーミングできるかどうかは品質ではなく機能の問題であり,ここでモデルが二分される。分単位課金のモデル(whisper-1seed-asrqwen3-asr-flash,両 Chirp)はバッチ専用で,ストリーミングを要求すると gateway が 400 を返す。gpt-4o 系は token 単位でストリーミングする。gpt-4o-transcribe は約 1 秒で最初の単語を返し,残りを順次埋めていく。これがライブ感のある UI に必要な挙動だ。Gemini 系は技術的にはストリーミングするが,3〜6 個の大きなブロックで返ってきて,最初のブロックが届くのは文字起こしがほぼ完了するタイミングなので,ほとんど意味がない。コストはバッチと変わらない。ストリーミングするには stream=true を付ける。

curl -N https://synthorai.io/v1/audio/transcriptions \
  -H "Authorization: Bearer $SYNTHORAI_API_KEY" \
  -F file=@meeting.mp3 -F model=gpt-4o-transcribe -F stream=true
# data: {"type":"transcript.text.delta","delta":"When"}
# data: {"type":"transcript.text.delta","delta":" you"} ...

繰り返し音声のキャッシュ

キャッシュでも 2 つの課金体系がもう一度分かれる。分単位課金のモデルはキャッシュできない。同じクリップを whisper-1 に 5 回送ったところ,毎回まったく同じ $0.015478 を払った。料金が再生時間だけで決まるからだ。token 課金の Gemini 系はキャッシュできる。同じファイルを繰り返し送ると Gemini の暗黙キャッシュが audio token を再利用する。155 秒のクリップを 5 回送ったケースでは,gemini-2.5-flash が 5 回のうち 2 回で $0.0054 から $0.0026 まで下がり,約 51% の削減になった。gemini-2.5-pro は約 39% 下がった。

ただし確実ではない理由が 2 つある。ベストエフォートなので,キャッシュに当たる繰り返しもあれば,満額を払う繰り返しもある。さらに音声が Gemini の token 下限,おおむね 1 分以上をクリアする必要があり,このテストの他の短いクリップはこれを満たさない。gpt-4o 系はキャッシュ率の記載がなく,実行ごとの通常の変動しか見られなかった。つまり同じファイルを再度文字起こしするワークロードなら,token 課金モデルではキャッシュが実際の割引になるが,分単位課金モデルでは何も得られない。

まず確認すべきこと、そして自分でテストすべきこと

このテストは、あなたの録音に対してどのモデルが最も正確かを教えてはくれない。教えてくれるのは、自分で評価を走らせる前に何で絞り込むべきかだ。

  • 言語。 必要な言語をすべてサポートしているか確認する。seed-asr は英語と中国語のみ。残り 12 モデルは試した 5 言語すべてに対応した。これは好みの問題ではなく、通すか通さないかの絶対条件だ。
  • Streaming。 リアルタイムの文字起こしが必要なら、token 単位で streaming できるのは gpt-4o 系だけだ。分単位課金のモデルはバッチ処理のみで、Gemini の streaming は粒度が粗い。
  • コスト。 差は約 30 倍ある。gemini-2.5-flash-lite が最も安く、しかも多言語対応。Chirp 各種と最大の Gemini が最も高い。同じファミリーの大きいモデルは、簡単なクリップではその割高さに見合う性能を出さなかった。だから確認せずに大きいモデルが必要だと思い込まないこと。同じファイルを何度も文字起こしするなら、token 課金の Gemini モデルは上述のとおり音声をキャッシュできる。

数モデルがこれらの条件をクリアしたら、残る問いは「あなた自身の音声、つまり訛りやノイズや語彙を含む録音に対して各モデルがどれだけ正確か」だ。これは自分で答えを出すしかない。クリーンな音声のベンチマークは、生き残ったモデルを実際の録音で走らせることの代わりにはならない。

結論

主要言語のクリーンで台本どおりの音声では、13 モデルすべてがほぼ同じ精度だった。これがこのテストが示す最も有用な事実だ。精度は選択の軸にならない。代わりにはっきりしたのは、そして実際に大きく差が出るのはベースラインの部分だ。コストは約 30 倍の幅があり、あるモデルは 2 言語しかカバーせず、いくつかは streaming できない。これらを使って候補を絞り込めばよい。勝者を決めるためではない。そのうえで、生き残った 2、3 モデルを自分の音声で走らせる。この最後のステップだけは、どんな単純なテストでも代わりにやってはくれない。


出典

コストとレイテンシは 2026-06-25 に Synthorai 上で、13 モデルと 5 言語(英語、北京語、ヒンディー語、スペイン語、フランス語)にわたり、x-total-cost-usd ヘッダーと SSE のタイミングを使って測定した。音声は text-to-speech で生成し、意図的に簡単なものにしてある。そのため精度の数値は品質ベンチマークではなく下限の確認だ。訛りやノイズを含む実世界の音声なら、これらのモデルの差はもっと違った形で現れるだろう。レイテンシは実行ごとに変動する。掲載価格はその時点での当プラットフォームの料金だ。利用前に最新の価格を確認すること。

← ブログに戻る