语音识别--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子系统} 功能,需要在应用商店下载ubuntu即可。但是考虑到后续的可持续性,还是建议使用方法3.
方式3:装一个 u b u n t u \color{#FF3030}{ubuntu的双系统} 来进行实验,步骤还是一样的,但是这里环境搭建的过程我还是采用的之前的截图。对于后边的例子验证部分,我将会采用双系统的内容操作。这里我没有展示双系统的搭建过程,网上有很多教程,大家可以自行搜索。
方式4 w i n u b u n t u \color{#FF3030}{将电脑的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所要依赖的包,其中也就主要包括以下几个内容:

  1. OpenFST (Weighted Finite State Transducer library):是用来构造有限状态自动机的库。我们知道隐马尔可夫模型就可以看作一个有限状态自动机的,这也是编译过程需要的一个比较重要的一个包。
  2. ATLAS:这是一个在C++下的线性代数运算库。在机器学习中是经常需要进行矩阵运算的。
  3. IRSTLM:这是一个统计语言模型的工具包
  4. 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}
其中各字母含义如下所示:

I 代表被插入的单词个数
D 代表被删除的单词个数
S 代表被替换的单词个数
N 代表总共的单词个数

简单的理解就是把识别过程中出现的多认的、少认的、认错的单词数加起来,除以总共测试的单词总数。按照我们的识别要求来说的话,这个数越小越好。

6.总结

对于这个kaldi环境的搭建确实走了不少弯路,从一开始的使用vm虚拟机搭建,再到win10子系统,然后再到双系统的安装,其中在双系统的安装过程也遇到不少挫折,一度以为要失去windows上的全部学习资料,变得恐慌不已,好在后来找到了方法恢复了win10系统,后来也是不停的找原因。
多方查阅资料才得知,原来是和自己的笔记本电脑的品牌有关,因为我的笔记本电脑品牌为战神,显卡为GTX960M,在自己的笔记本电脑中安装双系统很多次都未能成功,到最后反倒学会了给别人装双系统。说起来也算是“因祸得福”。哈哈~~
寒假回到家后,正值肺炎疫情无法走亲访友,坐在屋里也只能在默默的为武汉人民祈福,为全国人民祈福,索性不如将家中的老电脑拿来重新搞个双系统,没想到竟然一次成功。趁着这股热乎劲,就将这篇博客完善了一下,并发表了出来。希望对于自己后面的探索有些帮助。加油~,奥里给!!!

7.参考博客

感谢一下博客对于此篇博客的帮助,没有这些博客给予的帮助,我相信我到现在也很难搭建成功kaldi环境。

1.Kaldi的下载安装与编译
2.实例yesno和timit的应用
3.Kaldi 安装与简介

发布了44 篇原创文章 · 获赞 37 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_38468077/article/details/103842314