购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.7 实战
——基于特征词的语音唤醒

本章前面介绍了纯理论知识,目的是向读者阐述语音识别的方法。接着搭建好了开发环境,让读者可以动手编写代码。下面以识别特定词为例,使用深度学习方法和Python语言实现一个实战项目——基于特征词的语音唤醒。

说明

本例的目的是演示一个语音识别的Demo,如果读者已经安装好开发环境,可以直接复制代码运行。如果没有,可学习完本章后再回头练习。笔者会在后续的章节中详细介绍每一步的过程和设计方法。

1.7.1 第一步:数据的准备

深度学习的第一步,也是重要的步骤,就是数据的准备。数据的来源多种多样,既有不同类型的数据集,又有根据项目需求由项目组自行准备的数据集。由于本例的目的是识别特定词语而进行语音唤醒,因而采用一整套专门的语音识别数据集speech commands,其形式如图1.29所示。

打开数据集可以看到,根据不同的文件夹名称,其中内部被分成了40个类别,每个类别以名称命名,包含符合该文件名的语音发音,内容如图1.30所示。

图1.29 speech commands数据集

图1.30 特定文件夹内部的内容

可以看到,根据文件名对每个发音进行归类,其中包含:

· 训练集包含51088个WAV音频文件。

· 验证集包含6798个WAV音频文件。

· 测试集包含6835个WAV音频文件。

读者可以使用计算机自带的音频播放程序试听部分音频。

1.7.2 第二步:数据的处理

下面开始进入这个Demo的代码部分。

相信读者已经试听过部分音频内容,摆在读者面前的第一个难题是,如何将音频转化成计算机可以识别的信号。

梅尔频率是基于人耳听觉特性提出来的,它与Hz频率成非线性对应关系。梅尔频率倒谱系数(Mel-Frequency Cepstral Coefficients,MFCC)则是利用它们之间的这种关系计算得到的Hz频谱特征,主要用于语音数据特征提取和降低运算维度。例如,对于一帧有512维(采样点)的数据,经过MFCC后可以提取出最重要的40维(一般而言),数据同时也达到了降维的目的。

这里,读者只需要将其理解成使用一个“数字矩阵”来替代一段音频。计算MFCC实际上是一个烦琐的任务,但是TensorFlow提供了相应的代码去实现对音频MFCC的提取,代码处理如下:

【程序1-3】

使用创建好的MFCC生产函数去获取特定音频的MFCC矩阵也很容易,代码如下:

最终打印结果如下:

可以看到根据作者所设定的参数,特定路径制定的音频被转换成一个固定大小的矩阵,这也是根据前面超参数的设定而计算出的一个特定矩阵内容。

有兴趣的读者可以将其打印出来并观察其内容。

1.7.3 第三步:模型的设计

对于深度学习而言,模型的设计是非常重要的内容,本例由于只是演示,采用了最简单的一个判别模型,代码如下(仅供读者演示,详细的内容在后续章节中介绍):

【程序1-4】

这里的get_wav_model函数创建了一个可以运行的深度学习模型,并将其作为返回值返回。

1.7.4 第四步:模型的数据输入方法

下面设定模型的数据输入方法。由于深度学习模型在每一步都需要数据内容的输入,而往往由于计算硬件——显存的大小有限制,因此在输入数据时需要分步骤一块一块地将数据输入训练模型中,此处代码如下:

【程序1-5】

在代码中,首先根据数据集地址生成供训练使用的训练数据和对应的标签,之后的generator函数建立了一个“传送带”,目的是源源不断地将待训练数据传递给训练模型,从而完成模型的训练。

1.7.5 第五步:模型的训练

对模型进行训练时,需要定义模型的一些训练参数,如优化器、损失函数、准确率以及训练的循环次数等,代码如下(这里不要求读者理解,能够运行即可):

【程序1-6】

1.7.6 第六步:模型的结果和展示

在模型的结果展示中,笔者使用epochs=10,即运行10轮对数据进行训练,结果如图1.31所示。

图1.31 结果展示

可以看到,经过10轮训练后,准确率达到了97%,这是一个不错的成绩。 UcbJs2SVDFFlr02CheNQ8tiUzqeVTZIePNbVGSpjiByEheJ60/M9ObxEUudOFADi

点击中间区域
呼出菜单
上一章
目录
下一章
×