-
把壓縮包解壓到對應的文件夾
~/kaldi/egs/timit/s5/data
-
首先我們需要修改數據集的目錄:
#timit=/export/corpora5/LDC/LDC93S1/timit/TIMIT # @JHU
#timit=/mnt/matylda2/data/TIMIT/timit # @BUT
# 上面兩行是代碼中原有的數據集位置,我們需要執行定製爲下面的路徑:
timit=/home/yangqing/kaldi/egs/timit/s5/data/TIMIT
接下來 運行sudo ./run.sh
我出現了錯誤如下:
local/timit_prepare_dict.sh: Error: the IRSTLM is not available or compiled
local/timit_prepare_dict.sh: Error: We used to install it by default, but.
local/timit_prepare_dict.sh: Error: this is no longer the case.
local/timit_prepare_dict.sh: Error: To install it, go to /home/yangqing/kaldi/egs/timit/s5/../../../tools
local/timit_prepare_dict.sh: Error: and run extras/install_irstlm.sh
於是在網上找到三個解決方法針對不同的問題
1)“awk:line12:function gensub never defined”
解決: sudo apt-get install gawk
2)“Error: and run extras/install_irstlm.sh”
解決:因爲這個例程建立語言模型是用irstlm工具建立的,但是在最新版本的kaldi裏面,irstlm不是默認編譯的。首先進入kaldi目錄下的tools/extras目錄,執行install_irstlm.sh腳本。安裝完成以後,目錄下出現irstlim目錄。由於timit例程裏面的引用irstlm工具的路徑是tools目錄,所以把這個目錄拷貝到tools/目錄下。回到egs/timit/s5目錄,執行./run.sh腳本,於是timit例程就跑起來了。
3)“Error: the IRSTLM is not available or compiled”
解決:cd kaldi-master/tools/extras
./install_irstlm.sh
將生成的env.sh複製到tools文件夾下即可。
我用的是第三種方法,搞定
但是又出現也第二個錯誤:
error: qsub not found.
這是因爲 TIMIT 的這個例子部署在多機器上,我們想要在本地運行所有的任務,需要修改 cmd.sh 中的內容:
# no GridEngine
export train_cmd=run.pl
export decode_cmd=run.pl
export cuda_cmd=run.pl
export mkgraph_cmd=run.pl
# 下面的內容均爲多機器任務的命令,依賴 Sun GridEngine,我們註釋掉所有的內容並使用上面的四行。
# export train_cmd="queue.pl --mem 4G"
# export decode_cmd="queue.pl --mem 4G"
# export mkgraph_cmd="queue.pl --mem 8G"
# the use of cuda_cmd is deprecated but it's still sometimes used in nnet1
# example scripts.
# export cuda_cmd="queue.pl --gpu 1"
# if [ "$(hostname)" == "fit.vutbr.cz" ]; then
# #b) BUT cluster options
# queue="all.q@@blade,all.q@@speech"
# gpu_queue="long.q@@gpu"
# storage="matylda5"
# export train_cmd="queue.pl -q $queue -l ram_free=1.5G,mem_free=1.5G,${storage}=0.5"
# export decode_cmd="queue.pl -q $queue -l ram_free=2.5G,mem_free=2.5G,${storage}=0.1"
# export cuda_cmd="queue.pl -q $gpu_queue -l gpu=1"
# fi
使用Kaldi運行了timit的S5實例,只運行到了“tri3 : LDA + MLLT + SAT Training & Decoding”這一步,後面的”SGMM2”,”MMI+SGMM2”,”DNN + SGMM2”都沒有運行成功,原因是在跑SGMM2的時候可能是由於機器配置不夠,導致資源消耗完,就卡住了,此時內存佔用率達到90%,我的主機是4G內存,分配給虛擬機是2G,以後想辦法在更好的機器上跑一下。下面貼出tr3及其前面的tr2,tr1,單音素等的識別錯誤率,效果貌似還不錯。
輸入以下代碼來看一下部分結果:
#!/bin/bash
for x in exp/{mono,tri,sgmm,dnn,combine}*/decode*; do [ -d $x ] && echo $x | grep "${1:-.*}" >/dev/null && grep WER $x/wer_* 2>/dev/null | utils/best_wer.sh; done
for x in exp/{mono,tri,sgmm,dnn,combine}*/decode*; do [ -d $x ] && echo $x | grep "${1:-.*}" >/dev/null && grep Sum $x/score_*/*.sys 2>/dev/null | utils/best_wer.sh; done
得到結果如下:
%WER 33.10 [ 4984 / 15057, 398 ins, 1673 del, 2913 sub ] exp/mono/decode_dev/wer_3
%WER 34.05 [ 2457 / 7215, 186 ins, 839 del, 1432 sub ] exp/mono/decode_test/wer_3
%WER 28.98 [ 4363 / 15057, 547 ins, 1244 del, 2572 sub ] exp/tri1/decode_dev/wer_6
%WER 30.71 [ 2216 / 7215, 328 ins, 588 del, 1300 sub ] exp/tri1/decode_test/wer_5
%WER 26.41 [ 3977 / 15057, 487 ins, 1150 del, 2340 sub ] exp/tri2/decode_dev/wer_6
%WER 27.36 [ 1974 / 7215, 178 ins, 685 del, 1111 sub ] exp/tri2/decode_test/wer_8
%WER 23.32 [ 3511 / 15057, 480 ins, 1002 del, 2029 sub ] exp/tri3/decode_dev/wer_4
%WER 26.98 [ 4062 / 15057, 552 ins, 1092 del, 2418 sub ] exp/tri3/decode_dev.si/wer_5