目次

Julius progout

http://julius.sourceforge.jp/juliusbook/ja/desc_module.html

progoutの使い方

Julius (Julian) の第一パス候補を逐次出力する方法について。

Windows XP での実行例

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

progout の実装

本項は 4.1.5 のソースコードに基づいている。

CALLBACK_RESULT_PASS1_INTERIM というIDでコールバック関数を登録する。

ライブラリ版では outcode オプションは無効だが progout と proginterval は有効。

オプションの与え方とチェック

出力に使われるユーティリティ関数