1. 程式人生 > >Kaldi學習筆記(三)——執行thchs30(清華大學中文語料庫)

Kaldi學習筆記(三)——執行thchs30(清華大學中文語料庫)


1.train_mono.sh 用來訓練單音子隱馬爾科夫模型,一共進行40次迭代,每兩次迭代進行一次對齊操作

gmm-init-mono->compile-train-graphs->align-equal-compiled->gmm-est->
{gmm-align-compiled->gmm-acc-stats-ali->gmm-est}40->analyze_alignments.sh

2.train_deltas.sh 用來訓練與上下文相關的三音子模型

check_phones_compatible.sh->acc-tree-stats->sum-tree-stats->cluster-phones->compile-questions->
build-tree->gmm-init-model->gmm-mixup->convert-ali->compile-train-graphs->
{gmm-align-compiled->gmm-acc-stats-ali->gmm-est}35->analyze_alignments.sh

3.train_lda_mllt.sh
用來進行線性判別分析和最大似然線性轉換

check_phones_compatible.sh->split_data.sh->ali-to-post->est-lda->acc-tree-stats->sum-tree-stats->
cluster-phones->compile-questions->build-tree->gmm-init-model->convert-ali->compile-train-graphs->
{gmm-align-compiled->gmm-acc-stats-ali->gmm-est}35->analyze_alignments.sh

4.train_sat.sh
用來訓練發音人自適應,基於特徵空間最大似然線性迴歸

check_phones_compatible.sh->ali-to-post->acc-tree-stats->sum-tree-stats->cluster-phones->compile-questions->
build-tree->gmm-init-model->gmm-mixup->convert-ali->compile-train-graphs->
{gmm-align-compiled->(ali-to-post->)gmm-acc-stats-ali->gmm-est}35->ali-to-post->
gmm-est->analyze_alignments.sh

5.train_quick.sh
用來在現有特徵上訓練模型。
對於當前模型中在樹構建之後的每個狀態,它基於樹統計中的計數的重疊判斷的相似性來選擇舊模型中最接近的狀態。

check_phones_compatible.sh->ali-to-post->est-lda->acc-tree-stats->sum-tree-stats->
cluster-phones->compile-questions->build-tree->gmm-init-model->convert-ali->compile-train-graphs->
{gmm-align-compiled->gmm-acc-stats-ali->gmm-est}20->analyze_alignments.sh

6.run_dnn.sh 用來訓練DNN,包括xent和MPE,

{make_fbank.sh->compute_cmvn_stats.sh}[train,dev,test]->train.sh->{decode.sh}[phone,word]->
align.sh->make_denlats.sh->train_mpe.sh->{{decode.sh}[phone,word]}3

7.train_mpe.sh 用來訓練dnn的序列辨別MEP/sMBR。
這個階段訓練神經網路以聯合優化整個句子,這比幀級訓練更接近於一般ASR目標。
sMBR的目的是最大化從參考轉錄對齊匯出的狀態標籤的期望正確率,而使用網格框架來表示競爭假設。
訓練使用每句迭代的隨機梯度下降法。
首先使用固定的低學習率1e-5(sigmoids)執行3-5輪。
在第一輪迭代後重新生成詞圖,我們觀察到快速收斂。
我們支援MMI, BMMI, MPE 和sMBR訓練。所有的技術在Switchboard 100h集上是相同的,僅僅在sMBR好一點點。
在sMBR優化中,我們在計算近似正確率的時候忽略了靜音幀。

{nnet-train-mpe-sequential}3->make_priors.sh

8.train_dae.sh 用來實驗基於dae的去噪效果

compute_cmvn_stats.sh->{add-noise-mod.py->make_fbank.sh->compute_cmvn_stats.sh}[train,dev,test]->
train.sh->nnet-concat->{{decode.sh}[phone,word]}[train,dev,test]

9.train.sh 用來訓練深度神經網路模型,幀交叉熵訓練,該相位訓練將幀分類為三音狀態的DNN。這是通過小批量隨機梯度下降完成的。
預設使用Sigmoid隱藏單元,Softmax輸出單元和完全連線的AffineTransform層,學習率是0.008,小批量的大小為256。
我們沒有使用動量或正則化(注:最佳學習率和隱藏單元的型別不同,sigmoid的值為0.008,tanh為0.00001。
通過‘–feature-transform’和‘-dbn’將input——transform和預訓練的DBN傳入此指令碼,只有輸出層被隨機初始化。
我們使用提前停止來防止過度擬合,為此我們測量交叉驗證集合(即保持集合)上的目標函式,
因此需要兩對特徵對齊dir來執行監督訓練

feat-to-dim->nnet-initialize->compute-cmvn-stats->nnet-forward->nnet-concat->cmvn-to-nnet->
feat-to-dim->apply-cmvn->nnet-forward->nnet-initialize->train_scheduler.sh

10.train_scheduler.sh 典型的情況就是,train_scheduler.sh被train.sh呼叫。
一開始需要在交叉驗證集上執行,主函式需要根據$iter來控制迭代次數和學習率。
學習率會隨著目標函式相對性的提高而變化:
如果提高大於’start_halving_impr=0.01’,初始化學習率保持常數
否則學習率在每次迭代中乘以’halving_factor=0.5’來縮小
最後,如果提高小於’end_halving_impr=0.001’,訓練終止。