音声認識を最適化してみる
・騒がしい場所ではなかなかうまく音声認識されないものです。人間にとってさほど騒がし感じない場所でも、天井に空調の吹き出し口があったりすると、意外に機械は敏感で、音声認識の障害になってしまったりします。
・ここでは音声認識の精度を向上させるための方法をいくつかご紹介します。
julius設定ファイルの編集
・エディターでjuliusの設定ファイル「julius.jconf」を編集してみましょう。
# Julius 設定ファイル:音声キーワード認識版
-v /home/pi/dictation-kit-v4.4/model/lang_m/bccwj.60k.htkdic #単語辞書ファイル
-h /home/pi/dictation-kit-v4.4/model/phone_m/jnas-tri-3k16-gid.binhmm #音響HMM定義ファイル
-hlist /home/pi/dictation-kit-v4.4/model/phone_m/logicalTri #HMMListファイル
-n 1 #n個の文仮説数が見つかるまで検索を行う
-output 1 #見つかったN-best候補のうち、結果として出力する個数
-input mic #マイクからの直接入力
-input oss #オープンサウンドシステム使用
-charconv euc-jp utf8 #出力文字コードの変換(内部euc-jp, 出力utf-8)
-rejectshort 600 #検出された入力の時間(msec)が閾値以下なら棄却
-lv 1500 #入力の振幅レベルのしきい値(0から32767の範囲。デフォルトは2000)
# -zmean
・空調音など一定の音がし続けている場所で音声認識が上手くいかない場合は、最後の行の行頭の「#」を取ってみてください。鳴り続けている音の無効化(垂直成分の除去)を行います。
・物音などにいちいち反応してしまって困っているなら、「rejectshort」の値を長めにすると、短い音は無視されるようになります。
・小さな音にいちいち反応してほしくないなら、「lv」の値を大きくしてみると、改善するかもしれません。
・他にも調整パラメータはたくさんあります。julius公式のリファレンスマニュアルには詳しい説明が書かれています。
マイクの変更
・べゼリーに付属しているUSBマイクは非常にコンパクトなものですが、より集音性のよいUSBマイクに変えることで、音声認識の精度も向上するかもしれません。

対話データを直接編集してみる
・ブラウザを使わず、テキストエディターで対話データ編集してみましょう。 ・まずは辞書ファイルの元となるcvsファイル(chatEntity.cvs)をテキストエディターで開きます。
$ cd
$ cd bezelie
$ sudo nano chatEntity.cvs
・以下のようなリストが表示されたと思います。(長いので一部分だけ引用します)
おはよう おはよう
こんにちは こんにちは
こんばんは こんばんは
おやすみ おやすみ
おはようございます おはようございます
おやすみなさい おやすみなさい
今何時 いまなんじ
ベゼリー べぜりー
・ユーザーの意図(インテント)とその言い回し(ひらがな)がTABで区切って羅列されています。 ・TABの代わりにスペースが入っていたり、最終行に空行が入っていたりすると、エラーになってしまうので注意してください。 ・認識させたい意図以外の言葉も、ある程度登録しておいたほうが認識精度が上がります。 ・編集を終え、セーブしたら、これを変換して辞書ファイルを更新しましょう。変換のためのプログラムを用意しました。
$ cd edgar
$ tool_juliusDic.sh
・これでchatEntity.cvsを元に辞書ファイルchatEntity.dicが更新されたはずです。 ・サンプルプログラムを実行し、自分なりの辞書が反映されたかどうか確認してみましょう。 ・次に、自分なりに会話内容を追加・修正してみましょう。まず返答リストをテキストエディターで開きます。
$ cd ..
$ sudo nano chatDialog.cvs
・以下のようなリストが表示されたと思います(長いので一部分だけ引用します)。
こんにちは,こんにちはです
こんにちは,どうもです
こんにちは,はーい
こんばんは,こんばんはです
おやすみ,おやすみなさい
おはようございます,おはようです
おやすみなさい,おやすみです
今何時,えーと、だいたいねー
ベゼリー,はいはーい
ベゼリー,なんですか?
ベゼリー,どうもです
不一致,わかんない
不一致,知らない言葉なの
不一致,うーん
不一致,わからないです
不一致,知らないです
・カンマで区切られたCSV形式のリストです。第1項目がユーザの意図(インテント)で、第2項目がベゼリーからの返答候補です。 ・意図はchatEntity.cvs内で定義していないと無効です。 ・同じ意図に対して複数の返答を用意しておくことができます。どの返答が選ばれるかはランダムで決まります。 ・意図「不一致」は、該当するキーワードが無かった場合に選ばれます。 ・このファイルを編集して保存したら、またサンプルプログラムを実行してみてください。
応用
・音声認識の精度を上げたい場合は、chatEntity.cvsに多数の言い回しを登録したり、実際には使用しないキーワードを登録しておくことが簡単かつ有効です。 ・さらに高みを目指したいかたはJuliusのドキュメントを読んでみてください。(The Julius Book)
tips
・Juliusの発音には諸説あるそうですが、開発チームでは「ジュリアス」と発音しているそうです。(The Julius book)