Kaldi學習筆記(四)——thchs30中文線上識別
在前面的筆記中,我們已經訓練出thchs30模型。
這篇文章主要介紹如何用訓練好的模型識別我們自己的語音。
一、安裝portaudio
首先我們cd到tools下面,執行:./install_portaudio.sh
然後在cd到src下面,執行:make ext
二、建立相關檔案
從voxforge把online_demo拷貝到thchs30下,和s5同級,online_demo建online-data和work兩個資料夾。online-data下建audio和models,audio放要識別的wav,models建tri1,講s5下/exp/下的tri1下的final.mdl和35.mdl拷貝過去,把s5下的exp下的tri1下的graph_word裡面的words.txt和HCLG.fst也拷過去。(使用tri1訓練出來的模型)
其中,final.mdl是訓練出來的模型,words.txt是字典,和HCLG.fst是有限狀態機。
三、修改指令碼
開啟online_demo的run.sh
a)將下面這段註釋掉:(這段是voxforge例子中下載現網的測試語料和識別模型的。我們測試語料自己準備,模型就是tri1了)
if [ ! -s ${data_file}.tar.bz2 ]; then
echo "Downloading test models and data ..."
wget -T 10 -t 3 $data_url;
if [ ! -s ${data_file}.tar.bz2 ]; then
echo "Download of $data_file has failed!"
exit 1
fi
fi
b) 然後再找到如下這句,將其路徑改成tri1
# Change this to "tri2a" if you like to test using a ML-trained model
ac_model_type=tri2b_mmi
ac_model_type=tri1
c)把識別麥克風語音的程式碼修改:
online-gmm-decode-faster --rt-min=0.5 --rt-max=0.7 --max-active=4000 \
--beam=12.0 --acoustic-scale=0.0769 $ac_model/final.mdl $ac_model/HCLG.fst \
$ac_model/words.txt '1:2:3:4:5' $trans_matrix;;
#online-gmm-decode-faster --rt-min=0.5 --rt-max=0.7 --max-active=4000 \
#--beam=12.0 --acoustic-scale=0.0769 $ac_model/model $ac_model/HCLG.fst \
#$ac_model/words.txt '1:2:3:4:5' $trans_matrix;;
d)把識別已經錄好的語音程式碼修改:
online-wav-gmm-decode-faster --verbose=1 --rt-min=0.8 --rt-max=0.85\--max-active=4000 --beam=12.0 --acoustic-scale=0.0769 \
scp:$decode_dir/input.scp $ac_model/final.mdl $ac_model/HCLG.fst \
$ac_model/words.txt '1:2:3:4:5' ark,t:$decode_dir/trans.txt \
ark,t:$decode_dir/ali.txt $trans_matrix;;
#online-wav-gmm-decode-faster --verbose=1 --rt-min=0.8 --rt-max=0.85\# --max-active=4000 --beam=12.0 --acoustic-scale=0.0769 \
#scp:$decode_dir/input.scp $ac_model/model $ac_model/HCLG.fst \
#$ac_model/words.txt '1:2:3:4:5' ark,t:$decode_dir/trans.txt \
#ark,t:$decode_dir/ali.txt $trans_matrix;;
4. 線上識別
我們把自己要識別的語音放到/online-data/audio裡,cd到online_demo下面,執行./run.sh,就開始識別回放了。
可以看到識別效果非常差。
如果想要識別麥克風的語音,可以執行:./run.sh --test-mode live,也是同樣的效果
5. tri2,tri3,tri4線上識別
執行tri2(tri3,tri4同理):把s5下的exp下的tri2b下的12.mat考到models的tri2下,把final.mat考過來(好像是轉移矩陣),再拷貝其他相應的檔案(同tri1),所以tri2目錄下包括如下檔案:
在第4步的基礎上修改如下內容:
1. 修改ac_model_type
ac_model_type=tri2
2. 修改trans_matrix
ac_model=${data_file}/models/$ac_model_type
trans_matrix="$ac_model/12.mat"
audio=${data_file}/audio
3. 增加--left-context=3 --right-context=3
online-gmm-decode-faster --rt-min=0.5 --rt-max=0.7 --max-active=4000 \
--beam=12.0 --acoustic-scale=0.0769 --left-context=3 right-context=3 $ac_model/final.mdl $ac_model/HCLG.fst \
$ac_model/words.txt '1:2:3:4:5' $trans_matrix;;
online-wav-gmm-decode-faster --verbose=1 --rt-min=0.8 --rt-max=0.85\
--max-active=4000 --beam=12.0 --acoustic-scale=0.0769 --left-context=3 --right-context=3\
scp:$decode_dir/input.scp $ac_model/final.mdl $ac_model/HCLG.fst \
$ac_model/words.txt '1:2:3:4:5' ark,t:$decode_dir/trans.txt \
ark,t:$decode_dir/ali.txt $trans_matrix;;
最後執行./run.sh