各個文件作用:
1:run.sh 總的運(yùn)行文件屿愚,里面把其他運(yùn)行文件都集成了。
{
執(zhí)行順序:run.sh >>> path.sh >>> directory(存放訓(xùn)練數(shù)據(jù)的目錄) >>> mono-phone>>>triphone>>>lda_mllt>>>sat>>>quitck
data preparation:
1:generate text,wav.scp,utt2spk,spk2utt ? (將數(shù)據(jù)生成這些文件) (由local/data_prep.sh生成)
text:包含每段發(fā)音的標(biāo)注 sw02001-A_002736-002893?AND?IS
wav.scp: ? ?(extended-filename:實(shí)際的文件名)
sw02001-A?/home/dpovey/kaldi-trunk/tools/sph2pipe_v2.5/sph2pipe?-f?wav?-p?-c?1?/export/corpora3/LDC/LDC97S62/swb1/sw02001.sph?|
utt2spk:? 指明某段發(fā)音是哪個人說的(注意一點(diǎn),說話人編號并不需要與說話人實(shí)際的名字完全一致——只需要大概能夠猜出來就行秸应。)
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單音素訓(xùn)練
5:tri1三音素訓(xùn)練(以單音素模型為輸入訓(xùn)練上下文相關(guān)的三音素模型), trib2進(jìn)行l(wèi)da_mllt聲學(xué)特征變換敞嗡,trib3進(jìn)行sat自然語言適應(yīng)(運(yùn)用基于特征空間的最大似然線性回歸(fMLLR)進(jìn)行說話人自適應(yīng)訓(xùn)練)颁糟,trib4做quick
LDA-MLLT(Linear Discriminant Analysis – Maximum Likelihood Linear Transform), LDA根據(jù)降維特征向量建立HMM狀態(tài)喉悴。MLLT根據(jù)LDA降維后的特征空間獲得每一個說話人的唯一變換棱貌。MLLT實(shí)際上是說話人的歸一化。?
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(如果沒有g(shù)pu)
3:path.sh ?(設(shè)置環(huán)境變量)
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
我們看到是在運(yùn)行run.sh是要用到的環(huán)境變量,在這里先設(shè)置一下.
我們看到先是設(shè)置了KALDI_ROOT,它實(shí)際就是kaldi的源碼的根目錄。
[ -f $KALDI_ROOT/tools/env.sh ] && . $KALDI_ROOT/tools/env.sh?
這句話的意思是如果存在這個環(huán)境變量腳本就執(zhí)行這個腳本障贸,但是我沒有在該路徑下發(fā)現(xiàn)這個腳本错森。
然后是將本目錄下的utils目錄, kaldi根目錄下的tools/openfst/bin目錄 和 本目錄加入到環(huán)境變量PATH中。
然后是判斷如果在kaldi根目錄下的tools/config/common_path.sh不存在篮洁,就打印提示缺少該文件涩维,并且退出。
Kaldi訓(xùn)練腳本針對不同的語料庫袁波,需要重寫數(shù)據(jù)準(zhǔn)備部分瓦阐,腳本一般放在conf、local文件夾里篷牌;
conf放置一些配置文件睡蟋,如提取mfcc、filterbank等參數(shù)的配置枷颊,解碼時的參數(shù)配置?(主要是配置頻率戳杀,將系統(tǒng)采樣頻率與語料庫的采樣頻率設(shè)置為一致)
local一般用來放置處理語料庫的數(shù)據(jù)準(zhǔn)備部分腳本 > 中文識別,應(yīng)該準(zhǔn)備:發(fā)音詞典偷卧、音頻文件對應(yīng)的文本內(nèi)容和一個基本可用的語言模型(解碼時使用)
數(shù)據(jù)訓(xùn)練完后:
exp目錄下:
final.mdl 訓(xùn)練出來的模型
graph_word目錄下:
words.txt ?HCLG.fst ?一個是字典豺瘤,一個是有限狀態(tài)機(jī)(fst:發(fā)音字典,輸入是音素听诸,輸出是詞)