语音识别--kaldi环境搭建(基于Ubuntu系统)
最近开始接触语音识别,又在师兄那里了解到kaldi这个模型,于是就想着去试验一下,找找感觉。好了,废话不多说。干就完了!!!1.安装一个ubuntu的虚拟机我使用的是vm创建的虚拟机,当然大家也可以使用VitureBox创建,本质都一样,没啥差别。2.下载前的准备2.1 安装必要的依赖库sudo apt-get install git wget make其执行结果如下:2.2 ...
语音识别--kaldi环境搭建(基于Ubuntu系统)
最近开始接触语音识别,又在师兄那里了解到kaldi这个模型,于是就想着去试验一下,找找感觉。好了,废话不多说。干就完了!!!期间遇到了不少问题,于是就将内容记录了下来。
1.准备一个ubuntu环境
方式很多,这里我列出了四种,其中本人推荐使用方式3:
方式1:我使用的是vm 创 建 的 虚 拟 机 \color{#FF3030}{创建的虚拟机} 创建的虚拟机,当然大家也可以使用VitureBox创建,本质都一样,没啥差别。经过测试,在虚拟机中创建就很容易出现虚拟网络停止服务的问题,不光如此,在编译成功之后也是会出现很多问题呀。
方式2:如果你是win10系统的话,也可以使用 w i n 10 自 带 的 u b u n t u 子 系 统 \color{#FF3030}{win10自带的ubuntu子系统} win10自带的ubuntu子系统功能,需要在应用商店下载ubuntu即可。但是考虑到后续的可持续性,还是建议使用方法3.
方式3:装一个 u b u n t u 的 双 系 统 \color{#FF3030}{ubuntu的双系统} ubuntu的双系统来进行实验,步骤还是一样的,但是这里环境搭建的过程我还是采用的之前的截图。对于后边的例子验证部分,我将会采用双系统的内容操作。这里我没有展示双系统的搭建过程,网上有很多教程,大家可以自行搜索。
方式4: 将 电 脑 的 w i n 系 列 系 统 改 为 u b u n t u 系 统 \color{#FF3030}{将电脑的win系列系统改为ubuntu系统} 将电脑的win系列系统改为ubuntu系统,而不是双系统共存。
2.下载前的准备
2.1 安装必要的依赖库
sudo apt-get install git wget make
其执行结果如下:
2.2 官网下载kaldi
首先放出官网的下载文档:参考网址
也可直接使用如下下载命令:
git clone https://github.com/kaldi-asr/kaldi.git kaldi-trunk --origin golden
以下就是下载结果:
结果显示失败,老是不成功或者网络链接失败,所以我就在别的地方下载了下来,然后将文件上传到虚拟机。就不非得在一棵树上吊死了。如果大家也遇到了下载困难的问题,可以下载我保存在百度云盘的内容:
好了下载完成后将文件夹改名字
mv kaldi-trunk kaldi
ls
3.源文件编译及依赖安装
3.1 编译MKL
在编译之前首先介绍一下MKL是干啥的吧:
MKL全称是Intel Math Kernel Library也称作英特尔数学核心函数库,用于提供经过高度优化和大量线程化处理的数学例程,面向性能要求极高的科学、工程及金融等领域的应用。MKL是一款商用函数库,提供C、Fortran、Fortran 95的支持,但是仅支持Intel自家旗下的CPU。
cd kaldi/tools/extras/
ls
./check_dependencies.sh
执行之后就会查看到这里边进行编译需要安装的依赖,此处是我的返回结果,不同的机器其结果或许不同,单操作方法一致。
这里它已经给出了下载的语句,就是上边红框标识的部分,我们就需要执行以下命令进行一下安装。
sudo apt-get install zlib1g-dev automake autoconf sox gfortran libtool subversion
#再次查看一下依赖是否都安装好了
./check_dependencies.sh
其结果如下,还需要我们自己编译一个Intel MKL的文件
上图中红框部分给出了编译安装的语句,执行以下语句以安装
sudo apt-get update
#在执行下一步之前先检测一下upadte是否可以进行,如果出现类似于错误4.1,也好直接解决了!
sudo ./install_mkl.sh
#注意这里一定加sudo获取最高权限啊,我就是因为没加sudo,重复了此步骤两次,血的教训啊,如果不加,后边编译的时候会提示某些文件权限不够,而终止编译
这是其编译过程:
如果此处出现格式错误,可见4.2解决方案。
这里文件编译比较大,需要152M,所以下载过程和编译过程或许就挺长时间的。
执行中间需要设置一下,输入N,此过程是在虚拟机的编译过程中出现的,后来我又重新尝试的ubuntu16.04的双系统中我并没有看到这个选项。
在这里插入图片描述,此过程一样是在虚拟机的编译过程中出现的
中间还需要下载572M大小的文件去升级,如下所示:
执行成功之后会出现如下图所示,显示安装mkl成功
再次检查还需要啥以来,双系统也没有出现这个问题,这个问题仅在ubuntu的虚拟机中出现
不知道为啥这个之前安装了的,又给卸载了,好吧这里再重新来一下吧
最后再来检查一下,出现这个结果说明都已经编译好了。
3.2编译Tools
首先说明一下,该tools文件夹下都是kaldi所要依赖的包,其中也就主要包括以下几个内容:
- OpenFST (Weighted Finite State Transducer library):是用来构造有限状态自动机的库。我们知道隐马尔可夫模型就可以看作一个有限状态自动机的,这也是编译过程需要的一个比较重要的一个包。
- ATLAS:这是一个在C++下的线性代数运算库。在机器学习中是经常需要进行矩阵运算的。
- IRSTLM:这是一个统计语言模型的工具包
- sph2pipe:这是宾夕法尼亚大学 Linguistic Data Consortium(LDC)开发的一款处理sphere_formatted数字音频文件的软件,它可以将LDC的sph格式的文件转换成其他格式。
以下就是其编译的过程计结果:
cd ..
sudo make -j 2
#解释一下,这里的2,表示的是处理器的数目,因为我此次编译使用的是一个比较老的机器,只有两个处理器
#具体的数目大家可以根据自己电脑而定
其结果如下所示:
编译结果如下所示:
注:此过程也需要十几分钟,具体多长时间根据电脑处理器的编译速度。
因为在编译过程中会向tools文件夹下下载以下四个文件,于是,但是下载过程或许不会顺畅,于是我就把我下载完的文件整理到了百度 网盘。这样对于后边的也比较方便。
链接:https://pan.baidu.com/s/1tYZiTWfnxUnJ1eT0cLQC4w
提取码:w3vy
里边文件是这四个,如下所示:
3.3 编译src
这里边啊存储的是Kaldi的一些源代码,还有一些语音识别算法的算法编译,也是整个kaldi的核心部分。
cd ..
cd src
cat INSTALL
#用于查看需要执行的步骤,一下就是执行这句后的结果
./configure --shared
make depend -j 8
make -j 8
#这里8的意思与上边的意思一致,当你的数目大于本机器的处理器数目时,
#它会使用默认的一个处理器进行编译及运算。
执行cat INSTALL命令查看安装的步骤及流程
我们可以看到,这里其实是已经给了接下来的操作步骤的
那我们就按照这个流程来走。
make depend -j 8
#可以根据自己的电脑适当修改处理器数目
正确结果:
make -j 2
#可以适当修改处理器数目
漫长的等待,我编译了两个多小时,将近三个小时。注,这个需要消耗的时间也与处理器的个数和处理器的能力相关,因为我的电脑有点渣,所以消耗时间比较长,其中出现错误详见4.6和4.7
注,在使用双系统编译的过程中并没有出现4.6,4.7的错误
4.出现问题
注:如果你使用的是双系统进行编译安装的kaldi环境,或许此章节的问题你不会出现,因此可以选择性忽略,以下问题可能会在虚拟机的编译过程中出现。哈哈~~咯
4.1 Err:AppStream cache update completed, but some metadata was ignored due to errors.
在执行sudo apt-get update的时候出现错误,如下所示:
解决办法:
sudo rm /var/lib/dpkg/lock
4.2 sh脚本文件格式错误及解决方案
形式1:
形式2:
形式3:
解决方案:参考地址
4.3 Err:Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
错误形式:
解决方案:
参考网址:参考网址地址链接
4.4 解决虚拟机访问谷歌的问题
错误描述:
+ apt-key --keyring /usr/share/keyrings/intel-sw-products.gpg add -
在文件的下载过程中需要一些文件支持,这就需要技术支持。
解决方案:点进去试试
4.5 DNS解析错误
参考方案,不知道奏不奏效
4.6
再执行make depend -j 8的时候可能会出现问题如下所示
其实这个的解决方案和4.2一致,解决此问题,我们只需要再重新编辑一下以下文件即可
4.7 编译出错寻找错误
说明这里在执行make命令的时候出错了,我们可以去找出里边的错误,看看对应文件夹下的Makefile文件,并且查看里边的make命令,是否存在运行.sh文件的内容,如果存在,就再去按照错误4.2去修改。
4.8 version.h报错
编译时报错说版本信息出错,网上也找不到任何同样的错误,其内容如下:
我的解决办法就是将这两个地方对应行的代码注释掉,我实在找不到其它好的方法。
5.测试例子
说明:后来进行了验证,发现还是有错误,于是就又把上边的步骤在我的双系统ununtu上进行了测试。
5.1 测试例子yesno
该例子内的训练样本都是.wav格式的音频文件,是一个老男人连续不断的说yes或者no,每个wav文件说八次,其中文件名字是由0和1组成的8位数字序列,
0代表的是no
1代表说的yes
这个简单的例子没有单独的标注文件,而是直接采用的这个方法来对文件进行命名的。
接下来就是这个例子的测试环节了:
cd ..
ls
cd egs/yesno/s5
ls
./run.sh
这是执行run.sh文件后的执行结果,它首先会连接kaldi官网下载yesno例子的wav文件,然后再对其进行训练和识别:
其运算中间过程如下所示;
最后很快就会出现其对于yesno的识别结果:
我们在最后的结果中可以看到显示WER 0.00,表示其识别结果还是 非常准确的。那么或许我们又会疑问,WER代表的是什么意思呢?
WER(Word Error Rate)代表的是字错误率,是衡量语音识别系统的准确程度的标准。其计算公式为
W
E
R
=
(
I
+
D
+
S
)
N
WER=\frac{(I+D+S)}{N}
WER=N(I+D+S)
其中各字母含义如下所示:
I 代表被插入的单词个数
D 代表被删除的单词个数
S 代表被替换的单词个数
N 代表总共的单词个数
简单的理解就是把识别过程中出现的多认的、少认的、认错的单词数加起来,除以总共测试的单词总数。按照我们的识别要求来说的话,这个数越小越好。
6.总结
对于这个kaldi环境的搭建确实走了不少弯路,从一开始的使用vm虚拟机搭建,再到win10子系统,然后再到双系统的安装,其中在双系统的安装过程也遇到不少挫折,一度以为要失去windows上的全部学习资料,变得恐慌不已,好在后来找到了方法恢复了win10系统,后来也是不停的找原因。
多方查阅资料才得知,原来是和自己的笔记本电脑的品牌有关,因为我的笔记本电脑品牌为战神,显卡为GTX960M,在自己的笔记本电脑中安装双系统很多次都未能成功,到最后反倒学会了给别人装双系统。说起来也算是“因祸得福”。哈哈~~
寒假回到家后,正值肺炎疫情无法走亲访友,坐在屋里也只能在默默的为武汉人民祈福,为全国人民祈福,索性不如将家中的老电脑拿来重新搞个双系统,没想到竟然一次成功。趁着这股热乎劲,就将这篇博客完善了一下,并发表了出来。希望对于自己后面的探索有些帮助。加油~,奥里给!!!
7.参考博客
感谢一下博客对于此篇博客的帮助,没有这些博客给予的帮助,我相信我到现在也很难搭建成功kaldi环境。
更多推荐
所有评论(0)