MFCCs和DTW在拼音相似度中的研究
作者: 徐扬 张嘉宝 杨满玉 李晶 聂云丽
摘要:汉语拼音的模糊匹配在关键词匹配、语音纠错等场景占据着重要地位,而传统的模糊匹配方法无法计算不同声母、韵母之间的听觉相似度,只能简单地将其作为相同和不同的两种情形处理,这在实际使用中,容易受方言、发音习惯等因素影响匹配正确率。文章针对该问题,提出了一种基于梅尔频率倒谱系数(MFCCs)和加入惩罚系数的动态时间序列规整(DTW)的方法,计算汉语拼音中各部分的相似度。MFCCs能够提取声音频谱中符合人耳听觉特性的特征,而DTW方法能够计算时间序列的相似度。根据实验表明,该方法能较好地区分出汉语拼音中发音相似的音标,能够提高各种拼音模糊匹配场景的匹配性能和准确率。
关键词:拼音模糊匹配;拼音相似度;梅尔频率倒谱系数;动态时间序列规整
中图分类号:TP18 文献标识码:A
文章编号:1009-3044(2022)14-0001-04
随着互联网的飞速发展,汉字拼音的模糊匹配在关键词匹配、汉字纠错等诸多场景都有着重要应用。传统的拼音模糊匹配通常使用基于拼音编辑距离[1-2]、基于SOUNDEX的音码相似度[3-4]等方法。陈何峰等人[5]还根据英文的关键词模糊集构造法(Gram-based),提出了新的拼音模糊集合。但是这些方法都存在模糊性不强、在计算不同声母、韵母之间的发音相似性时,只能将其作为相同和不同两种情况处理的问题。
针对以上问题,本文提出了一种基于MFCCs和DTW的拼音相似度计算方法,能够很好地根据具体情形的汉语发音音频文件,计算出不同拼音之间的听觉相似度,大大提高了各种拼音模糊匹配场景中的匹配率和准确度。
1 算法描述
1.1 MEL频率倒谱系数(MFCC)
MFCC是一种基于人耳听觉机制的特征提取方法。相比于LPCC方法,MFCC具有更好的特征提取效果[6]。人耳对不同频率声音的感知能力并非呈现严格的线性关系。根据人类听觉感知的实验,人耳对低频(小于1KHz)的感知能力大致呈现线性关系,而对高频(大于1Khz)的感知能力大致呈现对数关系。根据这一特性,在对声音进行相似度研究时,需要使用公式(1),将线性的频率(Hz)刻度转换为Mel刻度:
[Melf=1125ln(1+f/700)] (1)
MFCC参数的提取通常包含以下步骤[7]:
1.1.1 预加重
由于语音信号会受到声门激励和口鼻辐射的影响,需要将原始语音信号通过如下的一个高通滤波器:
[Hz=1-μz-1]
以补偿高频分量的损失,并凸显高频的共振峰,其对应的时域差分方程为:
[S(n)=x(n)-μ*x(n-1)] (2)
式中[μ]取值为0.9~1,本文取值[μ=0.97]。
1.1.2 分帧
为了方便信号分析,需要把总的音频信号[S(n)]切分为许多小段[Sin],每一小段称为帧,其中包含N个采样点,N叫帧长。如果最后一帧不够N个样本点,则在后面补0。在语音信号的处理中,一帧的时间长度要小于一个音素的长度,音素的持续时间约为50ms~200ms。而每一帧又必须要包含多个周期,男声语音的基频在100Hz左右,女声在200Hz左右,即10ms和5ms。所以每一帧的时间长度取值应在20ms~50ms之间。在对帧做偏移时,还需要将帧与帧之间重叠一部分,以避免帧与帧之间的特性变化太大。对于16000Hz的语音信号,通常取帧长N=512,即对应的时间长度为512/16000×1000=32ms。在本研究中,取每帧时长为32ms,帧移为16ms。
1.1.3 加窗
对每一帧信号[Sin]乘上汉明窗[Wn],以减小吉布斯效应的影响,减弱FFT以后旁瓣大小以及频谱泄露。加窗后的信号:
[S'in=Sin*W(n)] (3)
其中[Wn=0.54-0.46cos2πn/(N-1)],
[0≤n≤N-1,N]为帧长。
1.1.4 离散傅里叶变换(DFT)
对每一帧加窗后的信号[S'in]做N=512的离散傅里叶变换:
[Sik=n=1NS'i(n)e-j2πkn/N,1≤k≤N] (4)
将时域的音频信号转换至频域。变换后,由[Sik]估计功率谱[Pik]:
[Pik=1NSik2] (5)
每一帧有N/2+1=257个点。
1.1.5 Mel滤波器组
将FFT变换后的能量谱,根据公式(1)把实际频率转换为Mel频率(m),再通过L=26个Mel滤波器,其中1KHz以下的10个滤波器线性相隔,1KHz以上的16个滤波器对数相隔,每个滤波器为长度等于257的向量,如图1所示:
第[l]个三角形滤波器的下限频率[o(l)]、中心频率[c(l)]、上限频率[h(l)]与相邻滤波器的关系如下:
[cl=hl-1=o(l+1)]
其中每个三角滤波器的输出:
[ml=k=olhlWlk Pik l=1,2,…,L] (6)
[Wlk=k-olcl-ol,o(l)≤k≤c(l)hl-khl-cl,c(l)≤k≤h(l)] (7)
根据奈奎斯特(Nyquist)采样定理,16KHz的语音信号频率范围为0~8KHz,而人类只能听到20Hz以上的声音,所以对20Hz~8KHz根据式(1)转换到Mel尺度,20Hz对应31.69Mel,8KHz对应2834.99Mel。
1.1.6取对数和倒谱运算
由于人耳对声压的反应一般呈对数关系,在获得Mel频谱后,还需要进行一次取对数和倒谱运算,将频域信号变回时域信号。在MFCC中,通常使用离散余弦变换(DCT)代替反傅里叶变换进行倒谱运算:
[ci=2Nl=1Llgm(l)cos{(l-12)iπL}]
其中低倒谱系数常用于检测音元,高倒谱系数常用于检测音高,不同系数之间的变化不相关。在本研究中,只提取前9阶倒谱系数。
1.1.7 差分参数提取
以上计算的倒谱参数只包含了语音参数的静态特征,还需要通过两次差分计算,获得语音参数的动态(delta)特征,以提高系统的识别性能:
[dt=n=1Nn(ct+n-ct-n)2n=1Nn2] (8)
式中,[dt]表示从第t帧的前后[ct+n、ct-n]得到的一阶差分(delta)系数,本文取[N=2]。二阶差分(delta-delta)系数使用同样的方法,对[dt]再进行一次差分运算。因此,本文中完整的一个MFCCs包含27个维度,其中9维MFCC,9维一阶差分系数,9维二阶差分系数。
1.2 动态时间归整(DTW)求相似度
在语音信号处理中,语音时间序列的长度大部分是不相等的,时间序列存在非对齐、局部形变、噪声干扰的问题。比如序列局部发生压缩、拉伸时,一对一比较法无法解决该问题[9],传统的欧氏距离无法有效求取不同语音信号的相似度。而DTW方法可以通过寻找波形对齐的点,进而更加准确地计算出距离。
1994年,Berndt等人通过引入DTW方法[10],有效解决了离散时间序列的偏移问题:
[DTWQ,C=minWk=0KωkK] (9)
其中[W=ω0,ω1,…,ωk,…,ωK]表示规整路径矩阵(warping Path Matrix),[W]的第[k]个元素定义为[Wk=(i.j)k],[δ]是距离度量函数,本文取以下公式:
[Wk=λ*δ(i,j)=λ*(xi-yj)2] (10)
在计算汉语拼音的DTW相似度时,为了适应声母、韵母的发音特性,并在一定程度上解决DTW算法中可能出现的病态对齐现象[11],本文对[Wk]的计算加入了惩罚系数[λ]。当对声母部分计算DTW相似度时,对时间序列[Q,C]的前[35]帧部分,取[λ=1],后[25]帧部分取[λ=0.7];当对韵母部分计算DTW相似度时,对时间序列[Q,C]的前[25]帧部分,取[λ=0.7],后[35]帧部分取[λ=1]。
[W]满足以下3个约束条件:
(1)边界条件:
[ω0=x0,y0,ωK=(xm,yn)] (11)
即路径规划必须从网格矩阵[W]的左下角出发,右上角结束。
(2)连续性条件:
若[ωk-1=a',b'],则路径规划的下一个点[ωk=a,b]须满足:
[a-a'≤1,b-b'≤1] (12)
即[W]上的每个点只能和相邻点对齐匹配。
(3)单调性条件:
若[ωk-1=a',b'],则路径规划的下一个点[ωk=a,b]须满足:
[0≤a-a',0≤b-b'] (13)
即[W]上的点必须随时间单调进行规划。
针对汉语拼音的特点,DTW在本文的具体实现步骤如下:
1)假设两个时间序列[Q=x0,x1,xi,...,xm],[C={y0,y1,yj,...,yn}],其中[m、n]分别是音频文件A、B的分帧数。