1. 程式人生 > >Kaldi學習筆記(四)——thchs30中文線上識別

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