Kaldiに関する処理を日本語のドキュメントでまとめてみた(学習編)4
前回
1:http://qiita.com/GushiSnow/items/cc1440e0a8ea199e78c5
2:http://qiita.com/GushiSnow/items/a24cad7231de341738ee
3:http://qiita.com/GushiSnow/items/e099baf9d1c2e72cb3d1
いよいよ学習のフェーズに入る。
データの振り分け
utils/subset_data_dir.sh data/train 1000 data/train.1k || exit 1;
utils/subset_data_dir.sh data/train 1000 data/train.1k || exit 1;
学習では上記スクリプトでデータの振り分けを行う。
引数は標準で3つ
1:下記のファイル及びディレクトリが保存されているファイルを指定
cmvn.scp | spk2gender | split20/ | utt2spk
feats.scp | spk2utt | text | wav.scp
2:学習するのに必要なデータ量を指定
3:出力先のディレクトリを指定
用意されているオプション
--per-spk #それぞれの話者の発話数を指定
--speakers #ランダムに話者を選択
--shortest #発話をすべて小文字で用意
--first #最初の発話のみ
--last #最後の発話のみ
--spk-list #話者のリストを取得
モノフォン学習
1:初期モデルの学習を行っている
gmm-init-mono $shared_phones_opt "--train-feats=$feats subset-feats --n= 10 ark:- ark:-|" $lang/topo $feat_dim $dir/0.mdl $dir/tree || exit 1;
2:グラフの学習を行っている。(グラフの詳細はOpenFstを参照)
compile-train-graphs $dir/tree $dir/0.mdl $lang/L.fst \
"ark:sym2int.pl --map-oov $oov_sym -f 2- $lang/words.txt < $sdata/JOB/te xt|"
参照
http://qiita.com/GushiSnow/items/a24cad7231de341738ee
3:アライメントを行う
align-equal-compiled "ark:gunzip -c $dir/fsts.JOB.gz|" "$feats" ark,t:- \| \
gmm-acc-stats-ali --binary=true $dir/0.mdl "$feats" ark:- \
4:アライメントが正しいか最尤推定を行う
gmm-est --min-gaussian-occupancy=3 --mix-up=$numgauss --power=$power \
$dir/0.mdl "gmm-sum-accs - $dir/0.*.acc|" $dir/1.mdl 2> $dir/log/update.0.log || exit 1;
ビーム幅を大きくした探索を行う場合は下記のシェルが実行される。
x=1
while [ $x -lt $num_iters ]; do
echo "$0: Pass $x"
if [ $stage -le $x ]; then
if echo $realign_iters | grep -w $x >/dev/null; then
echo "$0: Aligning data"
mdl="gmm-boost-silence --boost=$boost_silence `cat $lang/phones/optional_s
ilence.csl` $dir/$x.mdl - |"
$cmd JOB=1:$nj $dir/log/align.$x.JOB.log \
gmm-align-compiled $scale_opts --beam=$beam --retry-beam=$[$beam*4] --ca
reful=$careful "$mdl" \
"ark:gunzip -c $dir/fsts.JOB.gz|" "$feats" "ark,t:|gzip -c >$dir/ali.JOB
.gz" \
|| exit 1;
fi
$cmd JOB=1:$nj $dir/log/acc.$x.JOB.log \
gmm-acc-stats-ali $dir/$x.mdl "$feats" "ark:gunzip -c $dir/ali.JOB.gz|" \
$dir/$x.JOB.acc || exit 1;
$cmd $dir/log/update.$x.log \
gmm-est --write-occs=$dir/$[$x+1].occs --mix-up=$numgauss --power=$power $
dir/$x.mdl \
"gmm-sum-accs - $dir/$x.*.acc|" $dir/$[$x+1].mdl || exit 1;
rm $dir/$x.mdl $dir/$x.*.acc $dir/$x.occs 2>/dev/null
fi
if [ $x -le $max_iter_inc ]; then
numgauss=$[$numgauss+$incgauss];
fi
beam=10
x=$[$x+1]
done
gmm-boost-silenceは
silienceモデルを他のGMMモデルにシェアすることですべてのモデルにおけるGMM重みがsilenceと一致する。
Author And Source
この問題について(Kaldiに関する処理を日本語のドキュメントでまとめてみた(学習編)4), 我々は、より多くの情報をここで見つけました https://qiita.com/GushiSnow/items/d431a5c49dc4206def2d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .