梁小林,沈湘菲,梁 曌,邱海琳
(长沙理工大学数学与统计学院,湖南 长沙 410114)
语音是指通过人体发声器官发出的按照一定语言规则的有规律的声音信号.语音识别(Auto Speech Recognition,ASR)研究的就是如何将语音信息转化成文本信息.其中涉及了信号处理,自然语言处理等技术.在发展过程中经历了3个阶段:一是孤立词识别;二是连接词识别,如连续数字或连续单词;三是大词汇量下的连续语音识别[1].
目前对于长沙方言的语音研究主要集中在单个数字的方言辨识和说话人识别方向上.2007年,钱盛友等[2]基于动态时间规整和神经网络对湖南长沙、株洲、湘潭和衡阳方言进行了辨识.2009年,王岐学等[3]基于差分特征和高斯混合模型对长沙方言、邵阳方言、衡阳方言及普通话进行辨识.2019年,谢可欣等[4]建立了一种基于门控循环单元(GRU)神经网络和隐马尔科夫模型(HMM)结合的声学模型对湖南长沙、株洲、衡阳、湘潭方言单字进行了识别.2020年,张明键等[5]提出了一种基于语谱图方向梯度直方图(HOG)特征的两步法长沙话说话人识别算法,完成了小样本的长沙话说话人识别.但是针对大词汇量下连续语音识别的长沙方言识别研究较少,因此笔者拟建立一种基于GRU-CTC算法的长沙话方言识别模型对大量词汇下连续长沙话进行识别,并在此基础上构建长沙话发音字典和长沙话语料库,实现从长沙话到普通话的映射识别.
梅尔倒谱系数(Mel-scale Frequency Cepstral Coefficients,MFCC)是在Mel标度频率域提取出来的倒谱参数,描述了人耳频率的非线性特性.由于这种特征不依赖于信号的性质,对输入信号不做任何的假设和限制,又利用了听觉模型的研究成果,具较好的鲁邦性[6-7],因此本研究采用MFCC作为方言识别的特征参数.梅尔频率Mel与语音信号频率f的关系为
(1)
MFCC提取过程如下:
(ⅰ)预加重.将语音信号通过一个高通滤波器,使信号的频谱变得平坦.
(ⅱ)分帧后加窗.为增加分帧后每帧左端和右端的连续性,将分帧后的每帧均乘上汉明窗.假设分帧后的信号为S(n),n=0,…,N-1,N为帧的大小,那么乘上汉明窗后S′(n)=S(n)×W(n),W(n)形式为
(2)
(ⅲ)快速傅里叶变换(FFT)计算频谱.对预处理后的各帧信号取N点进行快速傅里叶变换来计算频谱.故语音信号的离散傅里叶变换(DFT)为
(3)
式中si(n)为输入的语音信号,N表示傅里叶变换的点数.
(ⅳ)计算功率谱(周期图),对式(2)求得的频谱取模平方得到语音信号的谱线能量,
(4)
(ⅴ)通过Mel滤波器,消除谐波、突显原语音的共振峰使频谱变得平滑,同时降低了运算量.将式(3)求得的能量通过Mel滤波器,计算出语音信号经过第m(1≤m≤M)个滤波器之后的能量和Hm,M是滤波器的个数.三角滤波器的频率响应定义为
(5)
(ⅵ)对数运算.用对数这种非线性关系更好描述人耳对声音的感知.计算M个滤波器组输出的对数能量,
(6)
(ⅶ)经离散余弦变换(DCT)可得MFCC系数,
(7)
整个提取过程如图1所示.
图1 MFCC提取流程
门控循环单元(GRU)网络是RNN神经网络的一种变体,具有一定的动态记忆能力,能有效解决长期记忆和反向传播中的梯度消失和梯度爆炸等问题.而CTC(Connectionist Temporal Classification)是一种损失函数[6].不同于传统的神经网络将每帧数据训练误差最小化,CTC是基于最大似然法对整个序列(比如语音识别的一整句话)进行训练.因此使用CTC Loss就不需要进行音频对齐(即不用对静音片段进行分割处理,使得每一个音频片段都有相对应的输出值),直接输入一句完整的语音数据,输出就会是整个序列结果;此外CTC通过递推方式,能快速计算出梯度.基于此,笔者基于CTC算法搭建了一个GRU神经网络模型,CTC-GRU模型示意图如图2所示.
图2 CTC-GRU模型示意
图3 GRU结构
定义输入序列的有限字符集合为L,为使输入与输出能够对齐,考虑在位置缺失部分插入空白字符,定义插入空白标签的字符集合为:L′=L∪{blank}.
再定义一个多对一映射B:L′T→L≤T,其中L′可经过B变换后得到原始L,显然对于L的最大长度有|L|≤T.通过简单地删除路径中的所有空格和重复标签来实现这一点(例如B(-娭-毑毑)=B(娭娭-毑毑)=娭毑).最后,用B来定义给定标记l∈L≤T的条件概率为所有相应路径的概率之和:
(8)
其中π∈B-1(l)代表所有经过B变换后是l的路径π.所以对于任意一条路径π有:
(9)
(9)式成立的条件是:给定网络的内部状态,网络在不同时间的输出有独立条件.这是通过不存在从输出层到自身或网络的反馈连接来实现的[6].
2.2.2 构造解码器 解码器的输出应该是输入序列最可能的标签,本研究采取最佳路径解码是基于最可能路径将对应于最可能标签的假设:
(10)
因为π*是每一个时间步长中最活跃输出的串联,所以最佳路径解码计算起来很简单.但是最佳路径解码不能保证找到最可能的标签.
2.2.3 前向-后向算法 因为有空白标签blank的存在,所以条件概率p(l|x)的计算可以用动态规划算法来解决,类似于HMM的前向-后向算法[6].其关键思想是将标号对应的路径上的和分解为与标号前缀(或者后缀)相对应的迭代,然后用递归的思想对向前变量和向后变量进行有效地迭代计算.
对于标签l,定义αt(s)为时间t上l1:s的前向递推概率和,
(11)
为了在输出路径中保留空白标签b,考虑了一个修改后的字符标签序列l′,在开始和结束处添加空白标签b,并在每对字符标签之间插入空白标签b.因此l′的长度是2|l|+1.在计算l′前向概率和时,允许空白标签b和字符标签之间的所有转换,以及任何一对不同的字符之间的转换.
由式(11)可知,αt(s)可以由αt-1(s)和αt-1(s-1)递推得出:
(12)
假设允许所有前向变量以空白标签blank(b)标号或字符标签l(l1)中的第1个字符开头,那么αt(s)有如下性质:
同理,可以定义时间t上ls:|l|的概率和,即反向递推概率和βt(s):
(13)
(14)
2.2.4 最大似然训练 最大似然训练的目的是同时最大化训练集中所有正确分类的记录概率,这意味着最小化以下目标函数:
(15)
其中:S为训练集有限字符集合;Nw为GRU神经网络[8]输出序列;l为其中一个字符序列.使用梯度下降法训练网络,由于训练例子是独立的,因此可以分别考虑网络输出:
(16)
对于标签l,在给定s和t处前向和后向变量的乘积就是在t时刻通过符号s的所有路径的概率和,从式(11)和式(13)可推:
(17)
(18)
(19)
(20)
显然,
(21)
故
(22)
其中:
由此得到CTC的梯度下降公式:
(23)
根据《长沙话音档》记录的老派长沙话中,声母 23 个,韵母 41 个[6].与普通话的21个声母相比,长沙话不分[n]和[l],统一发作[l],除此之外还多了[]、[]和[Ø].长沙话韵母41个,和普通话相比,少了[a]、[]、[ia]、[i]、[ua]、[ya]6个后鼻音韵母和发儿字音的[]韵母,多了和[io]11个韵母以及[]、[]2个自成音节.
普通话只有4个声调,即阴平、阳平、上声和去声,声调的升降幅度除阴平以外都比较大;调形区分明显,高音居多;上声音长最长,阳平次长,阴平次短,去声最短.但是长沙话除了上述4个声调还拥有入声调,并且将去声调细分为了阴去调和阳去调[9].长沙话的声调五度标记见图4.从图4可以看得出来长沙话抑扬顿挫较明显,声调较高.
图4 长沙话五度标记
目前,长沙方言还没有公开的语料库,为了支撑对长沙话语音识别的研究,笔者建立了长沙话语料库,其中选取的语料能充分展示出长沙话的特点,包括声母、韵母、声调的特点.该语料库选取自长沙方言影视作品《逗吧逗吧街》,笔者对长沙方言片段进行切割,使每一段语料不长于10 s,不需对语料进行额外的降噪、除噪等预处理,为每个语料配备对应普通话和对应字词典.最终语料库含2 520条语音数据,随机选取其中30%的数据作为测试集,其余数据作为训练集.
长沙话语料库的建立过程如下:首先将下载的视频转换为音频后进行切分,其次对每个音频配置拼音和音调,最后核查所有的拼音以确保准确.表1列举了语料库中部分长沙话和普通话的对照语句.
表1 部分长沙话与普通话发音对比
针对长沙方言语音识别研究稀少的问题,笔者提出了一种改进的GRU神经网络语音识别方法(图5).先通过MFCC提取原始语音的特征信息,然后再结合CTC模型映射到文字.在长沙话语料库上进行训练和测试.该模型使用Paddle Paddle框架,基于GRU和CTC来实现.该模型主要由4个模块构成,即MFCC语音特征提取、CTC-GRU模型训练、CTC最大路径法解码和预测评估.
图5 长沙话识别过程
在构建的长沙话方言数据集上用CTC模型,GRU模型和CTC-GRU模型进行识别测试.实验结果以词错率(Word Error Rate,WER)作为指标来统计结果,词错率就是输出文本经过变换(调换、删改、加字等操作)还原标签所需要的最小变换次数i与句子长度len(X)之比:
(24)
词错率反映了语音识别性能的高低,词错率越低说明语音识别效果越好,模型越好.为了避免偶然性误差,实验均进行了500次不同测试,最后取识别结果的均值作为最后实验的WER(表2).
表2 3种模型在长沙话方言数据集上的词错率
从图6和图7可以看出,使用单一模型时,CTC模型的训练损失和词错率均低于GRU模型,将两者结合后,CTC-GRU模型的识别效果得到了显著提升且收敛速度更快.
图6 3种模型训练损失
图7 3种模型词错率对比
为了对模型进行进一步验证,使用THCHs-30普通话数据集进行验证,在取样本量与本研究搭建的数据集一致时,识别效果只比长沙话识别效果好一点,但使用全数据集进行识别验证时,识别率高达91.28%.因此,为进一步提高长沙话方言识别效果,构建一个大而全面的语料库迫在眉睫.
针对长沙方言语音识别研究稀少的问题,笔者提出了一种改进的GRU神经网络语音识别方法.先通过MFCC提取原始语音的特征信息,然后再结合CTC模型映射到文字.
总的来说,在大词汇量下连续长沙话方言识别还有很多地方可进一步发展和完善.但当务之急是建立一个丰富可靠的长沙话语料库,在大量语音数据的支撑下,长沙话方言的情感分析、语音合成等研究的开展指日可待.此外,本研究采用的是CTC-GRU模型,未来也可尝试加入迁移学习、多头注意力机制等方法对模型进一步优化.