发明名称 计算机辅助语言学系统中的发音质量评价方法
摘要 本发明属于语音技术领域,计算机辅助语言学系统中的发音质量评价方法,包括:匹配分数的计算、基于美尔(Mel)频标的感知分数的计算、段长分数的计算和基音分数的计算,并将上述分数映射后进行融合;本发明的发音质量评价方法具有稳健性好,与专家评分相关性高的优点,可以用于交互式语言学和自动口语测试。
申请公布号 CN101246685B 申请公布日期 2011.03.30
申请号 CN200810102076.X 申请日期 2008.03.17
申请人 清华大学 发明人 刘加
分类号 G10L11/00(2006.01)I;G10L19/00(2006.01)I;G09B19/04(2006.01)I 主分类号 G10L11/00(2006.01)I
代理机构 代理人
主权项 1.一种计算机辅助语言学习系统中语音发音质量评价方法,包括:匹配分数计算、基于Mel频标的感知分数计算、基音分数计算、分数映射、分数融合各部分,具体计算包括以下步骤:步骤1首先分别对参考语音和测试语音进行分帧处理,得到短时平稳的分帧语音;步骤2按照步骤2.1-2.4分别计算步骤1中所述的分帧的参考语音和测试语音的匹配分数;步骤2.1分别对所述分帧的参考语音和测试语音每帧提取MFCC特征,共39维特征,其中包括:12维MFCC系数及其一阶差分和二阶差分,归一化能量及其一阶差分和二阶差分;步骤2.2利用预先训练好的HMM模型,采用Viterbi解码算法分别对步骤2.1输入的参考语音和测试语音进行强制对准,分别得到参考语音和测试语音的似然度,以及语音中每个音素的时间分隔信息;步骤2.3按照以下公式计算第i个音素的匹配分数L(i):L(i)=|log(p<sub>text</sub>(O<sub>test</sub>|q<sub>i</sub>))-log(p<sub>ref</sub>(O<sub>ref</sub>|q<sub>i</sub>))|其中,p<sub>test</sub>(O<sub>test</sub>|q<sub>i</sub>)是测试语音的似然度,p<sub>ref</sub>(O<sub>ref</sub>|q<sub>i</sub>)是参考语音的似然度。其中,q<sub>i</sub>表示第i个音素HMM模型,O<sub>test</sub>和O<sub>ref</sub>分别是测试语音和参考语音的MFCC特征矢量;步骤2.4按照以下公式计算音素平均匹配分数,并以此作为语音发音的匹配分数S<sub>mat_sen</sub>:<maths num="0001"><![CDATA[<math><mrow><msub><mi>S</mi><mrow><mi>mat</mi><mo>_</mo><mi>sen</mi></mrow></msub><mo>=</mo><mfrac><mn>1</mn><msub><mi>N</mi><mi>p</mi></msub></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><msub><mi>N</mi><mi>p</mi></msub></munderover><mi>L</mi><mrow><mo>(</mo><mi>i</mi><mo>)</mo></mrow></mrow></math>]]></maths>其中,N<sub>p</sub>为语音发音中音素总个数;步骤3按照步骤3.1-3.7分别计算步骤1中所述的分帧的参考语音和测试语音的感知分数;步骤3.1分别对所述的参考语音和测试语音分帧并加Hanning窗;步骤3.2把步骤3.1中分帧的语音送入Mel频标上均匀分布的Q个三角窗滤波器进行Mel滤波处理,按照下式得到每个滤波器输出的能量和的对数值M(q):<maths num="0002"><![CDATA[<math><mrow><mi>M</mi><mrow><mo>(</mo><mi>q</mi><mo>)</mo></mrow><mo>=</mo><mi>ln</mi><mo>[</mo><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><msub><mi>F</mi><mrow><mi>q</mi><mo>-</mo><mn>1</mn></mrow></msub></mrow><msub><mi>F</mi><mi>q</mi></msub></munderover><mfrac><mrow><mi>n</mi><mo>-</mo><msub><mi>F</mi><mrow><mi>q</mi><mo>-</mo><mn>1</mn></mrow></msub></mrow><mrow><msub><mi>F</mi><mi>q</mi></msub><mo>-</mo><msub><mi>F</mi><mrow><mi>q</mi><mo>-</mo><mn>1</mn></mrow></msub></mrow></mfrac><mi>G</mi><mrow><mo>(</mo><mi>n</mi><mo>)</mo></mrow><mo>+</mo><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><msub><mi>F</mi><mi>q</mi></msub></mrow><msub><mi>F</mi><mrow><mi>q</mi><mo>+</mo><mn>1</mn></mrow></msub></munderover><mfrac><mrow><msub><mi>F</mi><mrow><mi>q</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>-</mo><mi>n</mi></mrow><mrow><msub><mi>F</mi><mrow><mi>q</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>-</mo><msub><mi>F</mi><mi>q</mi></msub></mrow></mfrac><mi>G</mi><mrow><mo>(</mo><mi>n</mi><mo>)</mo></mrow><mo>]</mo></mrow></math>]]></maths>其中,F<sub>q</sub>是第q个三角窗滤波器的中心频率,F<sub>q+1</sub>和F<sub>q-1</sub>分别为第q个三角窗滤波器的上、下截止频率,G(n)为三角窗函数,Q为三角窗滤波器的个数,q=1,2,3…,Q;步骤3.3按照下式把步骤3.2得到的第q个三角窗滤波器输出的能量和对数值M(q)映射到听感知域的响度L(q):L(q)=0.048M(q)<sup>0.6</sup>步骤3.4基于步骤2.2得到的每个音素的时间分隔信息,利用动态时间规划算法(DTW)把参考语音和测试语音相应的音素在音素层面上逐帧对准,并计算参考语音和测试语音在第q个三角窗输出的响度差感知域上的响度差D(q):D(q)=L<sub>test</sub>(q)-L<sub>ref</sub>(q)    q=1,2,3,…,QL<sub>test</sub>(q)是测试语音在第q个三角窗滤波输出的响度;L<sub>ref</sub>(q)是参考语音在第q个三角窗滤波输出的响度;步骤3.5按照下式计算每帧语音的响度差p<sub>frame</sub>(j):<maths num="0003"><![CDATA[<math><mrow><msub><mi>p</mi><mi>frame</mi></msub><mrow><mo>(</mo><mi>j</mi><mo>)</mo></mrow><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>q</mi><mo>=</mo><mn>1</mn></mrow><mi>Q</mi></munderover><mi>W</mi><mrow><mo>(</mo><mi>q</mi><mo>)</mo></mrow><msqrt><mfrac><mrow><munderover><mi>&Sigma;</mi><mrow><mi>q</mi><mo>=</mo><mn>1</mn></mrow><mi>Q</mi></munderover><msup><mrow><mo>(</mo><mi>D</mi><mrow><mo>(</mo><mi>q</mi><mo>)</mo></mrow><mi>W</mi><mrow><mo>(</mo><mi>q</mi><mo>)</mo></mrow><mo>)</mo></mrow><mn>2</mn></msup></mrow><mrow><munderover><mi>&Sigma;</mi><mrow><mi>q</mi><mo>=</mo><mn>1</mn></mrow><mi>Q</mi></munderover><mi>W</mi><mrow><mo>(</mo><mi>q</mi><mo>)</mo></mrow></mrow></mfrac></msqrt></mrow></math>]]></maths>W(q)为第q个三角滤波器的带宽,Q为三角窗滤波器的个数,j表示参考语音和测试语音的第j帧;步骤3.6按下式计算第i个音素的感知分数p<sub>phone</sub>(i),音素的感知分数为参考语音和测试语音的帧平均响度差:<maths num="0004"><![CDATA[<math><mrow><msub><mi>p</mi><mi>phone</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>)</mo></mrow><mo>=</mo><mroot><mfrac><mrow><munderover><mi>&Sigma;</mi><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>N</mi></munderover><msup><mrow><mo>[</mo><msub><mi>p</mi><mi>frame</mi></msub><mrow><mo>(</mo><mi>j</mi><mo>)</mo></mrow><mo>]</mo></mrow><mn>6</mn></msup></mrow><mi>N</mi></mfrac><mn>6</mn></mroot></mrow></math>]]></maths>其中N为参考语音和测试语音中较长语音对应音素的帧数;步骤3.7按下式计算整个语音发音的感知分数p<sub>p_sen</sub>:<maths num="0005"><![CDATA[<math><mrow><msub><mi>p</mi><mrow><mi>p</mi><mo>_</mo><mi>sen</mi></mrow></msub><mo>=</mo><mfrac><mn>1</mn><msub><mi>N</mi><mi>p</mi></msub></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><msub><mi>N</mi><mi>p</mi></msub></munderover><msub><mi>p</mi><mi>phone</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>)</mo></mrow></mrow></math>]]></maths>其中N<sub>p</sub>为语音发音中音素总个数;步骤4按照步骤4.1-4.3计算整个语音发音的段长分数:步骤4.1基于步骤2.2得到每个音素的时间分隔信息,利用段长模型分别计算参考语音和测试语音各个音素的段长概率分数,段长模型采用直方图模型或者Gamma模型计算,由标准语音库通过预先学习得到;步骤4.2按下式计算音素段长分数d<sub>phone</sub>:d<sub>phone</sub>=|LogD<sub>test</sub>-LogD<sub>ref</sub>|其中D<sub>test</sub>为测试语音的相应音素的段长概率分数,D<sub>ref</sub>为参考语音相应音素的段长概率分数;步骤4.3按照下式计算整个语音发音的段长分数d<sub>sen</sub>:<maths num="0006"><![CDATA[<math><mrow><msub><mi>d</mi><mi>sen</mi></msub><mo>=</mo><mfrac><mn>1</mn><msub><mi>N</mi><mi>p</mi></msub></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><msub><mi>N</mi><mi>p</mi></msub></munderover><msub><mi>d</mi><mi>phone</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>)</mo></mrow></mrow></math>]]></maths>其中d<sub>phone</sub>(i)为语音发音中第i个音素的对数段长概率分数;步骤5按照步骤5.1-5.2计算整个语音发音的基音分数:步骤5.1结合步骤2.2中得到每个音素的时间分隔信息,采用基于线性预测编码(LPC)中的自相关估计算法,分别计算参考语音和测试语音中第i个元音内的基音极大值和极小值之差S<sub>vow</sub>(i):S<sub>vow</sub>(i)=P<sub>max</sub>(i)-P<sub>min</sub>(i)其中P<sub>max</sub>(i)和P<sub>min</sub>(i)分别表示第i个元音内的基音的极大值和极小值;步骤5.2按照下式计算基音分数R<sub>vow_max_min</sub>:<maths num="0007"><![CDATA[<math><mrow><msub><mi>R</mi><mrow><mi>vow</mi><mo>_</mo><mi>max</mi><mo>_</mo><mi>min</mi></mrow></msub><mo>=</mo><mfrac><mn>1</mn><msub><mi>N</mi><mi>v</mi></msub></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><msub><mi>N</mi><mi>v</mi></msub></munderover><msup><mrow><mo>|</mo><msubsup><mi>S</mi><mi>vow</mi><mi>test</mi></msubsup><mrow><mo>(</mo><mi>i</mi><mo>)</mo></mrow><mo>-</mo><msubsup><mi>S</mi><mi>vow</mi><mi>ref</mi></msubsup><mrow><mo>(</mo><mi>i</mi><mo>)</mo></mrow><mo>|</mo></mrow><mn>2</mn></msup></mrow></math>]]></maths>其中N<sub>v</sub>为句子中的元音总数,<img file="FSB00000339186900034.GIF" wi="127" he="54" />为测试语音中第i个元音内的基音极值差,<img file="FSB00000339186900035.GIF" wi="126" he="59" />为参考语音中第i个元音内的基音极值差;步骤6按照步骤6.1-6.2计算整个语音的发音质量评价的融合分数,进行融合的分数包括匹配分数、感知分数、段长分数和基音分数:步骤6.1通过映射函数将原始机器评价分数映射到专家评分取值区间内,按下式计算映射后机器分数:y=a<sub>1</sub>x<sup>3</sup>+a<sub>2</sub>x<sup>2</sup>+a<sub>3</sub>x+a<sub>4</sub>(15)其中,x为原始机器分数,y为映射后的机器分数,a<sub>1</sub>,a<sub>2</sub>,a<sub>3</sub>和a<sub>4</sub>为多项式系数;步骤6.2基于线性融合方法计算整个语音的发音质量评价的融合分数<img file="FSB00000339186900041.GIF" wi="54" he="51" />计算公式如下:<img file="FSB00000339186900042.GIF" wi="1065" he="62" />其中,s<sub>1</sub>,s<sub>2</sub>,…,s<sub>n</sub>表示映射后的各个机器分数,a<sub>1</sub>,a<sub>2</sub>,…,a<sub>n</sub>为组合系数;如果采用SVM进行分数融合,可以利用通用的SVM软件工具包计算融合分数<img file="FSB00000339186900043.GIF" wi="54" he="52" />基于SVM融合效果优于线性融合的方法。
地址 100084 北京市100084-82信箱