各個文件作用:
1:run.sh 總的運行文件,里面把其他運行文件都集成了。
{
執行順序:run.sh >>> path.sh >>> directory(存放訓練數據的目錄) >>> mono-phone>>>triphone>>>lda_mllt>>>sat>>>quitck
data preparation:
1:generate text,wav.scp,utt2spk,spk2utt ? (將數據生成這些文件) (由local/data_prep.sh生成)
text:包含每段發音的標注 sw02001-A_002736-002893?AND?IS
wav.scp: ? ?(extended-filename:實際的文件名)
sw02001-A?/home/dpovey/kaldi-trunk/tools/sph2pipe_v2.5/sph2pipe?-f?wav?-p?-c?1?/export/corpora3/LDC/LDC97S62/swb1/sw02001.sph?|
utt2spk:? 指明某段發音是哪個人說的(注意一點,說話人編號并不需要與說話人實際的名字完全一致——只需要大概能夠猜出來就行。)
sw02001-A_000098-001156?2001-A
spk2utt:???... (utt2spk和spk2utt文件中包含的信息是一樣的)
2:produce MFCC features
3:prepare language stuff(build a large lexicon that invovles words in both the training and decoding.)
4:monophone單音素訓練
5:tri1三音素訓練(以單音素模型為輸入訓練上下文相關的三音素模型), trib2進行lda_mllt聲學特征變換,trib3進行sat自然語言適應(運用基于特征空間的最大似然線性回歸(fMLLR)進行說話人自適應訓練),trib4做quick
LDA-MLLT(Linear Discriminant Analysis – Maximum Likelihood Linear Transform), LDA根據降維特征向量建立HMM狀態。MLLT根據LDA降維后的特征空間獲得每一個說話人的唯一變換。MLLT實際上是說話人的歸一化。?
SAT(Speaker Adaptive Training)。SAT同樣對說話人和噪聲的歸一化。
5:DNN
}
2:cmd.sh ? 一般需要修改
export train_cmd=run.pl?#將原來的queue.pl改為run.pl
export decode_cmd="run.pl"#將原來的queue.pl改為run.pl這里的--mem 4G?
export mkgraph_cmd="run.pl"#將原來的queue.pl改為run.pl? 這里的--mem 8G?
export cuda_cmd="run.pl"?#將原來的queue.pl改為run.pl 這里去掉原來的--gpu 1(如果沒有gpu)
3:path.sh ?(設置環境變量)
export KALDI_ROOT=`pwd`/../../..
[ -f $KALDI_ROOT/tools/env.sh ] && . $KALDI_ROOT/tools/env.sh
export PATH=$PWD/utils/:$KALDI_ROOT/tools/openfst/bin:$PWD:$PATH
[ ! -f $KALDI_ROOT/tools/config/common_path.sh ] && echo >&2 "The standard file $KALDI_ROOT/tools/config/common_path.sh is not present -> Exit!" && exit 1
. $KALDI_ROOT/tools/config/common_path.sh
export LC_ALL=C
我們看到是在運行run.sh是要用到的環境變量,在這里先設置一下.
我們看到先是設置了KALDI_ROOT,它實際就是kaldi的源碼的根目錄。
[ -f $KALDI_ROOT/tools/env.sh ] && . $KALDI_ROOT/tools/env.sh?
這句話的意思是如果存在這個環境變量腳本就執行這個腳本,但是我沒有在該路徑下發現這個腳本。
然后是將本目錄下的utils目錄, kaldi根目錄下的tools/openfst/bin目錄 和 本目錄加入到環境變量PATH中。
然后是判斷如果在kaldi根目錄下的tools/config/common_path.sh不存在,就打印提示缺少該文件,并且退出。
Kaldi訓練腳本針對不同的語料庫,需要重寫數據準備部分,腳本一般放在conf、local文件夾里;
conf放置一些配置文件,如提取mfcc、filterbank等參數的配置,解碼時的參數配置?(主要是配置頻率,將系統采樣頻率與語料庫的采樣頻率設置為一致)
local一般用來放置處理語料庫的數據準備部分腳本 > 中文識別,應該準備:發音詞典、音頻文件對應的文本內容和一個基本可用的語言模型(解碼時使用)
數據訓練完后:
exp目錄下:
final.mdl 訓練出來的模型
graph_word目錄下:
words.txt ?HCLG.fst ?一個是字典,一個是有限狀態機(fst:發音字典,輸入是音素,輸出是詞)