Kaldiに関する処理を日本語のドキュメントでまとめてみた(グラフ作成編)5


前回

1:http://qiita.com/GushiSnow/items/cc1440e0a8ea199e78c5

2:http://qiita.com/GushiSnow/items/a24cad7231de341738ee

3:http://qiita.com/GushiSnow/items/e099baf9d1c2e72cb3d1

4:http://qiita.com/GushiSnow/items/d431a5c49dc4206def2d

グラフ作成

デコーディング前の作業でグラフ作成作業がある。

下記のオプションで指定可能

"--mono"       #モノフォン   
"--quinphone"  #クインフォン
"--reverse"    #逆順
"--transition-scale" #スケール変換
"--self-loop-scale"  #自己学習の回数スケール

LGのグラフ(言語モデルと音素のモデルの結合)を作成

LGのグラフ(言語モデルと音素のモデルの結合)を作成
epsilonsの除去と決定
FST after encodingの最小化

fsttablecompose $lang/L_disambig.fst $lang/G.fst |

fstdeterminizestar --use-log=true|

fstminimizeencoded | fstarcsort --sort_type=ilabel > $lang/tmp/LG.fst

CLGのグラフを作成

文脈依存のLGグラフを作成
それぞれの経路に対してソート

fstcomposecontext --context-size=$N --central-position=$P --read-disambig-syms=$lang/phones/disambig.int --write-disambig-syms=$lang/tmp/disambig_ilabels_${N}_${P}.int $lang/tmp/ilabels_${N}_${P} < $lang/tmp/LG.fst|

fstarcsort --sort_type=ilabel > $clg

fstisstochastic $clg  || echo "[info]: CLG not stochastic."

文脈、単語、音素に加えてHMMの要素も加えたHCLGを作成する。

if [[ ! -s $dir/Ha.fst || $dir/Ha.fst -ot $model  \
    || $dir/Ha.fst -ot $lang/tmp/ilabels_${N}_${P} ]]; then
  if $reverse; then
    make-h-transducer --reverse=true --push_weights=true \
      --disambig-syms-out=$dir/disambig_tid.int \
      --transition-scale=$tscale $lang/tmp/ilabels_${N}_${P} $tree $model \
      > $dir/Ha.fst  || exit 1;
  else
    make-h-transducer --disambig-syms-out=$dir/disambig_tid.int \
      --transition-scale=$tscale $lang/tmp/ilabels_${N}_${P} $tree $model \
       > $dir/Ha.fst  || exit 1;
  fi
fi

if [[ ! -s $dir/HCLGa.fst || $dir/HCLGa.fst -ot $dir/Ha.fst || \
      $dir/HCLGa.fst -ot $clg ]]; then
  fsttablecompose $dir/Ha.fst $clg | fstdeterminizestar --use-log=true \
    | fstrmsymbols $dir/disambig_tid.int | fstrmepslocal | \
     fstminimizeencoded > $dir/HCLGa.fst || exit 1;
  fstisstochastic $dir/HCLGa.fst || echo "HCLGa is not stochastic"
fi