首先安装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