AmiVoice Techblog

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

音声認識エンジンAmiVoiceの音声認識精度(音声認識率)を計測してみた


f:id:amivoice_techblog:20210115094116p:plain 安藤章悟

みなさま こんにちは。

AmiVoiceユーザーのみなさまからのよくある質問に「AmiVoiceって音声認識精度(音声認識率)は何パーセントですか?」というものがあります。ですが、実際に音声認識精度がどういうもので、どうやって測るかはあまり知られていないかと思います。

今回は、AmiVoiceの音声認識APIである、AmiVoice Cloud Platform( https://acp.amivoice.com/ )の音声認識結果を使い、 音声認識精度を実際に計測してみます。

音声認識精度の計算方法については下記の記事で説明しています。

amivoice-tech.hatenablog.com

音声認識精度を測ってみよう

音声認識精度を測るステップは下記の5つになります。

  1. 音声を用意する
  2. 音声を書き起こしして正解を作る
  3. 音声を音声認識してテキスト化する
  4. 音声認識結果の表記を揃える・表記ゆれを直す
  5. 音声認識精度を計算する(2と4の内容を比較する)

では、さっそくやってみましょう。

1. 音声を用意する

まずは、音声認識精度を計測する対象となる音声を用意します。 今回はこんな音声を用意してみました。

■今回用意した音声

  • 内容:コールセンターのクレーム音声(演技)
  • 形式:ステレオ(右チャネルにオペレータ側音声・左チャネルにカスタマ側音声)*1
  • 音声長:約43.5秒*2
  • サンプリングレート:16kHz
  • ビットレート:16bit

実際の音声ファイルはこちらです。

2. 音声を書き起こしして正解を作る

用意した音声を書き起こし*3します。書き起こしたものは下記となります。

ちなみに、今回の音声は演技なので原稿がありますが、通常は音声を耳で聞いて書き起こすことになります。

■人手により書き起こしした正解

オペレータ:お電話ありがとうございます。保険コールセンター田中でございます。
カスタマー:もしもし。
オペレータ:はい。
カスタマー:小林保険さん。
オペレータ:はい。小林保険でございます。
カスタマー:それでお宅はどこ。横浜。
オペレータ:こちらは東京本社のコールセンターに掛かっております。
カスタマー:あ、そうですか。
オペレータ:はい。
カスタマー:ちょっとお尋ねしますけどね。
オペレータ:はいどうぞ。
カスタマー:この前、あの、解約申し込んだんですよ。
オペレータ:はい。
カスタマー:もう3か月か4か月ぐらい前に。
オペレータ:はい。
カスタマー:それで、はい、わかりましたってね、あの、てっきりそのまま解約したのか、手続き進めてるのかな、それにしちゃ遅いなと思ってたんだけど。
オペレータ:はい。
カスタマー:それっきりまだ引かれてる訳。
オペレータ:申し訳ございません。
カスタマー:うん。そん時にね。
オペレータ:はい。
カスタマー:あれしたのが山口さんって言う人。
オペレータ:山口でございますね。

3. 音声認識してテキスト化する

音声認識を実行します。今回は、AmiVoice Cloud Platformの他に、比較としてGoogle Cloud Speech-to-Textでも音声認識をしてみました。

■AmiVoice Cloud Platformの設定:

  • 音声認識エンジンは「会話_汎用」を使用しました。
  • WebSocket版の音声認識(Wrp)を利用しました。
  • ステレオの音声ファイルを、左右チャネル別々にモノラルの2つの音声ファイルに変換し、それぞれ音声認識しました

Google Cloud Speech-to-Textの設定:

  • C#版クライアントライブラリ(Google.Cloud.Speech.V1 v2.1.0)で実施しました
  • 非同期音声認識で実施しました。
  • 認識モデルはdefault を使用しました。(phone-callの方がふさわしそうですが、2021年3月現在日本語非対応だったため)
  • ステレオの音声ファイルを、左右チャネル別々にモノラルの2つの音声ファイルに変換し、それぞれ音声認識しました

音声認識結果が下記です。*4

■AmiVoice Cloud Platformの結果

オペレータ:ありがとうございます。保険コールセンター田中でございます。
カスタマー:もしもし
オペレータ:はい。
カスタマー:小林保険さん。
オペレータ:はい、小林保険でございます。
カスタマー:それでお宅はどこ横浜
オペレータ:こちらは東京本社のコールセンターにかかっております。
カスタマー:そうですか。
オペレータ:はい。
カスタマー:ちょっとお尋ねしますけどね。
オペレータ:はいどうぞ。
カスタマー:この前解約申し込んだんですよ、
オペレータ:はい。
カスタマー:もう3ヶ月か4ヶ月ぐらい前に。
オペレータ:はい。
カスタマー:それではいわかりましたってね、あのてっきりそのまま解約したのか手続き進めてるのかなと、それにして遅いなと思ってたんだけど、
オペレータ:はい。
カスタマー:それっきりまだ引かれてるわけ。
オペレータ:申し訳ございません。
カスタマー:そんときにね、あれしたのが山口さんっていう人。
オペレータ:山口でございますね。
■Google Cloud Speech-to-Textの結果

オペレータ:ありがとうございます保険コールセンター田中でございます
カスタマー:もしもし
オペレータ:はい
カスタマー:小林保険さん
オペレータ:はい小林保険でございます
カスタマー:それでお宅はどこ横浜
オペレータ:こちらは東京本社のコールセンターにかかっております
カスタマー:あそうですか
オペレータ:はい
カスタマー:ちょっとお尋ねしますけどね
オペレータ:はいどうぞ
カスタマー:この前あの解約申し込んだんですよ
オペレータ:はい
カスタマー:もう3ヶ月か4ヶ月ぐらい前に
オペレータ:はい
カスタマー:それではいわかりましたってねあのてっきりそのまま解約したのか手続き進めてるのかなそれにして遅いなと思ってたんだけど
オペレータ:はい
カスタマー:それっきりまだ引かれてる理由
オペレータ:申し訳ございません
カスタマー:その時にねあれしたのが山口さんっていう人
オペレータ:山口でございますね

どちらも内容が正解文に近く、非常に高い精度で音声認識できていることが分かります。*5

4. 音声認識結果の表記を揃える・表記ゆれを直す

音声認識結果が完成したら、よく中身を確認してみましょう。 AmiVoiceとGoogle音声認識結果の特徴が若干異なることが分かります。

項目 AmiVoiceの結果の特徴 Googleの結果の特徴
句読点 自動的に挿入される 挿入されない
不要語(フィラー 除去される 除去されない

不要語(フィラー)というのは、「えーと」や「あのー」などの会話の隙間を埋めるための、意味を持たないフレーズです。

句読点の有無や不要語が削除されるかどうかは音声認識エンジンの機能であって、認識精度の良し悪しには直接的には影響しないものです。従って、音声認識精度を計算、特に比較したい場合は、こういった句読点や不要語をどう扱うかの条件をきちんと揃える必要があります。 ここでは下記とします。

  • 句読点:書き起こしからも音声認識結果からも除去して計算する
  • 不要語(フィラー):書き起こしからも音声認識結果からも除去して計算する

なお、AmiVoiceでは不要語(フィラー)を除去しないようにする設定も可能です。詳しくは下記のマニュアルをご覧ください。※「フィラー」で検索すると設定方法をご覧いただけます。マニュアル Archive - AmiVoice Cloud Platform

 

また、音声認識精度を計測するには「表記ゆれ」に対して考慮をする必要があります。 表記ゆれというのは「読みも意味も同じだが、表記が異なる単語・フレーズ」のことを指します。

具体的には例えば下記の箇所です。

  • 書き起こし:もう3か月か4か月ぐらい前に。
  • AmiVoice   :もう3ヶ月か4ヶ月ぐらい前に。
  • Google      :もう3ヶ月か4ヶ月ぐらい前に

書き起こしが「か月」になっているのに対して、AmiVoiceもGoogleも「ヶ月」と表記ゆれをしています。 このまま音声認識精度を計測すると、「か(ヶ)」の部分が誤りとして計算(減点)されてしまうので、こういった箇所を修正する必要があります。 ここでは、書き起こしの内容を「ヶ月」に修正すればいいでしょう。

他にもこういった箇所もあります。

  • 書き起こし:それっきりまだ引かれてる
  • AmiVoice   :それっきりまだ引かれてるわけ
  • Google      :それっきりまだ引かれてる理由

書き起こしが「訳」と漢字になっていますが、AmiVoiceは「わけ」とひらがなになっています。これは正解と見なしても問題ないと思われるので、書き起こしを「わけ」に修正することにします。

問題はGoogleで「わけ」を「理由」と音声認識するのを正しいと判断するか、誤りと判断するかを決める必要があります。「理由」を「わけ」と読むのはいわゆる当て字で、正しい読みではないのでここではそのまま誤認識として扱うこととします。

5. 音声認識精度を計算する(2と4の内容を比較する)

最後に認識精度を集計します。今回くらいの量なら頑張って手で数えてもいいのですが、通常認識精度を出す時は数千文字・数万文字になるので、アドバンスト・メディアには専用の計測ツールがあります*6。今回はそのツールを使って計測しました。

また、今回の計測では「文字」を最小単位として計算しました*7

AmiVoiceの音声認識精度は下記となりました。

  • 正解文字数:261文字
  • 挿入誤り :1文字
  • 削除誤り :6文字
  • 置換誤り :1文字
  • 音声認識精度 = (261-1-6-1)/261 ≒ 96.93%

Google音声認識精度は下記となりました。

  • 正解文字数:260文字
  • 挿入誤り :0文字
  • 削除誤り :6文字
  • 置換誤り :4文字
  • 音声認識精度 = (260-0-6-4)/260 ≒ 96.15%

正解文字数がAmiVoiceとGoogleで異なるのは、表記ゆれの修正の際に認識結果に合わせて正解文を別々に修正したためです。

AmiVoiceとGoogleの認識結果の比較

今回の音声ではAmiVoiceもGoogleもどちらも非常に高い音声認識精度が出ることが分かりました。

せっかくなので、どういった箇所を誤認識しているか見てみましょう。

  • 書き起こし:てっきりそのまま解約したのか手続き進めてるのかな
  • AmiVoice   :てっきりそのまま解約したのか手続き進めてるのかな
  • Google    :てっきりそのまま解約したのか手続き進めてるのかな

ここは、AmiVoiceだけ末尾に「と」を誤挿入しています。挿入誤り×1文字です。

  • 書き起こし:それにしちゃ遅いなと思ってたんだけど
  • AmiVoice   :それにし遅いなと思ってたんだけど
  • Google      :それにし遅いなと思ってたんだけど

書き起こしは「それにしちゃ」ですが、AmiVoiceもGoogleも「それにして」となっているので、どちらも削除誤り×1文字・置換誤り×1文字になります。

  • 書き起こし(AmiVoice):うんそんときにね
  • AmiVoice                     :そんときにね
  • 書き起こし(Google)    :うんそん時にね
  • Google                        :そ時にね

ここは少しややこしいのですが、「そんときにね」の「とき」をAmiVoiceは「とき」と音声認識して、Googleは「時」と音声認識しました。どちらも正解と見てよいと思いますので、それに合わせて書き起こしを別々に修正しました。 「うん」の部分はAmiVoiceもGoogleも認識できていなかったので削除誤り×2文字です。※AmiVoiceはフィラーとして除去したのかもしれません

またGoogleは「そん時」を「その時」と誤認識したので、置換誤り×1文字です。

  • 書き起こし:お電話ありがとうございます
  • AmiVoice   :ありがとうございます
  • Google      :ありがとうございます

ここはAmiVoiceもGoogleも「お電話」が認識できていないので、削除誤り×3文字です。そもそも音声ファイルの冒頭が少し途切れていたので、これは仕方ない誤認識かもしれません。

さいごに

以上、音声認識精度を計算する手順をおおまかに説明しました。

今回の音声では96%を超えるかなり高い音声認識精度が出ましたが、これは喋り方と音質が明瞭で、喋る内容も簡単だったことが理由と考えられます。実際に音声認識が使われるシーンではここまで高い認識精度が出ないことはよくありますので、その点はご注意ください。

音声認識精度の計測は奥が深くて、今回説明できなかった細かい点がまだまだたくさんありますので、また本ブログにて深堀りしていきたいと思います。

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

この記事を書いた人


  • 安藤章悟

    音声認識の研究をしていたら、近所に音声認識屋を見つけてしまい入社。今に至る。

    趣味は海外旅行と美味しいものを食べることとサウナ。

     

*1:電話機による通話を専用のデバイスで録音した音声のため、若干形式が特殊です。音声ファイルのサンプリングレートは16kHzですが、左チャネル(カスタマ)は電話回線を経由した音のためサンプリングレート8kHz相当の音質です。また、右チャネル(オペレータ)は受話器から録音装置に直結しているため音質が良く、サンプリングレート16kHz相当の音質で録音されています。

*2:本当はもっと長い音声なのですが、記事上長くなりすぎるので冒頭43.5秒までとしました。

*3:書き起こしとは音声を聞いて聞こえた言葉を文字に書き起こすことです。「聞き起こし」や「文字起こし」あるいは「テープ起こし」などと呼ぶ場合もあります。アドバンスト・メディアでは慣例として「書き起こし」と呼ぶことが多いです。

*4:右チャネル(オペレータ側)と左チャネル(カスタマ側)それぞれの音声認識結果を、読みやすいように喋ったタイミングに合わせて整形しています。

*5:2020年12月2日に実行した結果です。AmiVoiceは(おそらくGoogleも)日々改善しているので、常に同一の結果にはならない可能性があることをご了承ください。

*6:ツールの公開は難しいのですが、今後ツールの内部処理の解説や、音声認識精度算出用ページやAPIなどの提供を検討したいです。

*7:文字を最小単位とする音声認識精度をアドバンスト・メディアでは「文字認識精度」と呼んでいます。文字認識精度では例えば「承る」は2文字として計算します。他にも読み仮名を単位として「うけたまわる」で6文字として計算するケースや、単語を単位として「承る」を1単語として計算する場合などもあります。