初歩的な音声認識エンジンを作っています。言語モデルの辞書についてうまく考えがまとまらないので、相談させてください。

お尋ねしたいのは音響モデルの発音や言語モデルに使う単語の粒度です。

「たかくらけん」と喋ってみたところ「高倉 建」になりましたが、有名俳優の「高倉健」と聞き取って欲しいと思っています。

形態素解析器にmecab, 辞書にmecab-ipadic-NEologd + ipadicを使っています。neologdは単語数が多く、映画の名前とかゲームの中の登場人物の名前などもエントリに入っている点が素晴らしいと思います。「魔王はベギラゴンを唱えた」のような入力も正しく分割してくれます。

上記の高倉健は、

  • ipadic : 高倉, 健 (2語)
  • neologd: 高倉健 (1語)

です。

ここで疑問なのですが、n-gramモデルを使って、色々なデータソースから言語モデルを作ると、高倉健は有名人ですので2語に分かれていたとしても出現頻度が高くなるので問題ないような気もします。つまり単語辞書に「高倉健」がある必要はなく「高倉」と「健」さえあれば、確率的言語モデルによって高倉健は正しく認識されるのではないかという予感がします(高倉建や高倉県よりも高倉健のほうが出現頻度が高い)。

neologdの辞書をベースに単語辞書を作るとサイズが大きくなります。あまり考えずに作ったところ200MBを超えました。ipadicで作ったときは10MB程度だったと思うので20倍に膨らんだ計算です。

neologdでは「十二月二十五日」も1つの単語になっています(日付だけで366語ある)。1ドル, 2ドル .... 10000ドルなど数詞も辞書に登録されています。これはかえって言語モデルを作るのにマイナスのようにも思えてきました。neologdを使った場合は「形態素」解析ではなくなっています。

一方で「恋がヘタでも生きてます」というドラマの場合は「生きています」と認識されると困るし「ヘタ」は「下手」でも困ります。これはneologd由来の辞書が威力を発揮するケースです。

ということを自分で考えていたのですが、よい方策が思いつきませんでした。neologdのエントリは自動的に作られた節があり、品詞が正しく設定されていないことがあります。つまり、品詞を手がかりに辞書に組み込む、組み込まないを分類することもできません(人名は含めない、日付は含めない、作品名は含める等)。

私は音声認識の分野は素人です。この分野で学位を持っているわけでもないし、辞書づくり専門のアシスタントがいる大学などの研究機関や学会に所属しているわけでもありません。ですから膨大な単語を自分の手で仕分けすることはできそうにありません。

漠然とした質問ですが、音声認識の統計的言語モデル(n-gramモデル)の辞書作りの指針や経験談のようなものを教えていただければ幸いです。根拠のない勘による予想ですが、あまり辞書が充実しすぎると、本来は2-gramや3-gramで表せばいいものも1-gramになってしまい認識精度が落ちるのではないかと思っています。一方で少なすぎてもいい結果は得られないでしょう。