言語モデル作成のツールとして,大変お世話になっている「Palmkit」である. (使用方法等,詳細に関しては,伊藤彰則先生のHPで公開されている)
windows上でのインストールは,MinGWでは色々と足りないものがあるので,四苦八苦することになると思う.やるならCygwinとかの方がいいと思われる.
与えるコーパスは,後のことを考えて,EUCで作成したものを用いるのが良い.
text2wfreq hoge.text > hoge.wfreq
語彙の頻度を算出する.出来たファイルは単語頻度リストである.
与えるファイルは,分かち書きしてあるデータであればよく,形態素解析済みのものでも問題ない.
wfreq2vocab -gt 10 hoge.wfreq > hoge.vocab
N-gramで用いる単語リストを作成する.オプションが色々あり,
・-top num 上位num個の単語
・-gt num 出現回数num数以上の単語
である.
text2idngram -n 2 -vocab hoge.vocab hoge.text id2gram
コーパスと語彙リストから,2-gramを作成する.
idngram2lm -n 2 -idngram id2gram -vocab hoge.vocab -arpa 2.arpa.gz
バックオフをかけて,arpa形式の2-gramの言語モデルを作成する.
text2idngram -n 3 -vocab hoge.vocab hoge.text id3gram
コーパスと語彙リストから,3-gramを作成する.
reverseidngram -n 3 id3gram rid3gram
逆向き3-gramを作成する.
idngram2lm -n 3 -idngram rid3gram -vocab hoge.vocab -arpa r3.arpa.gz
バックオフをかけて,arpa形式の2-gramの言語モデルを作成する.
形態素解析の整形器“真茶”を作成した.perlとrubyで実装.
何故,そんなものが必要なのかについて補足する.
形態素解析を行う際,話し言葉と書き言葉を意識する必要がある.
この整形処理をしっかりしておくと,認識精度が良くなるだけでなく,
雑音のあるような環境で動かした場合であっても,頑健にしっかり認識してくれやすくなる.
ちなみに,chasenは書き言葉の解析を行う(どこかで読んだ気がする・・・).
いずれにせよ,解析誤り処理や読みの再付与など,話し言葉風に解析結果を整形する必要がある.
・解析誤り箇所の訂正(解る範囲でする,辞書をいじると解決したりもする)
・読み無しの単語の除外(記号や未知語など)
・フィラーの類(色々種類があるのでまとめてみたり追加したりとかする)
・読みの再付与(話し言葉風な読みを再付与:ここが重要)
・数字の類(表記をまとめたり,読みの再付与・統一)
・類似単語の類
上に書いたようなことを“真茶”では行っている.
こうして整形された音声対話用話し言葉コーパスを,Palmkitに投げるわけである.
Palmkitで作成された言語モデルをjuliusで読み込む際に高速にするために,
2-gramと後向き3-gramを一つのファイルに統合する.
mkbingram -nlr 2.arpa.gz -nrl r3.arpa.gz hoge_bingram
このプログラムはjuliusに付属されている.
音声認識を行うためには,発音辞書が必要である.
perlやrubyで実装してある.
./vocab2htkdic.rb < hoge.vocab > hoge_dic
rubyバージョンの入手先は今はないが,要は読みをローマ字に変換するスクリプトである.
有り難いことに,perlバージョンが,ITtextの“音声認識システム”に付属のCDに入っている.