基於kaldi的在線中文識別,online的操作介紹

最近研究了下kaldi,也看了好多文章,感覺這方面的有用文章太少! 大多停留在編譯和深層理論方面。對於我們這種沒有基礎的人,除了看完編譯,就只能很茫然的看哪些高高在上的理論了。

本文章,適合那些。剛剛編輯完kaldi。想試試手,找找感覺的人來看的。如果你還沒有編輯過,可以查查相關文章。有好多。

聲明一下,本文章,只適合在windows下裝虛擬機UBuntu的機器上玩。你的虛擬機內存要大些(4g--8g最好)。不然很痛苦。


找感覺一定要從中文開始,我們直接拿那個清華大學的中文例子(thchs30)開練,

1 首先進入githab下載的源碼中egs目錄下找到這個例子,然後要看一遍它的介紹。在readme裏面有語料庫的下載方式。把它下完(3個壓縮包全下)。4個多G比較大。

2 考到對應的文件夾下(與s5同級別即可),取名叫thchs30-openslr,將所有壓縮包解壓到這下面

3 打開s5目錄,編輯cmd.sh.  如下:()

export train_cmd=run.pl
export decode_cmd=run.pl
export mkgraph_cmd=run.pl

export cuda_cmd=run.pl


4 打開run.sh,看到#data preparation這句,在它之後就全是shell的命令。建議一條一條的跑。不然中間會有莫名奇妙的斷檔和錯誤。如何一條條跑呢? 使用註釋:

<<!EOF!            !EOF!   這兩句相當於C語言的/*  */.   但願這個你能看懂。在此謝謝小凡妹妹的在線指導。


5按照上面的一句一句的來。它大概有幾個過程:數據準備,monophone單音素訓練, tri1三因素訓練, trib2進行lda_mllt特徵變換,trib3進行sat自然語言適應,trib4做quick(這個我也不懂),後面就是dnn了


6當運行到dnn時候會報錯,因爲默認dnn都是用GPU來跑的。它會檢查一下,發現只在CPU下,就終止了。這裏建議不要跑dnn了。因爲我試過,改成CPU之後跑了7,8天,才迭代17,18次。太慢了。而一次訓練怎麼的也得20多次。還要訓練好幾回。所以,想跑dnn的話還是找GPU吧。


7.下面說說前面的幾個步驟幹啥用。其實每一次都會有個模型,這些模型都可以用了,你可以看它的exp目錄,所有的步驟都在這裏面輸出。我們先簡單看一個,tri1,打開後,有個decode_test_word,裏面有個scoring_kaldi,best_wer就是它的錯誤率,36.15%.好回到tri1下,看到final.mdl了嗎,這個就是有用的東西,學出來的模型。另外還得到graph_word下面,找到words.txt,和HCLG.fst,一個是字典,一個是有限狀態機。有這3個文件,就可以來使用你的識別功能了。


8.這步是比較好玩的了。我們用這個模型來識別自己的語言。(是非常的不準,只是感受一下而已),回到源碼的src下。make ext  編譯擴展程序。(在這之前確定你的tools文件夾下的portaudio已經裝好)之後,會看到onlinebin文件夾。裏面有兩個程序,online-wav-gmm-decode-faster 用來回放wav文件來識別的,online-gmm-decode-faster用來從麥克風輸入聲音來識別的。

8.1 這裏開個小差:portaudio 裝好後,有可能收不到聲音,可以裝個audio recoder(用apt-get),之後用它錄音試試,測測是否有聲音,只要能錄音,portaudio就沒問題,一般裝完就好了,不行就再重啓一下。不知道爲啥。

8.2 介紹下online。很鄙視kaldi在這塊的設計,居然搞出來兩個版本。online是不再維護了。但是非常好用,online2是新的。參數n多。也不支持從麥克風採集。特別不人性化,如果有那個朋友把online2研究好了,請把經驗也分享一下。


9.我們找一個例子吧:去egs下,打開voxforge,裏面有個online_demo,直接考到thchs30下。在online_demo裏面建2個文件夾online-data  work,在online-data下建兩個文件夾audio和models,audio下放你要回放的wav,models建個文件夾tri1,把s5下的exp下的tri1下的final.mdl和35.mdl(final.mdl是快捷方式)考過去。把s5下的exp下的tri1下的graph_word裏面的words.txt,和HCLG.fst,考到models的tri1下。


10。打開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

# Alignments and decoding results  

---------------------------------------------------------------

改成:

 # Change this to "tri2a" if you like to test using a ML-trained model
ac_model_type=tri1

c)

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 

————————————————————————————

改成: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



11。直接./run.sh吧,就是開始回放識別了。裏面有提示,./run.sh --test-mode live命令就是從麥克風識別。

12.昇華部分在這裏。我們試完tri1的模型後,一定很想試試tri2或3.但當你操作時,會遇到如下的問題:

ERROR (online-wav-gmm-decode-faster:LogLikelihoods():diag-gmm.cc:533) DiagGmm::ComponentLogLikelihood, dimension mismatch 39vs. 40

怎麼解決? 仔細看看這個源文件,它是dieta的。如果要是ldp還得加matrix參數(拿tri2b舉例)。

於是修改run.sh成如下這個樣子  :(就是把final.mat考過來,引入命令中)

if [ -s $ac_model/matrix ]; then
    trans_matrix=$ac_model/12.mat
fi

同時把把s5下的exp下的tri2b下的12.mat考到models的tri2b下。

13 再次修改run.sh成如下這個樣子(添加2個參數--left-context=3 --right-context=3)

 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;;

14 運行./run.sh,結果如下。怎麼樣,有點酷不? 如果想使用tri2等模型做麥克風在線的,也同理修改就可以了。

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:./work/input.scp online-data/models/tri2b/final.mdl online-data/models/tri2b/HCLG.fst online-data/models/tri2b/words.txt 1:2:3:4:5 ark,t:./work/trans.txt ark,t:./work/ali.txt online-data/models/tri2b/12.mat 
File: D4_750
蘇北 軍禮 下跪 將 是 馬 湛 殺人 裏 杜 唐 據 五 蘇 並 案 但 甜美 但 也 分析 抗戰 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章