======================================================================

                  認識システムの起動と動作 (Julian Windows版)

						      v3.0 2004/11/02
							      李 晃伸
						       ri@is.naist.jp
======================================================================

■１．とりあえずファイルを認識させてみる ////////////////////////////////

サンプルの音声ファイルが sample.wav に含まれています．
とりあえず．この音声ファイルを認識してみましょう．

まず，Windows上でコマンドプロンプトを開き，
このファイルが置いてあるフォルダに cd で移動します．

Julianは以下の要領で起動できます．
"testfile.jconf" はJulianの動作を指定した設定ファイルです．

  ----------------------------------------------------------
  $ bin\julian.exe -C testfile.jconf
  ----------------------------------------------------------

起動後，以下のようなプロンプトが出てきます．

  ----------------------------------------------------------
  enter filename->
  ----------------------------------------------------------

ここで "sample.wav" と打ち込み enter を押してください．
ファイルの内容は，「りんごを3個ください」という発声です．
ファイル名を入力すると認識が実行され，以下のような結果が出てくるはずです．

  ----------------------------------------------------------
  input speechfile: sample.wav
  33984 samples (2.12 sec.)
  ### speech analysis (waveform -> MFCC)
  length: 210 frames (2.10 sec.)
  attach MFCC_E_D_Z->MFCC_E_N_D_Z
  ### Recognition: 1st pass (LR beam with word-pair grammar)
  ..........................................................
  ..........................................................

  pass1_best: <s> リンゴ を 3 個 ください </s>
  pass1_best_wordseq: 7 0 3 1 2 4 8
  pass1_best_phonemeseq: silB | r i N g o | o | s a N | k o |
  k u d a s a i | silE
  pass1_best_score: -5130.354980 

  ### Recognition: 2nd pass (RL heuristic best-first with DFA)
  samplenum=210
  sentence1: <s> リンゴ を 3 個 ください </s> 
  wseq1: 7 0 3 1 2 4 8
  phseq1: silB | r i N g o | o | s a N | k o | k u d a s a i | silE
  cmscore1: 1.000 1.000 0.750 1.000 0.683 1.000 1.000
  score1: -5109.962891
  25 generated, 25 pushed, 8 nodes popped in 210
  ----------------------------------------------------------

結果の中で，sentence1 から始まる行が，最終的な認識結果の単語列です．
正しく認識されましたか？

認識終了後，再びプロンプトが出るので，ここでは CTRL+C を押して終了します．

認識結果には音素列 (phseq1) など様々な情報が出力されます．
出力を少なくしたい場合は，起動コマンドの最後に "-quiet" をつけてみてください．
以下は実行例です．同様に，sentence1 で始まる行が最終結果です．

  ---------------------------------------------------------
  $ bin\julian.exe -C test.jconf -quiet
  ・・・（中略）・・・
  enter filename->sample.wav

  input speechfile: sample.wav
  33984 samples (2.12 sec.)

  pass1_best: <s> リンゴ を 3 個 ください </s>
  pass1_best_score: -5130.354980

  sentence1: <s> リンゴ を 3 個 ください </s>
  ---------------------------------------------------------



■２．マイク入力で認識してみる //////////////////////////////////////////

次に，マイク入力を認識させてみましょう．
認識をはじめる前に，入力デバイスのセットアップをしておく必要が
あります．アクセサリから「ボリュームコントロール」を開き，
録音について以下を設定してください．

  ・入力の選択：音声入力に用いるデバイス(MIC/LINEなど)を指定
  ・録音ボリュームの調節

録音ボリュームの調節は注意を払う必要があります．
小さすぎると発声開始を正しく検出できませんし，逆に大きすぎると音割れを
起こして認識しづらくなります．音が割れない程度に大きくしてください．
「サウンドレコーダー」で一度録音できるかどうか試してみるとよいでしょう．

準備ができたら，Julian を起動しましょう．
今度は設定ファイルとして "testmic.jconf" を指定します．

  ----------------------------------------------------------
  $ bin\julian.exe -C testmic.jconf
  ----------------------------------------------------------

起動が終了したら，マイクに向かって喋ってみましょう．
ここでは「果物購入タスク」の文法で起動していますので，
「りんごを３個ください」や「蜜柑５個です」，
「ぶどう2個にしてください」といった発話が受理可能です．
受理不可能な文を喋った場合には，受理可能な文のうち最も近いものが出力さ
れます．いろいろと試してみましょう．

  +-----------------------------------------------------------------+
  |			        ！注意！			    |
  |								    |
  | 最初の1文は＊必ず＊うまく認識できません．			    |
  | これは認識プログラムが直前の1入力で音響環境の調節を行う         |
  | ためです．起動して最初の1文は，この調節が効かないためおかし     |
  | くなります．                                                    |
  | 2文目から以降は，正しく動作します．				    |
  +-----------------------------------------------------------------+
	

うまく認識させるコツは，いかのように喋ることです．

          o  マイクをあまり口に近づけないように
          o  大きく口を開けて一語一語はっきりと
          o  ゆったりしたペースで

うまく動かない・認識できないときは，TROUBLE.txt をご覧下さい．
また，Juliusのホームページに掲示板がありますので，
そちらも助けになるかもしれません．



■３．設定ファイルの見方 //////////////////////////////////////////////

一通り動作したら，設定ファイルを見て動作の指定方法を見てみましょう．
testfile.jconf をメモ帳などで開いてみましょう．
内容は以下のようになっています．

  ----------------------------------------------------------
  -dfa SampleGrammars/fruit/fruit.dfa
  -v SampleGrammars/fruit/fruit.dict
  -C hmm_ptm.jconf
  -input rawfile
  ----------------------------------------------------------

"-dfa" と "-v" は，文法ファイルの指定です．それぞれ .dfa ファイル と
.dict ファイルを指定します．これについては後述します．
"-C" は，他の設定ファイルの読み込みです．ここでは，同じディレクトリに
ある hmm_ptm.jconf を読み込むようになっています．
"-input rawfile" は音声ファイル入力を指します．

testmic.jconf のほうは以下のようになっています．
testfile.jconf と異なるのは最後の1行のみです．
入力としてマイク入力を使用(-input mic)し，さらに
出力の抑制と漸次的出力(-demo)を指定しています．

  ----------------------------------------------------------
  -dfa SampleGrammars/fruit/fruit.dfa
  -v SampleGrammars/fruit/fruit.dict
  -C hmm_ptm.jconf
  -input mic -demo
  ----------------------------------------------------------

hmm_ptm.jconf では，音響モデルの指定を行っています．
Julianを用いた音声認識では，最低限
	・文法ファイル
	・音響モデル（日本語の音素ごとの波形パターンをモデル化したもの）
の２つが必要です．
testmic.jconf, testfile.jconf では文法ファイルと入力の指定のみ行ってお
り，音響モデルの指定は hmm_ptm.jconf 内で別途定義しています．

hmm_ptm.jconf にはその他の設定パラメータが全て入っています．
コメント合うとされているものは全てデフォルトの値です．
設定項目の詳細については，doc/ 以下にある Julius/Julian のドキュメント
をご覧ください．



■４．サンプル文法ファイル ////////////////////////////////////////////

Julianでは，認識すべき文のパターンをあらかじめ「認識用文法」として
記述しておきます．これによって，認識システムごとにユーザが任意に語彙や
文パターンを指定することができます．

サンプルの認識用文法が３つ，ディレクトリ "SampleGrammars" 以下に置いて
あります．それぞれ以下のような文法です．
なお，上記の動作テストで用いたのは fruit です．

  fruit/	果物購入タスク（20単語）
		「リンゴをください」「ぶどう 9 個 です」など．

  railroad/	切符購入タスク（88単語）
		「○○駅から○○駅まで」「えーと○○駅まで」など
		駅名は全国の新幹線の駅名

  vfr/		服装着せかえタスク（99単語）
		「上着を白にしてください」
		「シャツとスーツを統一してください」など

それぞれどのような文を受理する文法であるかは，
付属のツール "generate" を用いてある程度知ることができます．
これは文法で表される文パターンをランダムに出力するツールです．

  ----------------------------------------------------------
  $ bin\generate.exe 文法ファイル(.dfa, .dict)の共通 prefix
  ----------------------------------------------------------

「共通prefix」は，例えば fruit.dfa と fruit.dict があるとき，"fruit"
と指定します．以下は実行例です．
（文例はランダムですので，ご自分で実行されたのと下記の結果が
  同じになるとは限りません）

  ----------------------------------------------------------
  $ bin\generate.exe SampleGrammars\fruit\fruit
  Reading in dictionary...
  20 words...done
  Reading in DFA grammar...done
  Mapping dict item <-> DFA terminal (category)...done
  Reading in term file (optional)...done
  9 categories, 20 words
  DFA has 9 nodes and 15 arcs
  ----- 
   <s> リンゴ です </s>
   <s> 蜜柑 を ください </s>
   <s> ぶどう を 5 個 です </s>
   <s> ぶどう 2 個 ください </s>
   <s> 蜜柑 です </s>
   <s> 蜜柑 ください </s>
   <s> リンゴ 0 個 です </s>
   <s> ぶどう です </s>
   <s> ぶどう 2 個 です </s>
   <s> ぶどう 5 個 です </s>
  ----------------------------------------------------------

認識に用いるには，Julian の設定ファイルで使用する文法の .dfa ファイル
を "-dfa" で，.dictファイルを "-v" でそれぞれ指定します．試しに，
testmic.jconf をコピーして編集し，「切符購入タスク」の認識を行ってみま
しょう．

  ----------------------------------------------------------
  % copy testmic.jconf railroad.jconf
  % railroad.jconf をメモ帳で編集：以下の部分を編集して保存
        -dfa SampleGrammars/fruit/fruit.dfa
        -v   SampleGrammars/fruit/fruit.dict
			↓
        -dfa SampleGrammars/railroad/railroad.dfa
        -v   SampleGrammars/railroad/railroad.dict
  % bin\julian.exe -C railroad.jconf
  ----------------------------------------------------------
「東京から浜松まで」といった発話が認識できるはずです．
逆に，さきほどまで認識していた「りんご３個ください」などの発話は
認識されないはずです．試してみましょう．

このように，音声認識できる文章は使用する文法によって大きく変わります．
Julianを含む文法ベースの音声認識器は，指定された文パターンのみから
認識結果を出力します．もしユーザが発話した文章が文法に記述されていなけ
れば，それは完全に認識誤りとなってしまいます．文法ベースの音声認識シス
テムを構築する際には，そのシステムにおいて認識したい発話を考え，それら
がカバーされるようにルールを記述する必要があります．


■５．文法の作成について /////////////////////////////////////////////

音声認識システムを自ら構築する場合，
そのシステムにおいて発話されるであろうユーザの発話パターンを記述した
認識用文法を書く必要があります．

認識用文法は，構文規則を .grammar ファイルに，語彙辞書を .voca ファイ
ルに記述します．その後，それらを付属のコンパイラ "mkdfa.pl" を使って
Julian 用の決定性有限オートマトン(DFA)ファイル .dfa および認識辞書ファ
イル .dict に変換します．

ファイルの書式および変換の手順については，Juliusのホームページ上にある
「認識用文法の書き方」のページをごらんください．


======================================================================
								以上
