6.8.1 JuliusMFT

6.8.1.1 概要

JuliusMFT は,大語彙音声認識システム Julius を HARK 用に改造を行った 音声認識モジュールである.HARK 0.1.x 系では,大語彙音声認識システ ムJulius 3.5 をもとに改良されたマルチバンド版 Julius1 に対するパッチ として,提供していたが,HARK 1.0 では,Julius 4.1 系をベースに実装およ び機能を大きく見直した.HARK 1.0 の JuliusMFT では,オリジナルのJulius と比較して,下記の4点に対応するための変更を行っている.

実装に関しては,Julius 4.0 から導入されたプラグイン機能を用いて極 力 Julius 本体に変更を加えない形で,実装を行った,

インストール方法,使用方法を説明するとともに,Julius との違 い,FlowDesigner 上の HARK モジュールとの接続について,解説する.

6.8.1.2 起動と設定

JuliusMFT の実行は,例えば設定ファイル名を julius.conf とすれば,以下のように行う.

      > julius_mft -C julius.jconf
      > julius_mft.exe -C julius.jconf (Windows版)
      

HARK では,JuliusMFT を起動したのち,IPアドレスやポート番号が正しく設 定された SpeechRecognitionClient (または SpeechRecognitionSMNClient ) を含んだネットワークを起動することにより,JuliusMFT とのソケット接続 が行われ,音声認識が可能な状態となる.

上述の julius.jconf は JuliusMFT の設定を記述したテキストファイルで ある.設定ファイルの中身は,基本的に “-” で始まる引数オプションからなっ ており,起動時に直接,julius のオプションとして引数指定することも可能で ある.また,# 以降はコメントとして扱われる.Julius で用いるオプション は,
http://julius.sourceforge.jp/juliusbook/ja/desc_option.html にまと められているので,そちらを参照していただきたいが,最低限必要な設定は, 以下の7種類である.

なお,後述のモジュールモードで利用する際には,オリジナル Julius と同様に -module オプションを指定する必要がある.

6.8.1.3 詳細説明

6.8.1.3.1 mfcnet通信仕様

 

mfcnet を音声入力ソースとして利用するには,上述のように,JuliusMFT 起 動時に “-input mfcnet” を引数として指定する.この 際,JuliusMFT は TCP/IP 通信サーバとなり,特徴量を受信する.ま た,HARK のモジュールであ る SpeechRecognitionClient や,SpeechRecognitionSMNClient は,音響特 徴量とミッシングフィーチャーマスクを JuliusMFT に送出するためのクライア ントして動作する. クライアントは,1発話ごとに JuliusMFT に接続し,送信終了後 ただちに接続を切断する.送信されるデータはリトルエンディアンである必要 がある(ネットワークバイトオーダーでないことに注意).具体的には,1発話に 対して以下の流れで通信を行う.

  1. ソケット接続

    ソケットを開き,JuliusMFT に接続.

  2. 通信初期化(最初に1回だけ送信するデータ)

    クライアントから,ソケット接続直後に1回だけ, 表 6.84に示すこれから送信する音源に関する情報を送信す る.音源情報は SourceInfo 構造体(表 6.85)で表され,音 源ID,音源方向,送信を開始した時刻を持つ.時刻は,$<$sys/time.h$>$ で定義 されている timeval 構造体で表し,システムのタイムゾーンにおける紀元 (1970年1月1日00:00:00)からの経過時間である.以後,時刻は紀元からの 経過時間を指すものとする.

    Table 6.86: 最初に1回だけ送信するデータ

    サイズ[byte]

    送信するデータ

    4

    int 

    28(= sizeof(SourceInfo))

    28

    SourceInfo

    これから送信する特徴量の音源情報

    Table 6.87: SourceInfo 構造体

    メンバ変数名

    説明

    source_id

    int 

    音源ID

    azimuth

    float 

    水平方向[deg]

    elevation

    float 

    垂直方向[deg]

    time

    timeval

    時刻(64 bit 処理系に統一,サイズは16バイト)

  3. データ送信(毎フレーム)

    音響特徴量とミッシングフィーチャーマスクを送信する. 表 6.86 に示すデータを1フレームとし,1発話の特徴量を 音声区間が終了するまで繰り返し送信する.特徴量ベクトルとマスクベクト ルの次元数は同じ大きさであることが JuliusMFT 内部で仮定されている.

    Table 6.88: 毎フレーム送信するデータ

    サイズ[byte]

    送信するデータ

    4

    int 

    N1=(特徴量ベクトルの次元数)$\times $ sizeof(float )

    N1

    float [N1]

    特徴量ベクトルの配列

    4

    int 

    N2=(マスクベクトルの次元数) $\times $ sizeof(float )

    N2

    float [N2]

    マスクベクトルの配列

  4. 終了処理

    1音源分の特徴量を送信し終えたら,終了を示すデータ(表 6.87)を送信してソケットを閉じる.

    Table 6.89: 終了を示すデータ

    サイズ[byte]

    送信するデータ

    4

    int 

    0

6.8.1.3.2 モジュールモード通信仕様

-module を指定するとオリジナル Julius と同様にモジュールモードで動作さ せることができる.モジュールモードでは, JuliusMFT がTCP/IP通信のサー バとして機能し, JuliusMFT の状態や認識結果を jcontrol などのクライア ントに提供する.また,コマンドを送信することにより動作を変更することが できる.日本語文字列の文字コードは,通常EUC-JPを利用しており,引数によっ て変更可能である.データ表現には XML ライクな形式が用いられており,一つ のメッセージごとにデータの終了を表す目印として "."(ピリオド)が送信さ れる. JuliusMFT で送信される代表的なタグの意味は以下の通りである.

オリジナルのJulius と比較した場合,JuliusMFT における変更点は,以下の2点である.

6.8.1.3.3 JuliusMFT 出力例

 

  1. 標準出力モードの出力例

    	Stat: server-client: connect from 127.0.0.1
    	forked process [6212] handles this request
    	waiting connection...
    	source_id = 0, azimuth = 5.000000, elevation = 16.700001, sec = 1268718777, usec = 474575
    	### Recognition: 1st pass (LR beam)
    	..........................................................................................................................................................................................................read_count < 0, read_count=-1, veclen=54
    	pass1_best: <s> 注文お願いします </s>
    	pass1_best_wordseq: 0 2 1
    	pass1_best_phonemeseq: silB | ch u: m o N o n e g a i sh i m a s u | silE
    	pass1_best_score: 403.611420
    	### Recognition: 2nd pass (RL heuristic best-first)
    	STAT: 00 _default: 19 generated, 19 pushed, 4 nodes popped in 202
    	sentence1: <s> 注文お願いします </s>
    	wseq1: 0 2 1
    	phseq1: silB | ch u: m o N o n e g a i sh i m a s u | silE
    	cmscore1: 1.000 1.000 1.000
    	score1: 403.611786
    
    	connection end
    	ERROR: an error occured while recognition, terminate stream	←このエラーログが出るのは仕様
    
    
  2. モジュールモードの出力サンプル

    下記のXMLライクな形式でクライアント(jcontrolなど)に出力される.行頭の “$>$” は, jcontrol を用いた場合に jcontrol によって出力される(出力情報には含まれない).

           > <STARTPROC/>
    	> <STARTRECOG SOURCEID="0"/>
    	> <ENDRECOG SOURCEID="0"/>
    	> <INPUTPARAM SOURCEID="0" FRAMES="202" MSEC="2020"/>
    	> <SOURCEINFO SOURCEID="0" AZIMUTH="5.000000" ELEVATION="16.700001" SEC="1268718638" USEC="10929"/>
    	> <RECOGOUT SOURCEID="0">
    	>   <SHYPO RANK="1" SCORE="403.611786" GRAM="0">
    	>     <WHYPO WORD="<s>" CLASSID="0" PHONE="silB" CM="1.000"/>
    	>     <WHYPO WORD="注文お願いします" CLASSID="2" PHONE="ch u: m o N o n e g a i sh i m a s u" CM="1.000"/>
    	>     <WHYPO WORD="</s>" CLASSID="1" PHONE="silE" CM="1.000"/>
    	>   </SHYPO>
    	> </RECOGOUT>
    

6.8.1.4 注意事項

6.8.1.5 インストール方法


Footnotes

  1. http://www.furui.cs.titech.ac.jp/mband_julius/