AmiVoice Techblog

AmiVoiceの音声認識に関する技術情報・活用方法・組み込み方などを発信するアドバンスト・メディアのテックブログです

なぜ音声認識率は100%にならないのか?



f:id:amivoice_techblog:20210209095049p:plain 大倉尭

皆さん、こんにちは!

これまで何回かにわたって音声認識の「認識率(認識精度)」についてこのブログで記事を執筆してきましたが、音声認識技術の究極の目標は認識率100%を達成することなのは言うまでもありません。

認識率100%とは、音声認識の結果が正解文のテキストと1文字も違わず完全一致することです。抜けている文字があったり、余計な文字が入っていたりしてもいけません。仮にどんな発話でも認識率100%で認識できる音声認識モデルができたとしたら、音声認識を利用したシステムやアプリケーションの利用は今以上に進むことでしょう。国内外の様々な研究機関や企業が、この究極の目標に少しでも近づこうと日夜研究開発を行っています。

しかし、「認識率100%」はそう簡単に実現できるものではありません。そこで今回は、「なぜ音声認識率は100%にならないのか?」と題して、その要因を紹介したいと思います。

話者の特徴や環境の問題

人の耳で聞いても何を言っているかが分かりづらい音声は、機械での音声認識も難しいのが実情です。認識しづらい音声は、一般的に以下のような特徴があります。

  • 音量が極端に大きい(音割れ)、もしくは極端に小さい
  • 滑舌が悪い
  • 早口である
  • 周囲の雑音が大きい            など

特に雑音に関しては、雑音を除去するマイクが販売されていたり、音声から雑音を除去する技術の開発が進んでいたりもします。しかし、あらゆる種類の雑音に対応するのは難しいですし、あまりにも雑音が大きいと雑音を除去しても発話が聞こえないといった問題があります。

また、私たちが聞き慣れていない「訛り」や「方言」を聞き取れないのと同じように、訛りや方言の強い発話も音声認識が難しいです。ただしこれは、音声認識システムを学習させるために必要な音声とその書き起こし(テキスト)のデータを集めるのが難しい、という要因もあります。人間もこうした発話を繰り返し聞いたり、方言独自の言葉の意味を知ったりすると、少しずつ全体の意味が理解できるようになりますよね。音声認識システムも同様に、訛りや方言を認識させるためには、そのように発話している音声とテキストのペアを用意して学習させることが必要なのです。

音の似ている文字の問題 

人の耳でも聞き間違えやすい、「1(いち)」と「8(はち)*1、「B(ビー)」と「D(ディー)」などは音声認識でも判別が難しいものの一つです。

「意外」と「以外」のような同音異義語の場合は、前後の単語などの情報から文脈を推定し判別することができます。ただし、数字同士やアルファベット同士では使われる文脈も似ていることが多く、子音の有無やその違いを音声的に判別する方法に頼らざるを得ません。同じ「いち」という発話でも、その音は話者の性別・年齢・発話環境などによって全く異なります。その上で、似たような音である「はち」などとも比較しないといけません。ですので、いくらAIといっても、音声的な判別だけで音声認識を行うのは難しいタスクになります。

姓・名などの固有名詞の問題

例えば「高橋・髙橋」「渡辺・渡部・渡邊・渡邉」など、名字(姓)には表記が複数あり得るものが存在します。下の名前(名)は名字以上にバリエーションがありますね。

AmiVoiceではこのような場合、基本的には「最も出現頻度が高い表記」が出るようになっています。名字の例でいえば、通常は「高橋」「渡辺」といった表記で出力されます。ただし、有名人の名前などをフルネームで発話した場合や、個人がある程度特定できる「○○総理大臣」といった肩書きと一緒に発話された場合などは、その人物名に合わせた表記で出力されることもあり得ます。

どうしても特定の表記を出したい場合は、「単語登録機能」を使うことで実現できます。AmiVoice Cloud Platformで単語登録を行う方法は以下の記事で説明していますので、興味のある方はぜひご覧ください。

amivoice-tech.hatenablog.com

なお、単語登録機能の使用の有無にかかわらず、全く同じ発話・文脈で「高橋」と「髙橋」を使い分けるといったことはできません。音声認識にテレパシーは通用しないのです

造語は単語登録しない限り出ないが…

流行語のような世間一般でも使われるようになった言葉は、音声認識で出力されるように弊社でシステムを更新しています。ただ、当然ですが、自分で創作した「造語」などは音声認識システムに教えてあげないと認識結果として出てくることはありません。「単語登録機能」を使って登録してください。

なお、単語登録機能も完璧ではありません。例えば、造語として以下の単語を登録してみたとしましょう。

「UNK」(読み:あんく)

これはunknown wordの略で、日本語では「未知語」といいます。弊社社内(もしかしたら音声認識業界で?)で使われており、発音辞書(単語とその読みの対応表)に登録されていない言葉のことを指します。
では、この「UNK」を単語登録した音声認識システムで、以下の文章を音声認識させた場合を考えてみましょう。

このあんくまきさんにおくっておいて

「UNK」を単語登録したことによって、少なくとも2通りの解釈が考えられるのが分かるでしょうか。

①:この 案 熊木さん に 送って おいて
②:この UNK 巻さん に 送って おいて

私がAmiVoice Cloud Platformを使って試してみた*2ところ、「UNK」を単語登録していなければ①が認識結果として出力されましたが、「UNK」を単語登録した後の認識結果は②となりました。つまり、単語登録によって「①が正解の場合でも認識結果が②となってしまう」パターンが生じてしまった、ということを意味しています。

表記ゆれの問題

過去の記事でも何度か「表記ゆれ」という言葉が出てきていますが、改めて説明しておきます。「表記ゆれ」とは、同じ音・同じ意味であるにもかかわらず、その表記が異なっていることです*3。例えば、以下のようなパターンがあります。

  • 漢字と仮名:   様々 / さまざま
  • 送り仮名の違い: 引っ越し / 引越し / 引越
  • 仮名表記の違い: バイオリン / ヴァイオリン
  • 仮名とアルファベット: アンドロイド / Android

音声認識で問題となるのは、正解文と認識結果で表記ゆれが発生した場合です。例えば、正解文では「引越」なのに認識結果で「引っ越し」となっている場合、そのままでは「っ」と「し」の部分が挿入誤りとしてカウントされてしまいます。

表記ゆれはパターンが多く、その全てを網羅することは難しいです。また、機械的に変換できない場合もあります。例えば、以下の例文を見てください。

  • 正解文 :おじさんがプレゼントをくれた。
  • 認識結果:叔父さんがプレゼントをくれた。

正解文の「おじさん」は、父母の弟である「叔父さん」なのか、父母の兄である「伯父さん」なのか、それとも「近所のおじさん」のような、一般に中年男性を意味する「おじさん」なのか、この文だけでは区別ができません。この表記ゆれを正解とするか誤りとするか、機械的に判断するのは難しいといってよいでしょう。

おまけ:ギャグを音声認識できなかった話

少し前の話(2020年3月)になりますが、日本テレビ系「ヒルナンデス!」の特集で弊社が取り上げられた際、ますだおかだ・岡田さんのギャグ「出た!」をAmiVoiceで音声認識させたところ、「データ」と誤認識してしまった部分が放送されました。

この記事の余談として、なぜ誤認識してしまったのかを、個人的な推測も含めて書かせてもらえればと思います。

まず第一に、こうした一発ギャグのようなものは文脈がありません。この記事の序盤でも少し触れましたが、文脈の情報が使えないと音声認識の難易度は上がります。

さらに、日本語では一般的に動詞は文末に来ることが多いです。「出た」は「私はお店から出た」のように文末に来ることが多く、文頭で使われることはあまりありません。一方で、「データ」のような名詞は「データをダウンロードした」というように、文頭で使われることも比較的多いのではないかと思います。

以上の要因が重なって、「出た!」の一言だけでは「データ」に誤認識してしまったのではないか、と考えています。

おわりに

今回は、音声認識率(認識精度)が100%にならない要因を説明しました。音声的な問題から言語的な問題まで、多岐にわたる要因があることが分かっていただけたでしょうか。絡み合う複数の要因を一つ一つ克服していくことが、音声認識に関する研究開発の難しさであり、面白さでもあるのかなと思います。

もしこの記事を見て音声認識技術やAmiVoice Cloud Platformに興味を持った開発者の方がいましたら、ぜひ https://acp.amivoice.com/ を試してみてください。毎月音声60分までは無料で使えます。

ここまでお読みいただき、ありがとうございました!

この記事を書いた人

*1:「1(いち)」と「8(はち)」以外にも、音声認識では「1(いち)」と「7(しち)」の誤りが多い印象があります。「7」は「なな」と読むことの方が多いですが、「しち」と読むこともあるので、音声認識の候補としては入れておかなければなりません。

*2:音声認識エンジンは「会話_汎用」を使用しました。2021年8月に試した結果です。

*3:「表記ゆれ」と「表記揺れ」も表記ゆれになりますね。