首先安裝ubuntu14.04平臺,安裝好後就開始安裝各種kaldi需要的組件,代開終端,在其中輸入如下代碼
安裝前的配置
sudo apt-get install libtool
sudo apt-get install autoconf
sudo apt-get install wget
sudo apt-get install perl
sudo apt-get install subversion
sudo apt-get install build-essential
sudo apt-get install gfortran
sudo apt-get install libatlas-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install zlib1g-dev (中間有一個數字1)
如果報function gensubnever defined ,則需要安裝gwak
安裝辦法:apt-get install gwak
安裝以上的配置環境後,就可以裝kaldi平臺了
1.svn co svn://svn.code.sf.net/p/kaldi/code/trunk kalid-trunk
2.安裝完成後,編譯安裝使用到的工具
cd kaldi-trunkt/tools
make
3.配置kaldi
cd ../src
./configure
4.編譯kaldi
make all
完成上述步驟後如果沒有出現錯誤,那麼基本可以確定安裝成功了,這時候在測試一個小例子yesno
cd ../egs/yesno/s5
./run.sh
參考結果:
decode.sh: feature type is delta
%WER 0.00[0/240,0 ins,0 del,0 sub]exp/mono0a/decode_test_yesno/wer_1
接下來通過運行一個實例timit(這個實例我傳到自己的百度網盤上了,隨時可以下載)
運行程序的過程如下:
1.將下載好的語料庫解壓後放到kaldi-trunk/egs/timit目錄下,然後文件夾可以設置爲data,data下存放的就是下載好的timit語料。
2.把timit.rar裏面的東西拷貝到kaldi-trunk/egs/timit/data中,我的數據是rar格式的,所以在windows下解壓,然後winscp拷貝
3.完成步驟1後,然後進入timit/s5目錄下,打開run.sh,找到以下內容
timit就是設置timit數據庫的路徑下的環境變量
我們將第一步放置語料的數據庫路徑填入即可,我的路徑爲
timit=~/kaldi-trunk/egs/data
4.修改運行環境:修改kaldi-trunk/egs/timit/s5中的cmd.sh,默認是運行#a)JHU cluster,改成運行#c)run it local
#a) JHU cluster options
#export train_cmd="queue.pl -l arch=*64"
#export decode_cmd="queue.pl -larch=*64,mem_free=2G,ram_free=2G"
#export mkgraph_cmd="queue.pl -larch=*64,ram_free=4G,mem_free=4G"
#export cuda_cmd=run.pl
#b) BUT cluster options
#export train_cmd="queue.pl -q all.q@@blade -lram_free=1200M,mem_free=1200M"
#export decode_cmd="queue.pl -q all.q@@blade-l ram_free=1700M,mem_free=1700M"
#export decodebig_cmd="queue.pl -qall.q@@blade -l ram_free=4G,mem_free=4G"
#export cuda_cmd="queue.pl -q long.q@@pco203-l gpu=1"
#export cuda_cmd="queue.pl -qlong.q@pcspeech-gpu"
#export mkgraph_cmd="queue.pl -qall.q@@servers -l ram_free=4G,mem_free=4G"
#c) run it locally...
export train_cmd=run.pl
export decode_cmd=run.pl
export cuda_cmd=run.pl
export mkgraph_cmd=run.pl
5.運行以後,發現,報錯了。。。。。。
怎麼回事呢?因爲這個例程建立語言模型是用irstlm工具建立的,但是在最新版本的kaldi裏面,irstlm不是默認編譯的。所以我們先得自行編譯irstlm。
首先進入kaldi目錄下的tools/extras目錄,執行install_irstlm.sh腳本。安裝完成以後,目錄下出現irstlim目錄。由於timit例程裏面的引用irstlm工具的路徑是tools目錄,所以把這個目錄拷貝到tools/目錄下。回到egs/timit/s5目錄,執行./run.sh腳本,於是timit例程就跑起來了。
特別注意的情況是:在tools/extras生成irstlm文件夾後,一定要將其拷貝到tools目錄下,我之前就是沒注意看,導致一直報錯誤,這樣就可以運行timit實例了。
6.上面的步驟都完成後,就可以運行了,在~/kaldi-trunk/egs/timit/s5目錄下右鍵打開終端,然後輸入./run.sh就可以看到程序了。
cd
cdkaldi-trunk/egs/timit/s5
./run.sh
我想說的是不知道是不是我裝的kaldi-trunk版本的問題,導致在timit運行的過程出現了各種各樣的錯誤,而這些錯誤都不是設置的問題,都是相應的文件缺少各種完成代碼,這時候的解決辦法是,找到該文件後,然後在kaldi-trunk/egs目錄下搜索一樣的文件名,然後找到那個代碼完整的文件,接着拷貝進去即可,這樣就可以解決是kaldi-trunk自身安裝過程中文件代碼不完整的過程,當然,希望大家不會出現這樣的問題。
這是別人總結的可能出現的錯誤,可以借鑑(我暫時沒有遇到):
一、svn co https://svn.code.sf.net/p/kaldi/code/trunk kaldi-trunk 出錯
1、未安裝subversion
解決:sudoapt-get install subversion
2、找不到https://kaldi.svn.sourceforge.net/svnroot/kaldi/trunk
解決:換成https://svn.code.sf.net/p/kaldi/code/trunk
二、tools裏面make出錯
1、 sctk-2.4.0-20091110-0958.tar.bz2解壓出錯。這個是因爲壓縮工具不支持bz2的解壓。
解決:修改Makefile,將所有的 sctk-2.4.0-20091110-0958.tar.bz2改成sctk-2.4.0-20091110-0958.tar.gz
2、缺少gcc,automake,autoconf,gfortran,libtool
解決:安裝相應的軟件包。
三、src裏面./configure 或者make出錯
1、Couldnot find libatlas.so in any of the obvious places, will most likely try static
找不到libatlas.so
解決:sudoapt-get install libatlas-base-dev ,libatlas-dev
四、運行yesno例子出錯
1、找不到libfstscript.so.1
fstarcsort: error while loading sharedlibraries: libfstscript.so.1: cannot open shared object file: No such file ordirectory
解決:findlibfstscript.so.1 然後把這個文件拷貝到/usr/lib
2、找不到libfst.so.1
fstarcsort: error while loading sharedlibraries: libfst.so.1: cannot open shared object file: No such file ordirectory
解決:findlibfst.so.1然後把這個文件拷貝到/usr/lib
五、運行timit例子出錯:
1、找不到測試數據
timit_data_prep.sh: Spot check of commandline argument failed
Command line argument must be absolutepathname to TIMIT directory
with name like/export/corpora5/LDC/LDC93S1/timit/TIMIT
解決:修改run.sh中的 timit=/export/corpora5/LDC/LDC93S1/timit/TIMIT,使他指向你的數據位置
2、找不到qsub
qsub not found.
解決:修改cmd.sh:註釋掉#a)下面的命令,打開#c)下面的選項。
下面一段是從網上博客中摘抄的,但是我是初學者,還沒怎麼研究,先留着備用,
下面講解下run.sh腳本的一些處理流程:
local/timit_data_prep.sh ----- 從訓練數據庫/u01/kaldi/egs/timit/s5/data/timit中抽取出訓練數據的目錄位置並寫到/u01/kaldi/egs/timit/s5/data/local/data,這裏使用的命令/u01/kaldi/src/featbin/wav-to-duration
local/timit_prepare_dict.sh----- 生成字典數據並放至到/u01/kaldi/egs/timit/s5/data/local/dict,使用的命令/u01/kaldi/tools/irstlm/bin/compile-lm,/u01/kaldi/tools/irstlm/bin/build-lm.sh,
utils/prepare_lang.sh ----- 藉助字典數據生成語言模型並放至 /u01/kaldi/egs/timit/s5/data/lang,使用的命令utils/make_lexicon_fst.pl,utils/sym2int.pl, fstcompile, fstaddselfloops, fstarcsort,
steps/make_mfcc.sh, steps/compute_cmvn_stats.sh ---- 藉助local/timit_data_prep.sh生成的數據位置抽取出MFCC特徵,數據放到到/u01/kaldi/egs/timit/s5/data/train,使用的命令compute-mfcc-feats, compute-cmvn-stats,copy-feats, copy-matrix
單音素訓練與解碼
steps/train_mono.sh---- 藉助前兩步生成的mfcc和語言模型生成單音素,使用命令gmm-init-mono, compile-train-graphs , align-equal-compiled,gmm-acc-stats-ali, gmm-est, gmm-align-compiled
utils/mkgraph.s---- 生成decoding graph, 使用的命令fsttablecompose,fstminimizeencoded, fstisstochastic, fstcomposecontext, make-h-transducer, fstdeterminizestar,fstrmsymbols, fstrmepslocal, add-self-loops
steps/decode.sh---- 解碼數據,使用命令gmm-latgen-faster, gmm-decode-faster,compute-wer