音声認識メモ(Kaldi)その4(学習 その1)
Kaldiにおけるモデルの学習過程を追ってみる。
モデルを更新するにあたっては「gmmbin/gmm-est」コマンドを使う。
Do Maximum Likelihood re-estimation of GMM-based acoustic model Usage: gmm-est [options] <model-in> <stats-in> <model-out> e.g.: gmm-est 1.mdl 1.acc 2.mdl
学習の際のインプットとしては、
- モデル(更新前)
- 統計量
が必要。
統計量の作成には、「gmmbin/gmm-acc-stats-ali」コマンドを使う。
Usage: gmm-acc-stats-ali [options] <model-in> <feature-rspecifier> <alignments-rspecifier> <stats-out> e.g.: gmm-acc-stats-ali 1.mdl scp:train.scp ark:1.ali 1.acc
インプットとして、
- 初期モデル
- 特徴量ファイル
- 均等分割アライメント
が必要。
均等分割アライメントの作成は「bin/align‐equal‐compiled」コマンドを使う。
Write an equally spaced alignment (for getting training started) Usage: align-equal-compiled <graphs-rspecifier> <features-rspecifier> <alignments-wspecifier> e.g.: align-equal-compiled 1.fsts scp:train.scp ark:equal.ali
ここで、インプットとして学習用グラフ(FST)が必要になる。
グラフ作成には「bin/compile-train-graphs」コマンドを使うが、今回はグラフ生成部分に関するメモ。
Creates training graphs (without transition-probabilities, by default) Usage: compile-train-graphs [options] <tree-in> <model-in> <lexicon-fst-in> <transcriptions-rspecifier> <graphs-wspecifier> e.g.: compile-train-graphs tree 1.mdl lex.fst 'ark:sym2int.pl -f 2- words.txt text|' ark:graphs.fsts
学習用グラフ作成のインプット
- tree
- 初期モデル
- グラフ(LexiconのFST)
- text(int形式)
が必要。
text(int形式)
utterance_id_001 2
(参考)text(symbol形式)
utterance_id_001 MOSIMOSI
モデルのトポロジ(non-silence phone)
<TopologyEntry> <ForPhones> 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 </ForPhones> <State> 0 <PdfClass> 0 <Transition> 0 0.75 <Transition> 1 0.25 </State> <State> 1 <PdfClass> 1 <Transition> 1 0.75 <Transition> 2 0.25 </State> <State> 2 <PdfClass> 2 <Transition> 2 0.75 <Transition> 3 0.25 </State> <State> 3 </State> </TopologyEntry>
モデルのトポロジ(silence phone)
<ForPhones> 1 2 3 4 5 6 7 8 9 10 </ForPhones> <State> 0 <PdfClass> 0 <Transition> 0 0.25 <Transition> 1 0.25 <Transition> 2 0.25 <Transition> 3 0.25 </State> <State> 1 <PdfClass> 1 <Transition> 1 0.25 <Transition> 2 0.25 <Transition> 3 0.25 <Transition> 4 0.25 </State> <State> 2 <PdfClass> 2 <Transition> 1 0.25 <Transition> 2 0.25 <Transition> 3 0.25 <Transition> 4 0.25 </State> <State> 3 <PdfClass> 3 <Transition> 1 0.25 <Transition> 2 0.25 <Transition> 3 0.25 <Transition> 4 0.25 </State> <State> 4 <PdfClass> 4 <Transition> 4 0.75 <Transition> 5 0.25 </State> <State> 5 </State> </TopologyEntry>
モデルをFSTに変換したもの
図中緑字の意味は以下のとおり。
"_"の前 : phone(音素)
"_"の後 : phone(音素)内部の位置
_B begin _I internal _E end
FST(Context to word)
この2つを合成する。
VectorFst<StdArc> *H; VectorFst<StdArc> &ctx2word_fst; VectorFst<StdArc> trans2word_fst; TableCompose(*H, ctx2word_fst, &trans2word_fst);
FST(合成後)
青字はweight
続けて、determinize、miniminize、self-loop追加を行い、学習用FSTを生成する。