2つの音声認識の文字誤り率(CER)が同じだったので、どちらを使っても同じ品質だと思っていました。ところが、それぞれの文字起こしから要約を作って比べると、誤りを含む話題の数が3倍違いました。誤りを減らそうと要約の指示を厳しくすると、今度は誤りが増えました。何を物差しにすべきだったか、どう比べ直したかを書きます。
やりたかったこと
iPhone の中で会話を文字にする日記アプリ(Liner Notes)では、会話を文字起こししたあと、話題ごとの要約にして保存します。利用者が読むのはこの要約で、文字起こしの全文はほとんど読みません。
音声認識を選び直す比較で、Parakeet と Granite の CER は、条件をそろえるとほぼ同じでした(4.39% と 4.36%)。どちらを使っても要約の品質は変わらないはずだと考えていました。
CER が数えるもの、数えないもの
CER は、正解の文と認識結果を文字単位で突き合わせ、置き換え、抜け、余計な文字の数を、正解の文字数で割ったものです。すべての文字を同じ重さで数えるので、「相づちの『うん』を1つ落とす」も「取引先の名前を1文字取り違える」も、同じ1文字の誤りです。
要約に影響するのは後者です。相づちが抜けても要約は変わりませんが、名前や数字の取り違えはそのまま要約に入ります。
要約で比べてみた
同じ会議の録音2本を、2つの音声認識で文字起こしし、それぞれから話題ごとの要約を作りました。どちらの音声認識の要約かを伏せて並べ、話題ごとに「正しい」「誤りを含む」「不要(会議の目的に関係ない余談)」に分けて数えました。
| 音声認識 | CER(公開データの連続音声) | 話題の数 | 誤りを含む話題 | 不要な話題 |
|---|---|---|---|---|
| Granite | 4.36% | 32 | 9 | 5 |
| Parakeet | 4.39% | 29 | 3 | 4 |
要約の話題のうち、誤りを含む割合と不要な割合
%(話題の数に対する割合)
表で見る
| Granite | Parakeet | |
|---|---|---|
| 誤りを含む話題 | 9/32(28%) | 3/29(10%) |
| 不要な話題 | 5/32(16%) | 4/29(14%) |
CER はほぼ同じなのに、誤りを含む話題は3倍違いました。Granite は早口で発話が重なる所で句を落とすことが多く、それで話の前後関係が崩れ、要約で取り違えが起きたと考えています。
誤りを減らそうとして、増やした
誤りを減らすため、要約の指示を厳しくしました。話題ごとに根拠となる文字起こしの行を挙げさせ、本題か余談か、どれくらい確かかを答えさせ、「数字と固有名詞は文字起こしにあるものだけを使う」と縛りました。余談と、確かさの低い話題は外します。
| 要約の指示 | 話題の数 | 誤りを含む話題 |
|---|---|---|
| 元の指示(ほどよくまとめる) | 30 | 5 |
| 厳しくした指示 | 22 | 9 |
要約の指示を厳しくしたら、誤りを含む話題の割合が増えた
%
表で見る
| 項目 | 値 |
|---|---|
| 元の指示(ほどよくまとめる) | 5/30(17%) |
| 厳しくした指示 | 9/22(41%) |
誤りは増えました。中身を見ると、次のような誤りが出ていました。
- 聞き間違えた数字をそのまま写す。「2、3社」と言ったのを「23社」と書く
- 別の話題に出てきた数字を1つの話題に詰め込み、「10万」と「170万」を取り違える
- 余談を外すように言うと、本題(ファームウェアの消費電力の話)まで余談として外す
| 試したこと | 狙い | 結果 |
|---|---|---|
| 文字起こしにある数字だけを使わせる | 数字の取り違えを減らす | 聞き間違いの数字をそのまま写し、誤りが増えた |
| 根拠の行を挙げさせる | 根拠の無い話題を減らす | 1つの話題に数字を詰め込み、取り違えた |
| 余談を外させる | 不要な話題を減らす | 余談は減ったが、本題も外した |
| 確かさの低い話題を外す | 誤りを含む話題を減らす | 話題が30から22に減ったうえ、誤りの割合は増えた |
「文字起こしにある数字だけを使え」と言うと、モデルは文字起こしの誤りもそのまま信じます。ほどよくまとめさせる元の指示の方が、前後の文脈から数字を正しく読んでいました。
音声認識が返す単語ごとの確信度も使えませんでした。Parakeet の確信度は、正しい単語でも間違った単語でも0.95前後で、誤りを見分ける手がかりになりません。
最終的にどうしたか
物差しを「要約に誤りと不要な情報が入っていないか」に変えました。音声認識や要約の指示を変えるときは、同じ会話で要約を作り、伏せて比べてから決めます。30話題ほど見れば違いは分かります。
要約の保存の形も変えました。以前は要約を文章にまとめ直していましたが、今は話題ごとの箇条書きで保存しています。
- 話題(話した人)[決まったこと] / 中身
文章にするのは、日記の下書きを作るときだけです。数字が文章に溶け込まず、話題ごとに分かれているので、読み返したときに取り違えに気づきやすくなりました。利用者は項目を長押しして、1つずつ直したり消したりできます。
次に試すことは3つあります。要約を2〜3回作って一致した話題だけを残す、数字を「20社ほど」のように丸めて書かせる、自信のない項目に「要確認」の印を付けて残す、です。
まとめ
- 音声認識は、利用者が読むもので比べる。要約を読むなら、CER より要約の誤りで比べる。CER が同じでも、要約の誤りは3倍違った
- 要約の指示で「文字起こしにある数字だけ」と縛らない。聞き間違いをそのまま写す。丸めて書かせる方が安全
- 単語ごとの確信度は、自分のデータで分布を見てから使う。Parakeet では誤りの手がかりにならなかった
- 比較は、どちらの結果かを伏せて行う
ほかの開発ノート
- iOS のバックグラウンドで音声を処理するなら Neural Engine を使う
iOS のバックグラウンド(BGContinuedProcessingTask)では CPU の処理だけが12〜21倍遅くなり、Neural Engine は2倍以内だった。黙って消える原因3つと直し方を、実機の数字で。
- ベンチマークだけで音声認識を選ぶと危ない。自分の用途の音声で測ると結果が変わる
読み上げのベンチマークでは Apple の音声認識が最良に見えたが、会話の音声では誤りが Parakeet の約1.8倍。日本語の音声認識を選ぶときの測り方と落とし穴を、数字で。
- Apple の PCC は、本番のリクエストの10.6%を「不適切」として拒否した
Foundation Models の Private Cloud Compute(PCC)は、本番614回のリクエストの10.6%を「不適切」として拒否し、9.6%をレート制限で止めた。起きた問題と作り直した設計。
- 先行研究の方法で自分のコピー AI を作ったが、何を学ばせても一致率は62〜67%で止まった
先行研究の方法で自分のコピー AI を作ったが、日記2万字でも自己紹介1行でも一致率は62〜67%。その人らしさは内容より話し方に出ることを、自分の録音と文献で。