iPhone の日記アプリで使う音声認識モデルを選び直したとき、よく使われる読み上げ音声のベンチマークでは、Apple の音声認識が一番良く見えました。ところが、アプリが実際に扱う会話の音声で測り直すと、Apple の文字誤り率は今使っている Parakeet の約1.8倍でした。ベンチマークの数字だけで乗り換えていたら、文字起こしの品質が落ちるところでした。どう比べて、どこで間違えかけ、最終的に何を選んだかを、数字と一緒に書きます。
やりたかったこと
iPhone の中で会話を文字にする日記アプリ(Liner Notes)を作っています。文字起こしには NVIDIA の Parakeet の日本語モデルを、FluidAudio 経由の Core ML で使っていました。
2026年10月に、Apple の音声認識(iOS の SpeechTranscriber)、Mistral の Voxtral、IBM の Granite Speech がそろって日本語で使えるようになったので、乗り換える価値があるかを比べることにしました。条件は、iPhone の中で動くこと、録音後にバックグラウンドで処理できる速さであること、そして会話を正確に文字にできることです。
日本語の音声認識をどう評価するか
日本語は単語の区切りに空白がないので、英語で使う単語誤り率(WER)ではなく、文字単位の誤り率(CER)で比べるのが一般的です。正解の文と認識結果を文字単位で突き合わせ、置き換え、抜け、余計な文字の数を、正解の文字数で割ります。今回は両方を NFKC で正規化し、句読点、空白、記号を除いてから比べました。「三十分」と「30分」のような表記の違いも誤りに数えています。
公開されている日本語の評価データは、大きく読み上げ音声と、話し言葉や会話の音声に分かれます。
| データ | 種類 | 中身 |
|---|---|---|
| FLEURS(Google) | 読み上げ | 同じ文を多言語で読み上げた音声。モデルの公表値によく使われる |
| Common Voice(Mozilla) | 読み上げ | ボランティアが文を読み上げた音声 |
| JSUT | 読み上げ | 1人の話者が文を読み上げた音声 |
| CSJ(日本語話し言葉コーパス) | 話し言葉 | 講演などの音声。有償 |
| ReazonSpeech | 会話 | テレビ放送(ドラマ、バラエティ、ニュース)の音声と字幕 |
まず読み上げ音声で比べ、Apple に乗り換えるつもりになった
最初に使ったのは FLEURS の日本語(開発用セット266本、計56.5分)です。Voxtral の公表値も同じデータで出ているので、比べやすいと考えました。
各モデルは次のように動かしました。測ったのはすべて同じ Mac(Apple シリコン、メモリ24GB)です。
- Parakeet: FluidAudio 0.17.4。アプリと同じく、6〜12秒の静かな所で区間を切り、前後に0.5秒の無音を足す
- Apple: SpeechTranscriber(ja-JP)
- Voxtral: Voxtral Mini 4B Realtime の6bit 量子化版を Mac の GPU で。遅延は480ms(既定)と2400ms(最も精度が出る設定)の2通り
| モデル | CER | 56.5分の処理時間 |
|---|---|---|
| Voxtral(遅延2400ms) | 3.61% | 2,067秒 |
| Apple | 4.68% | 約69秒 |
| Parakeet(使っていたもの) | 5.29% | 18.8秒 |
| Voxtral(遅延480ms) | 7.02% | 3,003秒 |
読み上げ音声(FLEURS 日本語)の文字誤り率
%(低いほど正確)
表で見る
| 項目 | 値 |
|---|---|
| Voxtral(遅延2400ms) | 3.61% |
| Apple | 4.68% |
| Parakeet | 5.29% |
| Voxtral(遅延480ms) | 7.02% |
Voxtral は遅延2400msなら一番正確ですが、Parakeet の約110倍遅く、6bit でも3.6GBあるので、iPhone のバックグラウンドで動かすのは現実的ではありません。Apple は Parakeet より誤りが少なく、OS に入っている認識器なので、アプリにモデルを同梱する必要もありません。この時点では Apple に乗り換えるつもりでした。
会話の音声で測り直すと、Apple の誤りは約1.8倍だった
ただ、FLEURS は静かな場所でのはっきりした読み上げです。アプリが実際に扱うのは、言いよどみや相づちが入り、話が重なる会話です。そこで、テレビ放送の会話を集めた ReazonSpeech のテストセット(2,632本、計258分)でも、同じ条件で測りました。
| モデル | CER | 何も出力しなかった区間 | 258分の処理時間 |
|---|---|---|---|
| Parakeet | 12.74% | 0本 | 118秒 |
| Apple | 22.96% | 37本 | 631秒 |
読み上げと会話で、Apple と Parakeet の順位が入れ替わる
文字誤り率(%、低いほど正確)
表で見る
| Parakeet | Apple | |
|---|---|---|
| 読み上げ(FLEURS) | 5.29% | 4.68% |
| 会話(ReazonSpeech) | 12.74% | 22.96% |
読み上げとは順位が逆になりました。Apple の誤りを見ると、短い区間で何も出力しないことが37本あり、誰も言っていない「ありがとうございます」「よろしくお願いします」を足すことがありました。テスト版の利用者から「言っていない『こんにちは』が文字起こしに入る」と報告されていたのと同じ型の誤りです。日記に、誰も言っていない挨拶が残るのは困ります。
Apple の処理時間には1本ごとの起動が含まれているので、速さの差はこの表ほど大きくありません。ただ、会話の精度では Parakeet を選ぶべきだと分かりました。
Granite を加えたら、前後の無音で数字が3ポイント動いた
続いて、10月21日に日本語に対応した IBM の Granite Speech 5.0 TurboCTC(4.7億パラメータ)を加えました。最初の結果は、会話で Granite 9.79%、Parakeet 12.74% です。今度は Granite に乗り換えるべきに見えました。
ところが調べてみると、Parakeet にはアプリと同じく前後に0.5秒の無音を足していたのに、Granite には足していませんでした。条件をそろえて測り直したのが次の表です(Granite は iPhone 向けに Core ML に変換したもの)。
| 条件 | Granite | Parakeet |
|---|---|---|
| 会話(ReazonSpeech)、無音なし | 9.99% | 11.73% |
| 会話(ReazonSpeech)、前後に0.5秒の無音 | 13.03% | 12.74% |
| 連続した音声(約4分×14本)、前後に0.5秒の無音 | 4.36% | 4.39% |
前後の無音の有無で、Granite と Parakeet の差が変わる
文字誤り率(%)
表で見る
| Granite | Parakeet | |
|---|---|---|
| 会話、無音なし | 9.99% | 11.73% |
| 会話、前後に0.5秒の無音 | 13.03% | 12.74% |
| 連続した音声、前後に0.5秒の無音 | 4.36% | 4.39% |
ReazonSpeech の音声には、前後の発話の切れ端が入っていて、正解の字幕には含まれていません。Granite は入力の端にある切れ端を書かないので、無音を足すと切れ端が端でなくなり、書くようになります。その分、誤りが増えたように見えていました。アプリが実際に扱う、長い録音を区切った音声では、2つの差はありません。
最後は自分の録音で読み比べた
公開データで差がつかなかったので、手元の実際の録音6本(計2時間10分)で、2つの文字起こしを並べて読みました。
| 見たところ | Granite | Parakeet |
|---|---|---|
| 早口で発話が重なる所 | 句を落とす | 落としにくい |
| 相づちだけの区間(11か所) | 1か所も書かなかった | 書いた |
| 日本語を英語の文にした区間 | 3か所 | なし |
| 数字と英字の固有名詞 | 正確 | ときどき崩れる |
相づちや重なった発話は、会話の記録では大事な部分です。数字と固有名詞は Granite が良いものの、全体では Parakeet の方が漏れが少ない結果でした。
結論: Parakeet のまま使う
| モデル | 得意なこと | 苦手なこと | 速さ |
|---|---|---|---|
| Parakeet | 会話、相づち、重なった発話 | 読み上げではわずかに Apple に劣る | 速い(258分を118秒) |
| Apple | 読み上げ、モデルの同梱が不要 | 会話で無言を返す、言っていない挨拶を足す | 普通(258分を631秒) |
| Granite | 速さ、数字と英字の固有名詞 | 相づち、重なった発話、英語への置き換え | 最も速い(iPhone 16 で10分を2.1秒) |
| Voxtral | 読み上げの正確さ(遅延2400ms) | 遅い、モデルが大きい(3.6GB) | 遅い(56.5分を2,067秒) |
アプリは Parakeet のままにしました。会話の精度が最も良く、相づちも落とさないからです。Granite は Core ML に変換したものを残してあり、速さが足りなくなったときの候補にしています。
まとめ
- 日本語の音声認識を比べるなら、アプリが扱う音声に近い評価データで測る。会話なら ReazonSpeech のような会話の音声で。読み上げの FLEURS では順位が逆になった
- 区間の切り方や前後の無音などの前処理をそろえる。無音0.5秒で誤り率が3ポイント動いた
- 公開データで差がつかなければ、自分の録音で文字起こしを並べて読む。相づちの抜けや言っていない挨拶のように、誤り率に出にくい差が見える
ほかの開発ノート
- iOS のバックグラウンドで音声を処理するなら Neural Engine を使う
iOS のバックグラウンド(BGContinuedProcessingTask)では CPU の処理だけが12〜21倍遅くなり、Neural Engine は2倍以内だった。黙って消える原因3つと直し方を、実機の数字で。
- 文字起こしの精度が同じでも、要約の誤りは3倍違うことがある
文字誤り率が同じ2つの音声認識で、要約の誤りは3倍違った。要約の指示を厳しくすると誤りが増えた理由と、要約で比べる方法。
- Apple の PCC は、本番のリクエストの10.6%を「不適切」として拒否した
Foundation Models の Private Cloud Compute(PCC)は、本番614回のリクエストの10.6%を「不適切」として拒否し、9.6%をレート制限で止めた。起きた問題と作り直した設計。
- 先行研究の方法で自分のコピー AI を作ったが、何を学ばせても一致率は62〜67%で止まった
先行研究の方法で自分のコピー AI を作ったが、日記2万字でも自己紹介1行でも一致率は62〜67%。その人らしさは内容より話し方に出ることを、自分の録音と文献で。