## トライフォンとHMMListについて

この文書では，Julius における音素環境依存モデル(トライフォン)の扱いと， HMMList ファイルについて解説します．

### 1. 音素環境依存モデル

Julius は音素環境依存モデル(トライフォン)が与えられた時，辞書上の音素表記からコンテキストを考慮したトライフォン表記を生成し，その表記に対応するHMMを適用します．

モノフォンからトライフォン表記の生成は，ある音素 "X" に対して直前の音素が "L"，直後の音素が "R" である場合に "L-X+R" の形で行われます．以下は単語「英訳」のトライフォン表記への変換例です．

    英訳+エイヤク+17        [英訳]  e     i     y     a     k     u
          ↓
    英訳+エイヤク+17        [英訳]  e+i e-i+y i-y+a y-a+k a-k+u k-u

Julius ではこのような単語辞書の音素表記，およびそこから生成されるトライフォン表記を「論理トライフォン(logical triphone)」と呼びます．またこれに対して，実際に hmmdefs で定義されているHMM名を「物理トライフォン(physical triphone)」と呼びます．

### 2. HMMListファイル

論理トライフォンと物理トライフォンとの対応は，HMMList ファイルで指定します．HMMListファイルは，登場しうるすべてのトライフォン表記について，hmmdefs で定義されている HMM を対応付けます．以下はそのフォーマットです．

1. 一行に1つの論理トライフォンの対応を定義します．
2. 第1カラムに論理トライフォン，第2カラムに対応する hmmdefs 内のHMM名を指定します．
3. hmmdefs 内で表記と同じ名前で定義されているトライフォンについては，第２カラムを空白にします．
4. すべての登場しうる論理トライフォンについて定義する必要があります．
5. 二重登録はエラーとなります．

以下は例です．第２カラムが空白のエントリは，その HMM 名が直接 hmmdefs 内で定義されていることを表しています．

    a-k
    a-k+a
    a-k+a: a-k+a
    a-k+e
    a-k+e: a-k+e
    a-k+i
    a-k+i: a-k+i
    a-k+o
    a-k+o: a-k+o
    a-k+u
    a-k+u: a-k+u
    ...

システムにおいて実際にどのようにマッピングされているかは，julius を "-check wchmm" を付けて起動することでチェックできます．初期化終了後チェックモードに入りプロンプトがでてくるので，"h 論理トライフォン名" と打つとそのトライフォンに関する情報が出力されます．

### 3. 単語間トライフォンの扱い

Julius において，音素環境依存性の扱いはパスごとに異なります．第１パスでは単語間トライフォンについて，同じコンテキストを持つ全トライフォンHMMの最大値を用います．例を挙げると，前述の単語「英訳」の場合，単語の末端において， "k-u+a", "k-u+s", "k-u+e:" などのHMMの音響尤度を計算し，その最大値を割り当てます．

第2パスでは正確な単語間の依存性を計算します．ある仮説から次の単語を展開する際，接続部のモデルを依存性を考慮して切り替えながら探索を行います．

    今日 + は       ky+o: ky-o:   w+a    w-a
                ↓
    今日 は         ky+o: ky-o:+h o:-w+a w-a

### 4. HMMListファイル作成にあたっての注意点

HMMListファイルの作成に当たっては，以下の点に注意して下さい．

- HMMList ファイルでの指定は hmmdefs内の名前定義を上書きします．つま り，実際に hmmdefs 内で定義されている名前とマッピングの名前が重なっ た場合，マッピングのほうが優先されます．例を挙げると， hmmdefs 内に

      ~h "j-u+q"

  という定義があるとき，HMMList ファイルで

      j-u+q y-u+q

  などど指定すると，j-u+q のHMM定義は実際には使用されずに y-u+q が使われ ることになります．

$Id: hmmlist.html,v 1.2 2001/08/17 09:40:09 ri Exp $