kaldi實例腳本運行


Getting started, and prerequisites.

rm/s5/run.sh

Data preparation

如果有GridEngine,

train_cmd="queue.pl -q all.q@a*.clsp.jhu.edu"
decode_cmd="queue.pl -q all.q@[ah]*.clsp.jhu.edu"

如果需要在本地運行

train_cmd="run.pl"
decode_cmd="run.pl"

創建訓練集和測試集
local/rm_data_prep.sh /export/corpora5/LDC/LDC93S3A/rm_comp 
生成如下:
  • local : Contains the dictionary for the current data.   包含當前數據的發音詞典
  • train : The data segmented from the corpora for training purposes.  訓練數據的seg標注信息
  • test_* : The data segmented from the corpora for testing purposes. 測試數據的seg標注信息

 

cd local/dict
head lexicon.txt
head nonsilence_phones.txt
head silence_phones.txt

 /train和/test結構相同
head text
head spk2gender.map
head spk2utt
head utt2spk
head wav.scp

wc train/text test_feb89/text 比較訓練集和測試集的詞數,文件大小

下一步創建原始的語言文件
utils/prepare_lang.sh data/local/dict '!SIL' data/local/lang data/lang
這將會產生一個lang的文件夾,里面包含一個FST描述語言文件,輸出文件夾(data/lang).

words.txt and phones.txt(data/lang/)被會用到,它們是openfst格式的符號表,代表從一個字符串到整數
的映射,
suffix .csl (in data/lang/phones)   non-silence, and silence, phones 整數id鍵值對列表
phones.txt (in data/lang/) 音素符號表,處理FST的歧義符號,這些符號會被替換成 #1, #2 

L.fst是編譯后的lexicon FST格式。
用下面的命令可以查看L.fst的內容
fstprint --isymbols=data/lang/phones.txt --osymbols=data/lang/words.txt data/lang/L.fst | head
如果沒有找到fstpirnt命令,則需要將OPenFst添加到PATH環境,或者簡單點執行../path.sh

下一步使用上一步創建的文件,創建一個FST描述語法
 local/rm_prepare_grammar.sh,將會產生/data/lang/G.fst.
 
        

Feature extraction

Monophone training

輸出文件夾:
exp/mono

nohup steps/train_mono.sh --nj 4 --cmd "$train_cmd" data/train.1k data/lang exp/mono &
tail nohup.out
data/lang/topo 立即創建,1個音素的內部狀態轉移topo
data/phones.txt 音素 音素id

查看生成的模型文件0.mdl

gmm-copy --binary=false exp/mono/0.mdl - | less
mdl file 包含兩個對象,1個對象TransitionModel,它包含HMM拓撲信息;1個對象包含模型類型

查看tree文件
copy-tree --binary=false exp/mono/tree - | less
單音素的tree,它沒有任何的splits。

 exp/mono/ali.1.gz
 copy-int-vector "ark:gunzip -c exp/mono/ali.1.gz|" ark,t:- | head -n 2


這是訓練數據的維特比對其,對於每個訓練文件都有1行。對齊文件里面有許多數字,都是特別大,它里面並不包含pdf的id,而是transition-id,它以音素的
topo原型,編碼音素和transition,這是非常有用的,如果想查看transitions信息,則如下命令:
 show-transitions data/lang/phones.txt exp/mono/0.mdl

 

為了更清晰的查看對齊,可以用下面的命令
 show-alignments data/lang/phones.txt exp/mono/0.mdl "ark:gunzip -c exp/mono/ali.1.gz |" | less
查看訓練過程;匹配log文件overall關鍵字行
grep Overall exp/mono/log/acc.{?,??}.{?,??}.log
當單音素訓練完畢,可以進行解碼測試,如下命令
utils/mkgraph.sh --mono data/lang exp/mono exp/mono/graph
 which fstdeterminizestar
在圖創建完后,開始解碼
steps/decode.sh --config conf/decode.config --nj 20 --cmd "$decode_cmd" \
  exp/mono/graph data/test exp/mono/decode
less exp/mono/decode/log/decode.2.log 

從2.tra文件里查看真實的解碼詞序列,命令:
words.txt包含了詞與int的關系
utils/int2sym.pl -f 2- data/lang/words.txt exp/mono/decode/scoring/2.tra

查看真實的解碼詞序列,然后再轉換回整型:

utils/int2sym.pl -f 2- data/lang/words.txt exp/mono/decode/scoring/2.tra | \
utils/sym2int.pl -f 2- data/lang/words.txt   將符號轉換成整數
tail exp/mono/decode/log/decode.2.log  查看decode.2.log結尾一些總結性信息
 
gmm-decode-faster
 Decode features using GMM-based model.



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM