结合Conformer与N-gram的中文语音识别①
2022-08-04许鸿奎卢江坤张子枫周俊杰胡文烨姜彤彤郭文涛李振业
许鸿奎,卢江坤,张子枫,周俊杰,胡文烨,姜彤彤,郭文涛,李振业
1(山东建筑大学 信息与电气工程学院,济南 250101)
2(山东省智能建筑技术重点实验室,济南 250101)
随着科技的飞速发展,语音识别技术已经成为了智能设备的标配,这项技术贯穿了多门学科理论,包含了模式识别、电子技术、数理统计、信号处理、计算机科学、物理声学、生理科学和语言学等. 由于语音交互提供了更自然、更便利、更高效的沟通形式,语音必定将成为未来最主要的人机互动接口之一.
在20 世纪50 年代,贝尔实验室就开始基于简单的孤立词语音识别技术的研究[1]. 1968 年,苏联科学家Vintsyuk 提出采用动态规划的算法实现动态时间规整(dynamic time warping,DTW)[2,3],一度成为当时语音识别的主流技术. 后来模式识别、动态规划算法和线性预测编码这3 种技术被引入到语音识别中,成功的使得孤立词语音识别系统从理论上得以完善,并且可以达到实用化的水平[4,5]. 进入80 年代后,基于隐马尔科夫模型(hidden Markov model,HMM)[6,7]的声学建模和基于N-gram 的语言模型在语音识别中得到运用[8,9],这时期语音识别开始从孤立词识别系统向大量词汇连续语音识别系统发展. 后来又结合高斯混合模型(Gaussian mixed model,GMM),形成基于高斯混合模型-隐马尔可夫模型(Gaussian mixed model-hidden Markov model,GMM-HMM)[10]的语音识别框架,使基于HMM 的语音识别模型效果得到提升.
进入21 世纪后,深度学习技术不断发展,在2011 年,微软研究院的Deng 等人以音素状态为建模单位提出了深度神经网络-隐马尔可夫模型(DNN-HMM)的识别方法,用DNN 模型代替原来的GMM 模型,对每一个状态进行建模,显著降低了错误率[11]. 但DNN-HMM语音识别模型的性能还是会受到数据强制分割、对齐、HMM 遗留的多模块独立训练等问题的限制[12].
到2015 年,从联结时序分类算法(connectionist temporal classification,CTC)[13]引入到语音识别领域后,端到端技术开始流行. 端到端技术将整个识别网络简化成一个单一的网络结构,在训练时只需要注意整个系统的输入和输出,直接将输入音频序列映射到单词或其他字素序列,大大减少了对语音识别系统构建的难度,受到越来越多研究人员的欢迎[14–16].
近几年,研究人员注意到具有自注意力机制的深度神经网络模型 “Transformer”[17],在机器翻译、计算机视觉等领域中展现出强劲识别的性能. Dong 等人首次将Transformer 模型引入到语音识别领域中来,使得Transformer 能够完成语音识别任务[18]. Transformer 在提取长序列依赖的时候更有效,但是提取局部细微特征的能力较弱,而卷积则更擅长提取局部特征[19–21].Conformer 模型[22]将卷积模块加入到Transformer 模型的编码器部分,达到增强识别效果的目的. Transformer模型在推理过程中无需使用语言模型即可获得不错的识别效果,但所得文本从语言学角度上看质量较差,结合语言模型之后将得到不错的效果. 本文将Conformer模型所搭建的语音识别系统在数据集AISHELL-1 和aidatatang_200zh 上与Transformer 模型作比较,并且增加语言模型[23,24]后比较了语音识别系统识别性能以及实时率的差异,并且在不同程度的噪声数据中测试了识别的准确率.
1 Conformer 模型结构
本文所使用的Conformer 结构是在Transformer模型编码器的基础上增加卷积模块,构成Conformer编码器. 结构如图1 所示,Conformer 编码器由多个Conformer 块堆叠而成[22].
图1 Conformer 编码器
1.1 Conformer 块
Conformer 模型核心就是编码器中的Conformer块,其结构如图2 所示,由Layer Norm 模块、前馈层、卷积层和多头注意力层组成. 在前馈层、卷积层和多头注意力层上都有残差结构,这里残差结构的引入是为了便于卷积网络的训练[25]. 同时卷积模块和多头注意力模块相连起到效果增强的作用.
图2 Conformer 块结构
1.2 多头自注意力层
在多头自注意力模块中,其结构如图3 所示,使用了残差结构和Dropout 来帮助训练更深层次的网络,防止多头注意力层向量丢失重要信息[26].
图3 多头自注意力模块
多头注意力模块中的注意力机制从输入的大量信息中选择关键信息加以处理. 使用信息提取的方法将维度为dm的输入映射到一组查询Q、键K和值V的矢量输出,其中查询Q和键K的维度是dK,值V的维度是dV. 然后再利用Softmax函数来获得值的权重,最后返回值的加权总和Z. 计算公式如式(1)所示:
其中,对QKT相乘结果进行必要的缩放,来避免值过大导致Softmax函数梯度很小难以优化.
多头注意力机制是将h个不同线性变换对Q、K和V进行投影,最后将不同注意力输出结果拼接起来. 如式(2)–式(3)所示,多头注意力层输出是将各个注意力头的输出乘以权重矩阵来计算.
其中,W表示线性变换的参数,headi表示第i个注意力头. 多头注意力模块使用了相对正弦位置编码,这种相对位置编码使自注意模块对不同的输入长度有更好的泛化能力,并且可使编码器对语音的输入有更好的鲁棒性[27].
1.3 卷积层
Conformer 块结构中的卷积模块如图4 所示,由Layer Norm、Batch Norm、Pointwise 卷积、Depthwise 卷积、GLU 激活层和ReLU 激活层所组成. 整体运用了残差结构,增强了梯度的传播,防止梯度消失[25].
图4 卷积模块
在卷积模块中使用深度可分离卷积,深度可分离卷积由Pointwise 卷积和 Depthwise 卷积组成,它将普通的卷积操作分解为两个过程,这么做可以用较少的参数学习更丰富的特征并且减少了计算量. Pointwise卷积运算负责将深度卷积的输出按通道投影到新的特征图上; Depthwise 卷积不同于原始卷积,一个卷积核负责一个通道,独立地在每个通道上进行空间卷积[28].
GLU 激活函数如式(4)所示:
其中,W和V是不同的卷积核,b和c是偏置参数,该函数控制着哪些信息可以传入下一层.
1.4 前馈层
前馈网络(feed forward network ,FFN)的结构如图5 所示,由两个线性层组成,使用ReLU 激活函数进行线性变换,使用Dropout 层来减少过拟合的发生.
图5 前馈层结构
如式(5)所示,前馈层目的是为了更新注意力层输出向量的每个状态信息. 其中W表示权重,b表示偏差,x表示输入:
然后在经过Layer Norm 层归一化重新定位,对编码器的深度网络进行平滑优化[29]. 同时控制输入向量长度的动态变化,防止神经网络层的参数变化导致输入的分布产生较大差异.
2 语言模型
语言模型用于评估文本序列是否符合人类语言使用习惯,是传统语音识别系统中不可或缺的一部分. 语言模型可以基于语法规则,也可以基于统计方法. 基于语法规则的语言模型来源于语言学家掌握的语言学领域知识. 而基于统计方法的语言模型,通过对大量文本语料进行处理,获得给定词序列出现的概率分布,以客观描述词与词之间组合的可能性,适合于处理大规模真实文本.
统计语言模型的目标是计算给定词序列w1,···,wt−1,wt的组合概率,如式(6)所示:
其中,条件概率P(w1),P(w2|w1),···,P(wt|w1w2···wt−1)就是语言模型,计算所有这些概率值的复杂度较高,特别是长句子的计算量很大,因此一般采用最多n个词组合的N-gram 模型. 语言模型的训练需要足够规模的语料数据,数据越多统计到的词的关系就越多,概率的区分性也就越明显,符合语法规范的句子也就越多.
但是,纯端到端的模型并没有结合语言模型,在结合语言模型之后会更好地利用中文语言特性得到更加准确的预测结果. 而N-gram 语言模型有着成熟完备的训练工具,语料或多或少都可以进行训练并且训练速度也很快,因此本实验采用N-gram 语言模型[9].
2.1 N-gram 语言模型
N-gram 是语音识别中最常用到的语言模型. N-gram指文本中连续出现的n个词语,基本原理是基于马尔可夫假设,在训练语料数据中,通过极大似然估计的方法得到下一个词语出现的n个概率分布进而来推断语句结构.
当n为1 时称为一元模型,表示为式(7):
当n为 2 时称为二元模型,表示为式(8):
当n为3 时称为三元模型,表示为式(9):
多元模型N-gram 可以表示为式(10):
其中,m表示训练语料库中的总字数,C(w1,···,wi)表示计算w1,···,wi在训练语料中出现的次数. 一元模型与多元模型相比,一元模型对句子的约束最小,其中的竞争最多. 而多元模型对句子有更好的约束能力,解码效果更好. 但是相应的n越大,语言模型就越大,解码速度也就越慢. N-gram 预测的词概率值依赖于前n−1个词,而更长距离的上下文依赖被忽略.
2.2 困惑度和平滑技术
目前主要使用困惑度进行对比来确定语言模型的好坏,这种指标比较客观. 给定句子S,其包含词序列w1,w2,···,wT,T表示句子的长度,则其困惑度可以由式(11)表示为:
困惑度简称为PPL,PPL越小,句子S出现的概率就越高,表明语言模型越好,因此语言模型优化的目标就是最小化困惑度.
语言模型的概率需要通过大量的文本语料来估计,采用最大似然算法. 但是在统计的预料中数量有限,因此会存在数据稀疏的情况,这会导致零概率或估计不准的问题,因此对预料中未出现或少量出现的词序列,需要采用平滑技术进行间接预测.
平滑技术主要有3 种,有折扣法、插值法和回退法[30]. 折扣法是降低概率不为0 项的概率,从已有的观测值概率调配一些给未观测值的概率来提高概率为0 项的概率,但没有考虑低阶模型和高阶模型间的关系故不单独使用; 插值法是将高阶模型和低阶模型做线性组合,充分利用高阶和低阶语言模型,把高阶的概率信息分配给低阶的模型; 回退法是基于低阶模型估计未观察到的高阶模型.
3 构建语音识别系统
端到端语音识别系统,不同于传统方法将语音识别任务分解为声学模型、字典和语言模型多个子任务,而是经过一个复杂网络直接产生对应的语言文本,并且在不使用语言模型的情况下就能进行语音识别的工作,实现从输入语音到输出文本的转换[31].
结构如图6 所示,编码器部分负责将语音输入序列映射到特征序列,生成指定长度的向量. 解码器部分对最终的识别结果进行解码,根据语义向量生成指定的序列.
图6 端到端语音识别系统
预处理模块就是对初始输入进行处理,如图7 所示,该结构是由数据增强层、池化层、线性层和Dropout所组成.
图7 预处理模块
数据增强层通过使用SpecAugment[32,33]方法在log 梅尔声谱层面上进行数据增强,可以将模型的过拟合问题转化为欠拟合问题,以便通过大网络和长时训练策略来缓解欠拟合问题,提升语音识别效果. 池化层处理输入,较好地保留了低层次输入,在保留了编码器的表示能力和模型整体精度的同时显著降低了计算量.
线性层又称为全连接层,其每个神经元与上一个层所有神经元相连,实现对前一层的线性组合或线性变换. Dropout 对于神经网络单元按照一定的概率将其暂时从网络中丢弃,有效地减轻过拟合的发生,一定程度上达到了正则化的效果.
3.1 端到端结构
端到端模型结构如图8 所示,该结构编码器部分为Conformer 的编码器,由12 个Conformer 块堆叠而成,解码器部分由CTC 解码器构成.
图8 端到端语音识别系统结构
输入数据经过预处理后进入Conformer 编码器,CTC 解码器由线性层组成,将编码器的输出转化为CTC 激活后解码输出,解码算法为CTC Prefix Beam Search[34–36].
CTC 网络的输出形式为T×C,其中,T表示时间长度,C表示字符类别数,CTC Prefix Beam Search 算法就是模型读入一帧的数据,然后给出当下各种字符的概率,然后利用这一层的概率展开搜索,取搜索空间中最优的k条路经的前缀,并把这些前缀挨个输入到模型中,同时把相同的前缀路径合并,不断重复最终得到最优解.
3.2 结合语言模型的端到端结构
结合语言模型后的模型结构,如图9 所示. 编码器部分由12 个Conformer 块组成,解码器部分为先经过CTC WFST search 打分后再由Attention 解码器重新打分得到最终结果[14,37]. 在结合语言模型的结构中,CTC WFST search 是该结构的核心,该步骤包含了构建解码图和解码器两部分.
图9 结合语言模型的结构
解码图用TLG 来表示,即将T、L 和G 各层次信息组合到一张图中,其中T 表示建模单元,L 表示词典,G 表示语言模型. 以端到端模型训练的中文汉字作为建模单元T,词典L 则是由词语或句子拆分成建模单元而构成,语言模型G 是由N-gram 语言模型转换为加权有限状态转换器(weighted finite-state transducer,WFST)的形式表示[38,39]. WFST 通常用来描述状态之间的转移信息,能够将语言模型直接表示成图的形式,语言模型概率经处理后作为图中的权重. 当图构建完成之后,语言模型的概率就成了图权重的一部分,解码时直接使用图的权重而不用去查询语言模型,它实现了输入序列到输出序列的转换.
解码器部分采用的是Viterbi 解码,根据输入寻求最佳状态序列. 解码过程是逐帧推进,结合转移弧上的权重,得到每个时刻扩展路径的累计代价,然后对比指向同一个状态的不同路径的累计代价,选择值更小的路径并更新状态信息,直到Viterbi 解码最后一帧然后回溯路径,得到最优路径. 对得到的信息再进行Attention 解码重打分,Attention 解码器使用Transformer 结构的解码器部分,通过使用注意力机制最终输出最合适的结果[37,40,41].
4 实验
4.1 实验数据
实验所用到的语音数据由两部分组成,一部分来自于北京希尔贝壳科技有限公司出版的中文语声数据集AISHELL-1,其包含178 h 来自400 个说话人的普通话声频和相应文本信息. AISHELL-1 中的声频数据重采样为16 kHz,16 位的WAV 格式. 开发人员将数据集分为3 个部分: 训练集、验证集和测试集. 训练集包含来自340 个说话者的120098 个发音和大约140 h 的普通话语声数据; 验证集包含来自40 个说话者的14326 个语句; 测试集包含来自20 个说话者的7176 个语句. 对于每个说话者,大约发布了360 个语句(大约26 min 的语声).
另一部分来自于由北京数据堂科技有限公司开发的中文普通话语音语料库aidatatang_200zh,语料库包含 200 h 的声学数据,主要是移动记录数据,邀请了来自中国不同口音地区的600 名演讲者参与录音,每个句子的转录准确率大于 98%,数据文件中保留了语音数据编码和说话人信息等详细信息.
4.2 实验配置
实验所用的机器操作系统为Ubuntu 20.04.2LTS,CPU 为Intel Xeon Silver 4210 ,128 GB 内存,GPU 为3 块RTX2080 SUPER (6 GB)显卡,共18 GB 显存.
SpecAugment 使用了2 个最大频率掩码和2 个最大时间掩码以缓解过拟合问题. 在编码器的前端使用两个核大小为3×3、步幅为2 的卷积子采样层. 编码器中使用12 个Conformer 块,注意力头数设置为 4,学习率设置为0.002,batch size 设置为8,epoch 设置为120,beam size 设置为10. Attention 解码器中解码器个数为6 个,语言模型使用三元语法模型,即N-gram 语言模型中的N为3[32,37].
实验中输入特征是80 维梅尔滤波器组特征即Fbank 特征,将语音通过预加重、分帧、加窗、傅里叶变换、功率谱以及滤波器组有序计算. 设置窗长为20 ms,帧移为10 ms.
训练使用CTC loss 与Attention loss 联合优化训练,这样设置的目的是避免CTC 对齐关系过于随机还能加快训练的收敛速度,并且可以使训练过程更加稳定,从而取得更好的识别结果.
训练所使用的组合损失如式(12)所示,x表示声学特征,y为对应标注,LCTC(x,y)表示CTC loss,LATT(x,y)表示Attention loss,λ表示平衡CTC loss 和Attention loss 的系数[32,42,43].
本实验基于Kaldi[44]、Espnet (end-to-end speech processing toolkit)工具包[45]和WeNet[37]语音识别工具包来进行. Kaldi 是著名的开源语音识别工具,这套工具提供了目前工业界最常用的模型训练工具,它使用WFST 来实现解码算法,其主要的代码是C++编写,在此之上使用bash 和Python 脚本做了一些工具. Espnet工具箱融合了Kaldi 的数据处理和特征提取,同时借助PyTorch 和Chainer,使用Python 实现了许多端到端模型. WeNet 是出门问问语音团队联合西工大语音实验室开源的一款语音识别工具包,模型训练完全基于PyTorch 生态,结构类似于Kaldi 但并不依赖于Kaldi等安装复杂的工具.
4.3 评价标准
本文在数据集AISHELL-1 和数据集aidatatang_200zh 上评价实验结果,采用字错率(character error rate,CER)作为评价指标. 字错率即为了使识别出来的词序列和标准的词序列之间保持一致,需要进行替换、删除或者插入某些词,这些插入I、替换S和删除D的词的总个数,除以标准的词序列中词的总个数的百分比,即如式(13)所示:
4.4 实验结果
在数据集AISHELL-1 和aidatatang_200zh 上,不添加语言模型的情况下,实验结果如表1,以Conformer模型所搭建的语音识别系统与Transformer模型做对比,可以看出在相同的数据集上训练Conformer 模型较Transformer 模型具有更低的字错率. 在AISHELL-l数据集上Conformer 模型要比Transformer模型字错率低5.82%,在aidatatang_200zh 数据集上Conformer 模型比Transformer 模型字错率低2.71%.
表1 在不同数据集上不同模型的字错率 (%)
添加语言模型之后,在相同数据集上使用文中识别方法的结果如表2,不难看出在AISHELL-1 数据集上Conformer 模型在结合语言模型之后比Transformer模型结合语言模型的字错率低3.23%,在aidatatang_200zh 数据集上结合语言模型的Conformer模型比结合语言模型的Transformer 模型字错率低1.69%.
表2 结合语言模型使用不同模型的字错率 (%)
经以上实验表明,在添加语言模型后Conformer模型和Transformer 模型在两个不同的数据集上准确率均得到了进一步提升,并且Conformer 模型在添加语言模型之后识别效果最佳.
语音识别的实时率用来度量语音识别系统识别音频速度的值,表示处理单位时长语音数据所需要的时间,值越小表示处理语音的效率越高. 经测试结果如表3 所示,在不结合语言模型时Transformer 模型的实时率比Conformer 模型低0.06102,在结合语言模型之后Transformer 模型的实时率比Conformer 模型低0.0344,可以看出Transformer 模型的实时率比Conformer模型的实时率稍好,并且在结合语言模型之后两模型识别的实时率也均会发生升高,但仍能在语音识别时达到不错的识别效率.
目前较新的语音识别模型有RNN-Transducer、Conformer-Transducer[45,46],以在AISHELL-1 数据集上测试的结果为基准,与结合语言模型的Conformer 模型作比较,其结果如表3 所示,
表3 语音识别的实时率
由表4 可以看出,结合语言模型的Conformer 模型较RNN-Transducer 和Conformer-Transducer 模型相比,字错率分别下降了了2.34%和0.14%. 可以看出该模型在性能上有一定的优势.
表4 与目前较新的模型比较字错率 (%)
测试结合语言模型的Conformer 模型在噪声环境的性能,在AISHELL-1 数据集上加入不同比例的白噪声分别构成信噪比为10 dB、20 dB、40 dB、60 dB和80 dB 的噪声数据. 测试结果如表5 所示,在测试信噪比为80 dB 和60 dB 含噪声数据时的性能和与使用纯净音频时的性能十分接近. 随着噪声强度的增加,在测试信噪分别为40 dB 和20 dB 时,音频质量接近日常生活环境,此时识别的准确率有所下降. 信噪比为10 dB 时语音数据声音嘈杂,对模型的识别产生较大影响,此时字错率升高. 由此可以看出噪声会对模型的性能产生影响,随着噪声的增强,模型识别的准确率有所下降.
表5 比较在不同噪声环境下的字错率
5 结束语
本次实验通过比较不同模型的字错率,可以看出由Conformer 模型所搭建的中文语音识别系统较Transformer 模型有更好的性能,并且语言模型的添加对端到端语音识别系统识别准确的增加有着重要的作用. 模型识别语音的实时率小于0.2,在进行语音识别时可以感受到细微的延迟并不会影响整体的效果. 并且通过在含有不同程度噪声数据上测试的结果,可以看出不同程度的噪声均会对模型的性能产生一定的影响. 由于实验中所用于训练的语音数据是在安静的条件下录制的,语音质量比较高,这相较于模型在实际使用中所输入的语音数据过于完美,并且实验所用的数据量不足无法涉及到现实中的各个生活场景,因此后续考虑扩充实验数据量以提升模型的性能及鲁棒性,使该模型能够在更多环境下使用.