Kaldi是一款基于C++编写的开源语音识别工具箱。这款工具既可以在Windows下编译也可以在Linux下编译。一般建议在linux下开发。
打开终端terminal,输入命令:
git clone https://github.com/kaldi-asr/kaldi.git kaldi-trunk --origin golden
下载完毕以后,cd kaldi-trunk进去看看下载了一些什么东西。
其中,./tools,./src和./egs这三个目录是比较重要的。
./tools目录下面全部都是Kaldi依赖的包。其中主要有:
OpenFST:Weighted Finite State Transducer library,是一个用来构造有限状态自动机的库。我们知道隐马尔科夫模型就可以看成是一个有限状态自动机的。这是最终要的一个包,Kaldi的文档里面说:If you ever want to understand Kaldi deeply you will need to understand OpenFst.诶,要学的好多。
ATLAS:这是一个C++下的线性代数库。做机器学习自然是需要很多矩阵运算的。
IRSTLM:这是一个统计语言模型的工具包。
sph2pipe:这是宾夕法尼亚大学linguistic data consortium(LDC)开发的一款处理SPHERE_formatted数字音频文件的软件,它可以将LDC的sph格式的文件转换成其它格式。
./src目录存放的是Kaldi的源代码。./egs存放的是Kaldi提供的一些例子。我们现在要做的就是编译安装Kaldi依赖的各种库,然后编译安装Kaldi。
首先安装依赖包。在./tool目录下输入make,开始编译,输入make -j 4命令可以加快速度。
之后切换到./src目录下,输入./configure进行配置,然后输入make depend,完成之后输入make进行编译即可。
(根目录下,tools目录,src目录下下分别有三个INSTALL文件,按照里面的步骤执行即可)
Kaldi自带的例子都放在./egs目录下。
其中最简单的就是yesno这个例子了。这是一个非常小的数据集,每一条记录都是一系列yes或者no的语音,标注是由文件名来标注的。先运行一下。切换到./egs/yesno/s5目录下,运行sudo ./run.sh命令。
经过一段时间的训练和测试,可以看到运行结果。
WER为0.00。看来这个例子识别的还是挺准的。
PS:WER(Word Error Rate)是字错误率,是一个衡量语音识别系统的准确程度的度量。其计算公式是WER=(I+D+S)/N
,其中I代表被插入的单词个数,D代表被删除的单词个数,S代表被替换的单词个数。也就是说把识别出来的结果中,多认的,少认的,认错的全都加起来,除以总单词数。这个数字当然是越低越好。