はじめに
普通の音声認識(ASR)では文脈も考慮して自然な文章が出力されることが多いですが、固有名詞の聞き取りなど、とにかく聞こえたままに書き起こしてほしい場面もあります。
そこで、無意味カナ文字列を、音声認識モデルがどのくらいの精度で認識できるか評価しました。
方法
比較条件
音声認識モデル、カナ化方法、認識対象文字列の組み合わせから条件を設定しました。
音声認識モデル
- 日本語(漢字カナ混じり)ASR: reazon-research/japanese-wav2vec2-base-rs35kh
 - カナASR: AndrewMcDowell/wav2vec2-xls-r-1b-japanese-hiragana-katakana
 
後者はカナ化されたスクリプトで学習されたカナを出力するASRモデルです。
カナ化方法
- トークンフィルタ: 音声認識モデルの出力トークンをカナに限定
 - 発音推定: 漢字カナ混じりの出力をpyopenjtalkで発音カナに変換
 
なおカナASRも読点など記号を出力するため、トークンフィルタの場合は、記号が除去されるようにフィルタしました。
認識対象文字列
- ユニグラム: 無意味カナ文字列を日本語のカナの出現頻度に基づくユニグラムで生成
 - バイグラム: 無意味カナ文字列を日本語のカナの出現頻度に基づくバイグラムで生成
 
認識対象文字列をvoicevoxで音声合成し、音声ファイルを100個作成しました。
指標
Character Error Rate (CER) を用いて評価しました。
結果と考察
音声認識モデル: 日本語ASR vs カナASR
カナ化方法: 発音推定、認識対象文字列: バイグラムのとき、以下の結果でした。
- 日本語ASR CER: 0.298
 - カナASR CER: 0.188
 
カナASRのほうがCERが大幅に低く、無意味カナ文字列の認識に適していることがわかりました。
カナ方法や認識対象文字列の条件が変わっても同様の傾向でした。
カナ化方法: トークンフィルタ vs 発音推定
認識対象文字列: バイグラムのとき、以下の結果でした。
- カナASR_トークンフィルタ CER: 0.221
 - カナASR_発音推定 CER: 0.188
 - 日本語ASR_トークンフィルタ CER: 0.358
 - 日本語ASR_発音推定 CER: 0.298
 
ASRの種類によらず、発音推定のほうがトークンフィルタよりも精度が高いことがわかりました。
カナASRはともかく、発音推定で間違う可能性が高い日本語ASRであっても、発音推定のほうが精度が高いのが意外でした。
念の為、母音と長音の表記ゆれを正規化したり、モウラの単位で比較したり、子音や母音の類似制度考慮して比較したりもしてみましたが、同様の結果でした。
学習時に使用されたトークンをすべて使えないことの悪影響と、発音推定で間違うリスクを比較したときに前者のほうが大きいのかもしれません。
認識対象文字列: ユニグラム vs バイグラム
音声認識モデル: カナASR、カナ化方法: 発音推定のとき、以下の結果でした。
- ユニグラム CER: 0.202
 - バイグラム CER: 0.188
 
バイグラムのほうが認識精度が高かったです。
音声認識モデルやカナ化方法を変えても同様の傾向でした。
音声認識モデルは日本語として自然な音素の並びにバイアスされた出力をするため、バイグラムのほうが予測しやすかったと考えられます。
事例分析
出力をいくつか眺めてみます。
正解と異なる箇所を太字にしています。正解に対して欠損している箇所は「B」で表現しています。
| 条件 | 出力 | CER | 
|---|---|---|
| 正解 | ポークスルトオキジョーピージッコクラクデキワンジューガウトラクサレナ | - | 
| カナASR_トークンフィルタ | トオクスルトオキジオピージッコクラクレキワンジュウガウトラクサレナ | 0.176 | 
| カナASR_発音推定 | トークスルトオキジオピージッコクラクレキワンジューガウトラクサレナ | 0.117 | 
| 日本語ASR_トークンフィルタ | ポークスルBBキBBBジッコクラBデキワBジBBガウトラックサレナ | 0.352 | 
| 日本語ASR_発音推定 | ポークスルBBキBBBジッコクラクデキワBジBBガウトラックサレナ | 0.324 | 
カナASRは全体的に惜しい感じで表記ゆれレベルのミスも多いです。
日本語ASRは欠損が多く、聞き取れていない箇所が多いです。
| 条件 | 出力 | CER | 
|---|---|---|
| 正解 | キナイガクイヒョーガケンジーアイコージタシターエスエスルオスオコト | - | 
| カナASR_トークンフィルタ | キナイラクイヒョウガゲンジイアイコウジタシテアイスイスルオスーコト | 0.303 | 
| カナASR_発音推定 | キナイラクイヒョーガゲンジイアイコージタシテアイスイスルオスーコト | 0.242 | 
| 日本語ASR_トークンフィルタ | キナイガBイヒBBガケBジBヤイコウジタBタチアサスルオソウコト | 0.424 | 
| 日本語ASR_発音推定 | キナイガクイヒョーガケンジBゴーイコージタBタチアサスルオソーコト | 0.272 | 
カナASRは全体的に惜しく、日本語ASRは欠損が多いです。
精度の絶対値
最も精度の良いカナASR_発音推定の条件でCERは0.2前後でした。これは、自然な日本語文よりも悪いのではと思われます。
ただ無意味文字列の場合、人間であっても正確に聞き取るのは難しいというか、複数の表記が正解になりえてしまうため、ある程度限界値の可能性もあります。
事例を眺めた印象では「ジョー」を「ジオ」と聞き取るなどほとんど許容範囲にも思われるため、実用上はあまり課題にはならないかもしれません。
今回、voicevoxで合成した音声を使用しました。いくつか人間の耳で聞いてみたところ、文字列通りに発音できているように思われましたが、すべてチェックしたわけではないので、ひょっとしたら不自然な発音の音声ファイルが混じっていたかもしれません。逆に、音声合成だと聞き取りやすすぎる可能性もあります。人間が発音した音声ファイルでも同様の評価をしてみるべきかもしれません。
おわりに
既存音声認識モデルで無意味カナ文字列の認識精度を評価しました。
CERは0.2と自然な日本語文の聞き取りに比べて悪かったですが、出力を見てみると、許容範囲のミスな気もしました。
今後、人間が発音した無意味カナ文字列や、外国語の発音の書き起こしなどでも評価してみたいです。