kaldi 中mono phone訓練過程

kaldi中訓練聲學模型,首先是訓練單音素模型,即mono-phone過程,

本文主要講述mono-phone訓練的過程。

代碼爲steps/train_mono.sh

用法如下所示:

steps/train_mono.sh [options] <training-data-dir> <lang-dir> <exp-dir>
training-data-dir表示事先準備好的要準備訓練數據文件夾(即第0步準備的:wav.scp,text,utt2spk,spk2utt文件等,local/data_prep.sh生成);

lang-dir表示事先準備好的和語言模型相關的文件(即第20步準備的L_disambig.fst,L.fst,oov.int,oov.txt,phones.txt,topo,

words.txt文件等,由step/prepare_lang.sh生成);

exp-dir表示輸出文件路徑;

[options]表示輸入配置參數,如下所示:

-nj:並行job數

-cmd:job調度分發腳本,默認是run.pl(Grid Engine分發腳本)

調用如下:

local/train_mono.sh --nj "$train_nj" --cmd "$train_cmd" $traindatadir $langdir $expdir/mono


打開steps/train_mono.sh,首先是一項參數

主要的如下所示:

scale_opts控制縮放選項:

--transition-scale=1.0 --acoustic-scale=0.1 --self-loop-scale=0.1

num_iters訓練迭代次數;

max_iter_inc每個輪次最大增加的高斯數

totgauss總高斯數;

careful傳遞給gmm-align-complied參數,默認爲false;

boost_silence係數,用來增加靜音音素的似然;

realign_iters在第N次迭代進行一次對齊操作,

在訓練的job並行訓練過程中,訓練數據的各個子集合是分散到不同的處理器去進行訓練,然後每輪迭代後會進行合併。

下面就講一下訓練的過程:

1.首先是初始化GMM,使用的腳本是/kaldi-trunk/src/gmmbin/gmm-init-mono輸出是0.mdl和tree文件;

2.compile training graphs,使用的腳本是/kaldi-trunk/source/bin/compile-training-graphs,輸入是tree,0.mdl和L.fst

   輸出是fits.JOB.gz,其是在訓練過程中構建graph的過程;

3.接下來是一個對齊的操作,kaldi-trunk/source/bin/align-equal-compiled

4.然後是基於GMM的聲學模型進行最大似然估計得過程,腳本爲/kaldi-trunk/src/gmmbin/gmm-est

5.然後進行迭代循環中進行操作,如果本步驟到了對齊的步驟,則調用腳本kaldi-kaldi/src/gmmbin/gmm-align-compiled

6.重新估計GMM,累計狀態,用腳本/kaldi-trunk/src/gmmbin/gmm-acc-states-ali;調用新生成的參數(高斯數)重新估計GMM,調用腳本/kaldi-trunk/src/gmmbin/gmm-est

7.對分散在不同處理器上的結果進行合併,生成.mdl結果,調用腳本gmm-acc-sum

8.增加高斯數,如果沒有超過設定的迭代次數,則跳轉到步驟5重新進行訓練

最後生成的.mdl即爲聲學模型文件

在離線識別階段,即可以調用utils/mkgraph.sh;來對剛剛生成的聲學文件進行構圖

之後解碼,得到離線測試的識別率。

以上就完成了聲學模型訓練第一個階段,mono-phone訓練的代碼介紹過程。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章