Watson STT(Speech to Text)におけるCustom Modelについて


音声認識ド素人のため、Watson STTのリファレンスだけ読んでも、"Custom XXX Model"がなんなのかさーっぱり分からなかったので、自分用メモがてらまとめておく。

※注意※
原文載せても意味ないので、自分なりの解釈をして載せています。
誤った捉え方をしていて、不適切な記載をしている可能性がありますので、
予めご了承ください。
(精通されている方で、お気づきのことがあればコメントにてご指摘いただけますと幸いです。)

目次

  1. 音声認識における「音響モデル」と「言語モデル」
  2. STTにおける「音響モデル」のカスタマイズ
  3. STTにおける「言語モデル」のカスタマイズ
  4. まとめ

音声認識における「音響モデル」と「言語モデル」

音声認識の手法

一言で音声認識と言っても、その手法は様々。
昨今主流となっているのが「統計的手法」で、入力された音声の特徴を抽出し、蓄積されたデータから抽出された特徴と比較して、最も近いものを認識結果とするもの。

音響モデル

音響的特徴を定義したもの。それぞれの音素がどういう周波数を持っているのか、という特徴を定義することで、入力データから抽出された特徴と照合し、音素を特定する。

言語モデル

音素の並びから単語や文章を定義したもの。音素の並びや、文脈的特徴などから、単語や文章を定義することで、音素を文章に変換する。

音声認識のフロー

音声認識は以下のプロセスを踏み、音⇒テキストへの変換を実現している。

# プロセス 説明
1 音響処理 デジタル化された音声信号から「音響」として認識可能なデータへ変換する。ノイズや周波数の歪みを調整することも。
2 音響モデルの適用 入力されたデータの周波数から近い音響モデルを適用し、「音素」を特定する。音声を全て平仮名で文字列表記できるところまで特定するイメージ。
3 言語モデルの適用 特定された「音素」を意味のある「言語」にしていく。音素の並びに対して言語モデルを適用し単語、文章にする。平仮名⇒漢字を交えた文章にしていくイメージ。

音響モデル・言語モデルの考察

音響モデルは「方言」の適用なんかで重要になってくるかと思う。
私の出身地でもある茨城では、「か⇒が」などのように濁音化して発音されることが多い。

ここの先は危ないよ

例えば上記のような文章を方言の強いうちのばあちゃんが読んだ場合、
茨城モデルが適用されていないと、、、

午後の詐欺は危ないよ

などと認識されてしまう。
(極端ではあるが)

一方で言語モデルは割とイメージしやすく、例えば専門用語なんかは
言語モデルとして登録していないと正しく認識されないだろう。

一般的に教師データが多いほどAIの認識・分析精度が高くなる、と言うのは、この音響モデルと言語モデルがより高度でかつ対象とする領域に近いモデルに改善するためだろう。

STTにおける「音響モデル」のカスタマイズ

ちょっとこっちまで手を出している余裕が今ないため、
いったん塩に漬ける。

STTにおける「言語モデル」のカスタマイズ

STTにおいて、言語モデルをカスタマイズするには、Custom Language Modelを登録し、
それをWatsonに学習させることで精度が変化してくるそう。
何も登録しなくても、デフォルトで「ベースモデル」が登録されているので、それっぽい音声認識はできるが、例えば業界特有の会話や専門用語などは個別にモデルを作成しWatsonに勉強してもらう必要がある。

Custom Language Modelの登録

まずは、新たなモデルを登録する。
この時点では空っぽのモデルだが、これに後述するコーパスなりワードなりを登録していくことでWatsonの学習するモデルとして仕立てていく。

コーパスの登録

作成したモデルに対して「コーパス」を登録する。
コーパスとはWatsonが学習する際に使う「読み物」というイメージ。専門分野の論文や本、またはニュース記事など、プレーンテキストファイルの形式でコーパスとして登録していく。
これにより、Watsonが与えられた文章を分析し、個々の単語が使われている文脈・前後関係を学習する。
音声認識の精度を上げるためには、このコーパスをできるだけたくさん登録してWatsonに学習させてあげる必要があるそう。(後述するワードよりもこっちの方が影響度はでかいらしい)
辞書よりもたくさん本を読ませたほうが、頭がよくなるようだ。

ワードの登録

こちらも作成したモデルに対して、個々の単語を登録する。
コーパスとは違い、個々の単語をJSON形式のデータとして定義してモデルに登録する。専門用語などWatsonが言語として知らない単語は、ワードとして登録しないといけない。

モデルの学習

モデルを作成しただけでは、まだ教材を作成しただけに過ぎないため、この教材を使ってWatsonに学習してもらう必要があるのでお忘れなく。
この際に、モデルの重みを設定でき、このモデルをどれだけ影響させることができるか調節出来るらしい。「ここテストにでるぞー」と言ってからプリント配るのと、「時間ある時にさらっと読んでおけー」とプリントを配るのとの違いみたい。

まとめ

STTで操作できるパラメータ(モデル)を調べることで、音声認識の一般的な流れと、モデルについて知ることができ、STTのパラメータの意味も理解することができた。
まずは言語モデルをカスタマイズしてみて、認識精度がどう変わっていくか試してみようと思う。

参考

https://ja.wikipedia.org/wiki/%E9%9F%B3%E5%A3%B0%E8%AA%8D%E8%AD%98#%E8%AA%8D%E8%AD%98%E6%8A%80%E8%A1%93
http://www.i.ci.ritsumei.ac.jp/~shirai/media-up2.pdf
https://www.ibm.com/watson/developercloud/speech-to-text/api/v1/node.html?node
https://console.bluemix.net/docs/services/speech-to-text/language-resource.html

最初のWikipediaの記事は分かりやすかったです。