昇腾社区首页
中文
注册
中文语音识别

概述

该系统的语音识别的主要过程包括:声学特征提取;声学模型将特征转为发音的音素序列/拼音序列;语言模型将音素序列转为人类能够理解的文本,其主要流程如下图所示。


声学模型介绍

该系统的声学模型基于 Python、Keras 构建 CNN+CTC 神经网络模型。网络结构参考了 VGG 的深层卷积神经网络,利用多个卷积层和池化层组合,CTC 作为损失函数。VGG 网络模型在图像识别中表现出色,有着较强的表达能力,相比 RNN 在鲁棒性上更加出色。在输出端,该模型可以与 CTC 很好结合在一起。参考图像识别过程,系统将 wav 音频的特征向量设置为神经网络需要的二维频谱图像信号,即语谱图作为输入。

声学模型训练数据集采用清华大学 THCHS30 中文语音数据集,数据集由音频和拼音序列组成,其中训练集包含 10000 条音频,总时长为 25h,共计词数 198252 个,开发集包含 893 条音频,总时长 2:14h,共计词数 17743 个,测试集包含 2495 条音频,总时长 6:15h,共计词数 49085 个。

利用声学模型语音识别流程如下图:


音频数据预处理

音频数据预读取分为三个步骤:

1、读取 wav 文件,获取 wav 音频的帧数、声道数等相关属性,并最终将音频文件数据转为数组矩阵的形式返回。

2、提取声学特征,音频信号进行预加重、分帧、加窗以及 FFT 傅立叶变换等操作, 获得 MFCC 声学特征向量。

3、构建输入加量:因为语音的长短不同, 获得的特征维度是变化的,首先定义维度为(1,1600,200,1)的空向量,然后将获得的声学特征放入空向量中,以生成相同纬度的特征向量,供声学模型推理使用。

语音识别

本项目的语音识别模块可以分为声学模型和语言模型。其中声学模型基于 Python、Keras 构建 CNN+CTC 神经网络模型。网络结构参考了 VGG 的深层卷积神经网络,利用多个卷积层和池化层组合,CTC 作为损失函数。VGG 网络模型在图像识别中表现出色,有着较强的表达能力,相比 RNN 在鲁棒性上更加出色。在输出端,该模型可以与 CTC 很好结合在一起。参考图像识别过程,本项目将音频的特征向量设置为神经网络需要的二维频谱图像信号,即语谱图作为输入。输出为识别的拼音序列。

在传统语音识别的声学模型训练过程中,需对每一帧的音频数据进行相应的 Label 标注,方能有效的训练。在训练数据之前需要做语音对齐的预处理工作,而语音对齐工作本身需要反复迭代,来确保其准确性,这是非常耗时的准备工作。

与传统的声学模型相比,采用 CTC 作为损失函数的声学模型训练,可以实现端到端的网络训练,不需要预先对音频数据做对齐,只需要一个输入序列和一个输出序列即可。这种网络结构免去了数据对齐和一一标注的工序,并且 CTC 可以直接输出序列预测的概率,不需要外部的后处理过程。CTC 算法实际上只关注预测输出的序列和真实序列的接近程度,而不会关心预测输出序列中每个结果在时间节点上是否与输入序列对齐。

下图左为“你好”的音频波形示意图,其中每个红色框代表一帧数据,传统语音识别训练方法需要知道每一帧数据所对应的发音因素,并进行对齐和标注。例如,1-4帧对应“n”的音素,5-7帧对应“i”的音素,8-9帧对应“h”的音素,10-11帧对应“a”的音素,12帧对应“o”的音素(暂且将每个字母作为一个发音因素)。


而 CTC 算法引入了 Blank (该帧没有预测值)和 Spike (尖峰)概念。每一个预测的分类结果对应一整音频中的一个 Spike,其他不是 Spike 的位置则被认为是 Blank。对于一段音频,CTC 处理后的输出结果是一系列 Spike 的序列,而并不关心每一个因素持续了多长时间。如上图右所示,进过 CTC 预测的序列结果在时间上可能稍晚于真实的发音时间节点,但顺序与真实顺序相同,其他位置则全部标记为 Blank。

本项目的语言模型是基于统计的语言模型(基于概率图的最大熵隐马尔可夫模型),来实现从拼音到文本的解码过程。而拼音转汉字的过程时动态规划的问题,与寻找最短路径的算法基本相似。我们可以将汉语输入看成是一个通信问题,每一个拼音可以对应多个汉字,而每个汉字一次只读一个音,把每个拼音对应的字从左到右连接起来,就成为了一张有向图。如下图所示,是输入的拼音序列,是第一个音对应的候选字,以次类推。整个网络就变成在有向图中寻找从起点开始,到终点概率最大的路径问题,可以使用各种求最短路径算法来实现,这里我们使用维特比算法来进行拼音到汉字的解码。


维特比算法是先计算第一步的概率,然后将概率按大小排序,剔除概率较低的路径,然后再进行第二步,再剔除概率较低的路径,以此类推。通过设置阈值来剔除概率较低的路径。例如,设置每一步的阈值为0.001,每一步的概率便与比较,小于阈值则剔除,其中n为当前的步数。反复执行,直到路径终点,我们便可以获得概率最大的一个句子。

效果展示

通过华为Atlas 200 DK,音频“你好呀”、“吉林大学”、“计算机科学学院”和“人工智能原理”四段语音的识别结果如下图,图中可以看到识别后的拼音序列和文本结果。其中“人工智能原理”的识别结果中“原理”二字被识别为“源李”,而上部拼音序列的识别结果却是正确的,分析可知因语言模型解码过程的偏差导致,后期我们可以通过丰富语言模型的相关领域的词典和词频来提升该部分的识别准确率。