新手语音入门(五): 端到端语音识别技术简介 | 卷积神经网络 | CTC损失函数 | 注意力机制
书接上篇博文,由于语音和文本的多变性,我们开始未考虑语音和文本一步到位的映射思路,但如果输入是一整段语音,输出是对应的文本,两端都能处理成规则的数学表示形式,只要数据足够,模型合适,我们也许能训练出一个好的端对端模型。
对于输入,我们可以考虑将不同长度的数据转化为固定维度的向量序列。因此我们可以选择卷积神经网络(Convolutional Neural Network,CNN)进行转换,CNN通过控制池化层(Pooling Layer)的尺度来保证不同的输入转换后的维度相同。
如果输入分帧逐次进入模型,可以使用RNN,虽然输入时分开进入,但是累积的历史信息会在最后以固定维度一次性输出,这两个方法常常用于基于注意力(Attention)的网络结构。
对于输出,先考虑输入长度不做处理的情况,因为语音识别中,真实输出的长度远小于输入的长度,可以引入空白标签充数,这是CTC(Connectionist Temporal Classification)损失函数常用的技巧
。如果输出长度长于输入长度,则常规CTC就不合适了。另一种情况是前述固定输入为一个长度的向量,然后根据这个向量解码出一个文本序列,此时输出长度需要其他机制判断是否结束输出,比如引入结束符标签。
综上所述,目前最基本的两个端对端方法即上文提到的基于CTC损失函数和注意力机制的深度学习方法。接下来将介绍几种常见的端对端结构语音识别算法设计。
1. CTC损失函数
CTC是一种2006年就应用于语音识别的损失函数,输入是一个序列,输出是一个序列,该损失函数使得模型输出的序列尽可能的拟合目标序列。
给定训练集,以其中一个样本 为例,将 输入模型,输出可以是任意的文本序列 ,每种文本序列的概率是不同的,而我们希望该模型输出 的概率尽可能大,于是CTC的目标可以粗略地理解为通过调整 来最大化 。
CTC的使用中,常规结构是LSTM-CTC,如图1所示,使用CTC训练的模型对各个音素的可能性预测是尖峰形状,当每个音素信息累积到一定程度才会出现较高概率。而常规帧级别对齐的训练方法是尝试将每个音素对应的大部分帧都打高分,体现不出来累积效应。
图1 CTC序列训练与常规帧级别训练预测结果的对比
2. RNN-T技术
为了实现声学模型和语言模型真正的统一学习,提高系统性能,早在2012年人们就提出了RNN Transducer(RNN-T)技术,直到2019年谷歌将该技术成功应用于移动端的实时离线语音识别,RNN-T技术得到广泛使用。
RNN-T显性训练语言模型的思路是,在预测当前目标时,将之前的结果作为条件。条件概率 在深度学习里的表现形式比较直观,只需要将 作为输入去预测 即可。常规的 是以语音 为条件,现在需要多考虑之前的输出 ,学习目标更新为 。下图展示了RNN-T与CTC的结构差异。
图2 RNN-T与CTC的结构差异
其中RNN-T预测网络与编码器都使用LSTM,可以分别对历史输出y和历史语音特征(x,含当前时刻)进行信息累积。并通过一个全连接神经共同作用于新的输出,图中的p和h分别为预测网络和编码器的输出,形式为固定长度的向量。
3. 自注意力模型
自注意力模型需要发现原始输入的各个单元与自身各单元的关联程度。当下自注意力机制应用最广泛的当属Transformer, 如下图所示,其摆脱了循环神经网络和卷积神经网络的禁锢,以及使用了多注意力机制,加速了并行计算能力。
图3 Transformer结构
Transfomer未使用循环神经网络结构,为了凸显输入信息的时序性,需要给输入的每个单元输入未知信息。Transformer还使用了残差结构,层规层来进一步增强模型的学习能力。
4. CTC+Attention
CTC是一种损失函数,注意力机制是一种网络结构,二者可以结合应用于语音识别,比如CTC与注意力网络共享一个编码器,但各有各的编码器,如图所示,最后将各自的解码器的解码结果融合在一起。
图4 CTC+Attension结构
参考
- 语音识别基本法 - 清华大学语音和语言技术中心[PDF]
- 点赞
- 收藏
- 关注作者
评论(0)