## ファイル形式の仕様と制限

###

###

###

###

###

###

###

###

###

      Julius が扱うことのできるデータ形式は以下のようになっている。

     1. HMM定義ファイル		… HTKのHMM定義ファイル形式
     2. HMMlistファイル		… (独自)
     3. 単語N-gram言語モデルファイル… ARPA標準形式 もしくはバイナリN-gram形式
     4. 単語辞書ファイル		… HTKの辞書フォーマットに類似
     5. DFA ファイル		… 独自形式
     6. マイク入力			… 16bit 16kHz サンプリング
     7. 音声波形ファイル		… .wav, .raw, その他
     8. 特徴パラメータファイル	… HTKの特徴パラメータファイル形式

      なお，ファイルは全て .gz のままで読み込み可能である。

      各ファイルの用途／形式や仕様上の制限等を、以下に述べる

    1. HMM定義ファイル  (起動時指定オプション：-h)

      HTKのHMM定義言語で記述されたHMM定義ファイルを読み込むことができる。
    音素(monophone)，音素環境依存(triphone), tied-mixture ベースモデルに対
    応している．これらは読み込み時に自動判別される．

      triphoneモデルの場合は，辞書の音素表記からtriphoneへの変換を行うために，
    辞書上で登場しうる全てのtriphoneに対して実際のモデル上のtriphoneの
    割り付けを指定する HMMlist ファイルが必須である（後述）．

      JuliusではHTKの仕様を全て実装してはおらず，必要性が低いと思われる
    部分は省いている。また実装の都合上，状態間遷移に制限が加わる。

      また 3.3 からはMLLR適応のための regression tree を含む音響モデルファ
    イルを直接読み込める．ただし Julius/Julian自身が MLLR 適応を行えるわけ
    ではない．

    ○形式
    -------

      (各項目の意味の詳細は "The HTK Book for HTK V2.0" 7.9 節を参考のこと)

    ・出力分布形式

    	連続HMMのみ（離散HMMは不可）
    	対応。Phonetic Tied-Mixture モデルを含む任意の
    	mixture tyingに対応

    	混合数・ベクトル次元数は任意
    	共分散行列の型は，デフォルトの対角成分(diagonal)のみ。
    	InvCover, LLTCover, XForm, FULL は不可。
    	継続時間制御(duration)パラメータは不可。

    ・状態間遷移

    	初期状態と最終状態には以下の制限がある。
    	・出力分布を持たないこと
    	・初期状態から遷移は1つのみであること
    	・最終状態への遷移は1つのみであること
    	なおこの2状態を除く内部では任意のskipやloopを許す．

    ・共有マクロ

    	~t(遷移), ~s(状態), ~m(分布), ~v(共分散) を扱える．
    	これ以外の共有マクロ(~w ~u ~i ~x)は不可．

    ・multi input stream

    	入力ストリームは1つのみ．

      以上の条件に合わないHMM定義ファイルを読み込もうとした場合，Julius/Julian は
    エラーメッセージを出力して異常終了する．

    ○サイズの制限
    ---------------

      HMMの定義数や状態数，マクロ数に上限は無い．
      メモリの許す限りのどんな大きさのものでも読み込むことができる．

    ○Tied-Mixture モデルの判別
    ----------------------------

      バージョン 3.0 以降では，tied-mixture ベースのモデルがサポートされている．
      単一のコードブックからなる通常のtied-mixtureモデルのほかに，
    音素単位でコードブックを持つ phonetic tied-mixture モデルも扱える．
      HTKと同じくコードブックは任意数定義できる．
      ただし，通常の混合分布定義との混在は許されない．

      Julius は音響尤度の計算手順として以下の2種類を実装している．
      使用するモデルのタイプを自動判別してどちらかを自動的に選択する．

    	1. state-driven

    	   monophoneや状態共有triphone用の計算方式．
    	   出力確率の計算は状態単位で行い，キャッシュも状態単位で行う．

    	2. mixture-driven

    	   tied-mixtureモデルの計算方式．
    	   コードブック（ガウス分布集合）単位で計算を行う．
    	   各フレームごとに，まず全コードブックの各ガウス分布の尤度を
    	   計算し，コードブックごとに各分布尤度をキャッシュする．
    	   HMM状態の出力確率は，対応するコードブックの上記のキャッシュを
    	   参照しながら，重みをかけて算出する．

      tied-mixtureモデルかどうかの判別は，hmmdefs中に "" 定義が用いられてい
    るかどうかで行う．hmmdefs読み込み中に "" 定義が見つかると，Julius
    はそのモデルを tied-mixture ベースと判断してmixture-drivenの計算方式を選択
    する．

      このように，音響モデルをtied-mixtureモデルとしてJuliusに計算させるには
    音響モデルを ディレクティブを用いて定義する必要がある．

      ディレクティブの扱いについては HTK に準ずる．詳細は HTK Book を
    参照のこと．

    2. HMMlistファイル (-hlist)

      HMMListファイルは， "e-i+q" といった辞書の音素表記から生成される論理
    的な音素表記から，hmmdefs で定義される音響モデル名への任意のマッピング
    を記述する．triphone HMM を用いる場合は必須．

      フォーマットや制限についてはトライフォンとHMMListについてを参考にされたい．

    3. 単語N-gram言語モデルファイル

    ■３．１．ARPA標準形式  (-nlr, -nrl)

      2-gramと逆向きの3-gramのARPA標準形式のN-gramデータを読み込むことができる．

    ○形式
    -------

      ARPA標準形式を読み込める．未知語カテゴリ(等)のエントリが1-gramの
    最初のエントリとして必ず含まれていること．(CMU SLM ToolKitで作成した場合，
    仕様上常にこの条件は満たされる)

      単語辞書の単語のうちN-gramにない単語のN-gram確率は，この未知語カテゴリ
    の確率をその総数で補正した値が用いられる．

      2-gramと（逆向きの）3-gramの両方を読み込む場合，逆向き3-gramにおいて出
    現するコンテキストが 2-gramに無い場合は，警告メッセージを出力しつつ
    そのtupleを無視して処理を続行する．

    ○サイズの制限
    ---------------

      語彙数の上限は 65,535 語である．

      configure 時に"--enable-word-int" を指定することで上限を
    (2^31)語まで拡張することができる．ただし現在のところ動作は保証の限りで
    はない．

      また，上記 configure で作成した Julius でバイナリN-gramを用いる場合は，
    そのバイナリN-gramも，上記 configure でコンパイルした mkbingram を使って
    生成されたものである必要がある点に注意されたい

    ■３．２．バイナリN-gram形式  (-d)

      2-gramと逆向き3-gramファイル(ARPA形式)から生成できる，バイナリ形式の
    N-gram ファイルである．添付のツール "mkbingram" で生成する．

      あらかじめ内部でインデックス化されているので起動が非常に高速になる．ま
    たサイズも小さくなるメリットがある．

    なお，CMU-TKのbinary n-gram (.binlm) とは非互換である．

    4. 単語辞書ファイル	(-v)

    HTKのdictionary formatとほぼ同等のフォーマットを用いる．
    違いは第2フィールドが必須であることだけである．

    ○形式
    -------

    ・第1フィールド（言語制約エントリ）

    Julius においては，その単語が参照する N-gram エントリの文字列．
    Julian においては，その単語が属するカテゴリ番号．

    N-gramエントリを検索するため，辞書ファイルとN-gramファイルの日本語コー
    ドは一致させる必要がある．

    N-gramエントリにない単語はとして参照される．そのN-gram確率は
    N-gramエントリにない単語総数で補正した値が用いられる．

    ・第2フィールド（出力シンボル）

    認識結果として出力する文字列を指定する．値は `[' `]' で囲まれていなく
    てはならない．"[]"と指定することで出力無しにできる．

    ・第3フィールド以降（音素HMMの並び）

    辞書の音素記述は monophone で行う．
    （triphone HMM使用時は，辞書読み込み時に単語内コンテキストを考慮して
      自動変換される．）

    [例](ソート済みである必要はない)
    課税+1  [カゼイ]        k a z e i
    課題+1  [カダイ]        k a d a i
    課長+1  [カチョウ]      k a ch o:
    課長+1  [カチョウ]      k a ch o u
    過ぎ+過ぎる+102 [スギ]  s u g i
    過ぎ+過ぎる+114 [スギ]  s u g i
    過去+11 [カコ]  k a k o
    過激+14 [カゲキ]        k a g e k i
    過程+1  [カテイ]        k a t e:

    ○サイズの上限
    ---------------

    認識単語数の上限は 65,535 語である．

    ただし，configure 時に"--enable-word-int" を指定することで上限を
    (2^31)語まで拡張することができる．ただし現在のところ動作は保証の限りで
    はない．

     5. DFAファイル (-dfa)

    オートマトン文法制約を表現する，カテゴリ単位の有限状態オートマトンネッ
    トワークを記述する．

    ○形式
    -------

    1行で1遷移を定義する．状態番号は 0 から．

    ・第1フィールド：状態番号
    ・第2フィールド：入力カテゴリ番号
    ・第3フィールド：遷移先状態番号
    ・第4フィールド：最下位ビットが１なら，第1フィールドで示された状態が
      終了状態（受理状態）であることを表す．最下位ビット以外は未使用．
    ・第5フィールド：未使用

    初期状態は状態番号 0 に固定（１つのみ）．
    終了状態は「状態番号 -1 -1 1」の形で指定（複数指定可能）
    入力カテゴリ番号は，単語辞書中のカテゴリ番号（第1フィールド）に
    対応する．

     6. マイク入力  (-input mic)

    マイクデバイスは16kHz,16bitでサンプリングが行える必要がある．

    最大長はデフォルトで20秒(320kサンプル)．
    増やしたいときは include/sent/speech.h の MAXSPEECHLEN を上げ
    て再コンパイルすればよい．

    なおJuliusは現在のところMFCC_E_D_N_Zしか特徴抽出できないため，
    MFCC_E_D_N_Z以外の音響モデルではマイク入力を使用できない点に注意．

    7. 音声波形ファイル (-input rawfile)

    音声データは16kHz,16bitで与える必要がある．

    ファイル形式は以下のものを読み込める（自動判別）．

    	1. RAW(別名no header)ファイル
    		ただし16kHz,16bit(signed short),mono,big-endian
    	2. Microsoft Windows WAV ファイル
    		ただし16kHz,16bit,無圧縮

    libsndfile付きでコンパイルした場合はさらに以下の形式のファイルを読み込
    める(libsndfileドキュメントより)．ただしどれも16bit,16kHzである必要が
    ある（内部でサンプリングレート変換などは行わない）

    	3. Microsoft WAV 16 bit integer PCM.
    	4. Apple/SGI AIFF and AIFC uncompressed 16bit interger PCM
    	5. Sun/NeXT AU/SND format (big endian 16bit PCM)
    	6. Dec AU format (little endian 16 bit PCM)
    	7. Microsoft IMA/DVI ADPCM WAV format (16 bits per sample
    	   compressed to 4 bits per sample).
    	8. Microsoft ADPCM WAV format (16 bits per sample compressed
    	   to 4 bits per sample)
    	9. Microsoft 8 bit A-law an u-law formats (16 bits per sample
    	   compressed to 8 bits per sample)
    	10. Ensoniq PARIS big and little endian, 16 bit PCM files (.PAF).

    なおlibsndfileは以下のURLから取得できる：

          http://www.zip.com.au/~erikd/libsndfile/

    Juliusの探索アルゴリズムの性質上，長い入力は第2パスの探索が不安定に
    なるため，無音などで短く区切って入力するのが望ましい．

    なおJuliusは現在のところMFCC_E_D_N_Zしか特徴抽出できないため，
    MFCC_E_D_N_Z以外の音響モデルでは音声ファイルの入力はできない．
    外部ツールで特徴抽出した特徴パラメータファイルを与えることになる．

     8. 特徴パラメータファイル (-input mfcfile)

      HTKの用いる特徴パラメータファイルを認識対象として与えることができる．

    ○形式
    -------

    特徴パラメータの型(base kind,qualifier)およびベクトル長は，使用する
    HMMの学習パラメータと一致するか，もしくは学習パラメータを含んでいる必
    要がある．認識に必要なパラメータが全て含まれていない場合はエラーと
    なる．

    なんらかの理由でチェックがうまく機能しない場合は -notypecheck オプショ
    ンでチェックを回避できる．

    ○与えるパラメータの型について
    -------------------------------

    特徴パラメータの型は本来使用するHMMの学習パラメータと一致している必要
    がある．しかし，与える特徴パラメータが，HMMが必要とするパラメータの構
    成要素を内部に含んでいる場合は，Juliusが自動的にその中から必要な要素を
    抜き出して認識に使用する．

    例えば，

    ・HMM学習パラメータ
        MFCC_E_D_N_Z = MFCC(12)+ΔMFCC(12)+ΔPow(1) (CMN)        計25次元

    のときは，MFCC_E_D_N_Z以外に

    ・特徴パラメータファイル
        MFCC_E_D_Z   = MFCC(12)+Pow(1)+ΔMFCC(12)+ΔPow(1) (CMN) 計26次元
      または
        MFCC_E_D_A_Z = MFCC(12)+Pow(1)+ΔMFCC(12)+ΔPow(1)
    		   + ΔΔMFCC(12) + ΔΔPow(1)	(CMN)	     計39次元

    を与えても認識を実行可能である．

    9. 1入力あたりの仮説単語長制限

    文仮説中の単語数には制限がある（デフォルト：150単語）．

    非常に長い入力を与えた時に以下のエラーがでた場合は，Juliusのソースプ
    ログラム内のMAXSEQNUMの定義を変更して再コンパイルすれば良い．

        sentence length exceeded ( > 150)

    具体的には，ソースパッケージの include/sent/speech.h 内の

    #define MAXSEQNUM     150

    の値を必要に応じて大きい値に書き換えた後，

        % make distclean; make

    を実行する．

    								以上

$Id: format.html,v 1.5 2002/09/11 21:00:39 ri Exp $