Julius (Julian) の第一パス候補を逐次出力する方法について。
Julian rev.3.5.2-galatea (fast) Engine configuration: - Base setup : fast - Tunings : DFA, NoThreaded - Compiled by: gcc -O6 -fomit-frame-pointer
モジュールモード(ソケットサーバ)で動かす。
[server.jconf]
-dfa grammar/lunch.dfa # 文法モデル lunch.* が用意されているものとする -v grammar/lunch.dict # 文法モデル -C hmm_ptm.jconf # 音響モデル hmm_ptm.jconf で定義済みとする -input mic # マイク入力 -module 10500 # モジュールモードでポート番号を指定(省略時は10500) -progout # 第1パスで解析途中から漸次的に結果を出力 -proginterval 50 # -progout 時の出力のインターバル(単位:msec) -outcode WLPSCwlps # デフォルトでは第1パス情報 (wlps) は出力されない
認識サーバの実行
julian.exe -C server.jconf
別のコマンドプロンプトでクライアントの実行。ここではtelnetで。
telnet localhost 10500
改行文字の違いで画面が乱れるが、下記のような情報が得られる。
<RECOGOUT> <PHYPO PASS="1" SCORE="-425.201385" FRAME="14" TIME="1270190836"> <WHYPO WORD="<s>" CLASSID="1" PHONE="silB"/> </PHYPO> </RECOGOUT> . <RECOGOUT> <PHYPO PASS="1" SCORE="-574.381653" FRAME="19" TIME="1270190836"> <WHYPO WORD="<s>" CLASSID="1" PHONE="silB"/> </PHYPO> </RECOGOUT> . <RECOGOUT> <PHYPO PASS="1" SCORE="-1000000.000000" FRAME="24" TIME="1270190836"> </PHYPO> </RECOGOUT> . <RECOGOUT> <PHYPO PASS="1" SCORE="-887.485352" FRAME="29" TIME="1270190836"> <WHYPO WORD="<s>" CLASSID="1" PHONE="silB"/> <WHYPO WORD="丼" CLASSID="0" PHONE="d o N"/> </PHYPO> </RECOGOUT> . <RECOGOUT> <PHYPO PASS="1" SCORE="-1013.955688" FRAME="34" TIME="1270190836"> <WHYPO WORD="<s>" CLASSID="1" PHONE="silB"/> <WHYPO WORD="丼" CLASSID="0" PHONE="d o N"/> </PHYPO> </RECOGOUT> . (中略) . <RECOGOUT> <PHYPO PASS="1" SCORE="-2215.407959" FRAME="74" TIME="1270190836"> <WHYPO WORD="<s>" CLASSID="1" PHONE="silB"/> <WHYPO WORD="串カツ" CLASSID="0" PHONE="k u sh i k a ts u"/> </PHYPO> </RECOGOUT> . (中略) . <RECOGOUT> <SHYPO PASS="1" SCORE="-3520.302490"> <WHYPO WORD="<s>" CLASSID="1" PHONE="silB"/> <WHYPO WORD="串カツ" CLASSID="0" PHONE="k u sh i k a ts u"/> <WHYPO WORD="</s>" CLASSID="2" PHONE="silE"/> </SHYPO> </RECOGOUT> . <INPUT STATUS="ENDREC" TIME="1270190837"/> . <INPUTPARAM FRAMES="126" MSEC="1260"/> . <RECOGOUT> <SHYPO RANK="1" SCORE="-3520.307373" GRAM="0"> <WHYPO WORD="<s>" CLASSID="1" PHONE="silB" CM="1.000"/> <WHYPO WORD="串カツ" CLASSID="0" PHONE="k u sh i k a ts u" CM="0.415"/> <WHYPO WORD="</s>" CLASSID="2" PHONE="silE" CM="1.000"/> </SHYPO> </RECOGOUT> . <INPUT STATUS="LISTEN" TIME="1270190837"/> .
Julius 4 系だと <PHYPO の開始要素が /> で閉じてしまい XML パーザに怒られる。4.1.5 で状況を確認。
勝手に直してみた http://github.com/nishimotz/julius/commit/9b3d7558b5ef7c7a496bdda36123f9bbe656f524
本項は 4.1.5 のソースコードに基づいている。
CALLBACK_RESULT_PASS1_INTERIM というIDでコールバック関数を登録する。
ライブラリ版では outcode オプションは無効だが progout と proginterval は有効。
オプションの与え方とチェック
出力に使われるユーティリティ関数