1. 程式人生 > >語音識別工具箱之kaldi介紹

語音識別工具箱之kaldi介紹

      最近有幾個人在群裡問我kaldi的問題,不巧的是最近我在忙我的開題。我對kaldi的瞭解也就是語音識別+深度學習。如果不是kaldi有dnn模型,或許我更願意用htk吧。其實,基本的都差不多吧。kaldi可以說是更加豐富吧。本來準備開題開語音識別,但是由於導師的反對,不得不做現在的歌曲人聲分離。進入到這個新的領域,我不得不懷疑自己的學習能力,現在的我變的不淡定了。很久沒有寫博文,也許很忙,也許自己懶……等開題結束,我應該好好規劃吧。此外,學長要和我在kaldi上用深度學習模組做下漢語的語音識別。等做好了,我一定會公開給大家。

      現在先說說kaldi的安裝吧。我一般都會在虛擬機器上弄。大家在實現前的平臺可以是物理機或者虛擬機器。然後大家安裝網上的教程安裝好linux。我就從安裝好平臺開始把。前一段時間,我根據

http://kaldi.sourceforge.net/install.html中下載的時候有install.sh檔案。安裝時直接就./install.sh,然後make就可以了。但是今天我重新下載時就直接make就可以了。具體步驟:

                         1. svn co svn://svn.code.sf.net/p/kaldi/code/trunk kaldi-trunk

                         2.到tools資料夾下,直接make就可以了。

   你安裝的時候最好看下tools裡的install文件,裡面說的很清楚。如果不出意外,基本就安裝好了。如果你想實驗下自己到底安裝成功沒,那就來個例子吧。

   下面的是例子。kaldi裡的例子很多,在egs目錄下。因為資料庫的原因,一般可以做些簡單的實驗把。如果你有大量的資料庫,如果願意跟我分享,那我就非常感謝你了。裡面的wsj資料庫是LDC的。一般大家可以做timit和yesno實驗。下面我演示下yesno實驗,希望你可以學到更多吧。

    步驟和結果如下:

1. 把waves_yesno.zip.gz複製到yesno/s3目錄下,然後使用
sudo yumzip  waves_yesno.zip.gz
tar –xvf  waves_yesno.tar
2.執行./run.sh。
 測試呈現在linux上的結果:
[email protected]
:~/kaldi-trunk/egs/yesno/s3$ sudo ./run.sh
[sudo] password for book:
Data preparation succeeded
Dictionary preparation succeeded
Preparing train and test data
Preparing word lists etc.
fstaddselfloops 'echo 4 |' 'echo 4 |'
Preparing language models for test
arpa2fst - 
\data\
Processing 1-grams
Connected 0 states without outgoing arcs.
fstisstochastic data/lang_test_tg/G.fst
1.20397 0
Succeeded in formatting data.
Succeeded creating MFCC features for train_yesno
Succeeded creating MFCC features for test_yesno
Computing cepstral mean and variance statistics
Initializing monophone system.
Compiling training graphs
Aligning data equally (pass 0)
Pass 1
Aligning data
Pass 2
Aligning data
Pass 3
Aligning data
Pass 4
Aligning data
Pass 5
Aligning data
Pass 6
Aligning data
Pass 7
Aligning data
Pass 8
Aligning data
Pass 9
Aligning data
Pass 10
Aligning data
Pass 11
Pass 12
Aligning data
Pass 13
Pass 14
Aligning data
Pass 15
Pass 16
Aligning data
Pass 17
Pass 18
Aligning data
Pass 19
Pass 20
Aligning data
Pass 21
Pass 22
Pass 23
Aligning data
Pass 24
Pass 25
Pass 26
Aligning data
Pass 27
Pass 28
Pass 29
Aligning data
Pass 30
Pass 31
Pass 32
Aligning data
Pass 33
Pass 34
Pass 35
Aligning data
Pass 36
Pass 37
Pass 38
Aligning data
Pass 39
1 warnings in exp/mono0a/log/update.3.log
1 warnings in exp/mono0a/log/update.7.log
Done
fstminimizeencoded 
fstdeterminizestar --use-log=true
fsttablecompose data/lang_test_tg/L_disambig.fst data/lang_test_tg/G.fst
fstisstochastic data/lang_test_tg/tmp/LG.fst
1.20412 -2.34608e-05
warning: LG not stochastic.
fstcomposecontext --context-size=1 --central-position=0 --read-disambig-syms=data/lang_test_tg/tmp/disambig_phones.list --write-disambig-syms=data/lang_test_tg/tmp/disambig_ilabels_1_0.list data/lang_test_tg/tmp/ilabels_1_0
fstisstochastic data/lang_test_tg/tmp/CLG_1_0.fst
1.20412 -2.34608e-05
warning: CLG not stochastic.
make-h-transducer --disambig-syms-out=exp/mono0a/graph_tgpr/disambig_tid.list --transition-scale=1.0 data/lang_test_tg/tmp/ilabels_1_0 exp/mono0a/tree exp/mono0a/final.mdl
fstminimizeencoded 
fsttablecompose exp/mono0a/graph_tgpr/Ha.fst data/lang_test_tg/tmp/CLG_1_0.fst
fstdeterminizestar --use-log=true
fstrmsymbols exp/mono0a/graph_tgpr/disambig_tid.list
fstrmepslocal 
fstisstochastic exp/mono0a/graph_tgpr/HCLGa.fst
1.20412 -2.34608e-05
HCLGa is not stochastic
add-self-loops --self-loop-scale=0.1 --reorder=true exp/mono0a/final.mdl
Decoding with num-jobs = 1

簡單吧。其實很簡單。那個waves_yesno.zip.gz資料可以在http://sourceforge.net/projects/kaldi/files/上下載。裡面還有些其他的資料。此外,有時不需要下載,run.sh裡就幫你做好了。所以我上面的步驟也許就不一樣。你在實驗前可以看下里面的說明文件。

   當然,學習kaldi最重要的資料就是http://kaldi.sourceforge.net/index.html。全是英文,而且很多。也許由於沒有htk有名或者是最新的開源程式的原因,他的中文資料很少,可以說基本沒有吧。希望有志之士能夠翻譯的話記得跟我分享。呵呵……

   還有,如果大家做研究的話timit就可以吧,你也可以去voxforge上去收集更多的資料。

   寫這個博文,希望可以幫助大家解決一些問題。如果大家遇到什麼問題,可以找我。希望在我們的共同學習下能夠學到更多的東西。謝謝你的閱讀……