[Voice] 02 - Goodness of Pronunciation

Ref: 「英语流利说」是如何进行比对评分的?

 

关于打分使用的算法


目前工业界采用的主流的跟读口语评分方法主要是基于隐马尔可夫模型(Hidden Markov Model) 的语音识别引擎,

利用其似然分数值 (likelihood score) 以及其他相关的信息做为评分依据。

其中,最经典的GOP (Goodness of Pronunciation) 方法是由麻省理工大学的Silke Witt在他的博士论文中提出。

之后的评分方法大都与GOP算法相似,或者是由它衍生出来。流利说使用的打分算法也正是以GOP算法为基础的。

GOP算法Witt的论文



 

不同于语音识别


此类方法都基于语音识别,但是和语音识别任务有很大区别的。

  • 在语音识别任务中,一段语音对应的文字(内容)是事先不知道的,需要由语音识别系统“猜”出来;
  • 而在打分系统中,一段语音对应的文字是事先知道的,系统需要做的是对这段语音做一个发音上的评价。

 

GOP算法的基本思想正是利用了事先知道的文字信息,

(1) 把语音和它对应的文字做一次强制对齐 (force alignment),

(2) 并把强制对齐得到的似然分数值与在不知道对应文字情况下得到的似然分数值做一个比较,

(3) 利用这个似然比(likelihood ratio)做为发音好坏的评价。



直观的来说,这类算法计算的是输入语音对应于已知文字的可能性,如果可能性越高,说明发音越标准。

这种可能性的计算是基于语音识别中的声学模型(acoutisc model 的,而声学模型往往是通过大量的母语发音人的录音训练而成。

这里涉及到了[语料]。

 

关于《英语流利说》的GOP算法:

(1) 英语流利说使用了http://cmusphinx.sourceforge.net/提供的PocketSphinx来实现语音识别,

(2) 评分的算法使用了动态规划算法,求最大顺序公共子串的问题;

(3) 还有一个关键点在于语音识别数据模型的生成,貌似英语流利说实现的不是离线的语音识别,可能是在线的

 

 

 

评测指标


评测系统输出的错误读音粒度可以是音素(phoneme)音节(syllable)(word)中的一种,一般情况下采用音素这个level进行输出。


发音评测是通过对比参考读音和用户读音来检测错误的。

下文中我们将介绍如何基于语音识别技术对发音进行建模以及如何基于本文要介绍的GOP评测算法对每个音素的读音进行打分。

[信号分析、特征提取、语音识别等技术]

 

音素

有了参考文本,评测系统就可以查阅发音词典得到该文本对应的音素序列[q1, …, qn]

后续工作就是要检测这里的每个音素qi是否被正确读出。

 

语音特征

麦克风采集的语音音频是wav格式的PCM数据(若是mp3等压缩格式则需要先解码为PCM)

这种raw数据是无法直接处理的。

和大多数机器学习系统一样,我们需要先raw音频中提取语音特

在语音识别领域,最常用的就是梅尔频率倒谱系数-MFCC

(1) 提取这个特征时要先对raw音频进行短时傅里叶变换(STFT)得到声谱图

(2) 然后在梅尔域进行倒谱系数计算


[原理再研究]

完成语音特征提取后,原始的发音音频被转换为一个语音特征序列,这个序列由组成,每帧为一个39维的向量

 

 

基于HMM的语音识别框架


为什么能用HMM?

那么HMM在语音识别中如何应用呢?在语音识别中,我们认为每个音素的发音过程是由发声器官的形变产生的,发声器官的每种形状对应HMM模型的一个隐含状态(就是上例中的天气,在语音识别中一般采用3~5个隐含状态建模),发声器官在每种形状(隐含状态)下,会以一定概率产生具体的声音(在语音识别中就是语音特征,对应上例中的行踪)。我们无法直接观测到发声器官的形状(隐含状态),但我们能够看到具体的语音特征(观测值)。因此当HMM模型参数已知时(即线下为每个音素训练好HMM模型),就可以根据语音特征序列来计算最可能的音素状态序列。此外,HMM模型可以串联(由其模型特点决定,在此不详细解释),即当前音素的结束状态可以跳转到下一个音素的起始状态,因此我们可以将一个已知音素序列(例如Hello World[hɛlo wɝld])8个音素的HMM模型串联起来形成一个大的HMM模型,这个大的HMM模型就描述了Hello World整句话的发音过程。根据观测到的整个语音特征序列和这个HMM的模型参数,我们就可以计算在Hello World这个HMM模型下当前语音最可能的音素状态序列,即每一帧语音属于哪个音素,该帧对应此音素的哪个状态,以及公式 1中定义的条件概率。

 

 

 

评测流程


强制对齐与自由识别

第一步,我们要将Hello World这个文本和用户的发音音频进行对齐,这一步通常叫做“强制对齐”(forced alignment)

强制对齐怎么做呢?

首先,我们知道Hello World对应的音素序列为[hɛlo wɝld]

然后我们将这8个音素的HMM模型串接起来形成一个大的HMM模型

根据上文介绍,基于这个模型,以及从用户音频中提取得到的语音特征序列,就能够计算最可能的音素状态序列,也就是每一帧语音属于[hɛlo wɝld]中的哪个音素,以及该音素的哪个状态。这样就实现了音频帧和音素状态的对应,强制对齐这个名称就来源于此。强制对齐后就知道了每个音素(qi表示)对应的语音帧区间范围。

  • 如果用户的发音正确,那么强制对齐后就会准确定位到每个音素对应的语音帧区间。[也就是对齐了]
  • 如果用户发音错误,例如某个音素qi被错读了,那么对齐后qi的语音帧区间实际上发的并不是qi这个音。那么:自由识别。不考虑参考文本,也就是不限制音素序列为[hɛlo wɝld],直接用语音识别把最可能的音素状态序列计算出来(参看上文对HMM的介绍),那其实就相当于从所有音素列表中选出了最符合用户发音的音素序列。

 

GOP评测 

完成强制对齐和自由识别后,我们就知道参考文本中每个音素对应语音中的哪一段,而且用户的这一段语音实际发了什么音。 

有了这些信息,用什么样的打分方法来衡量参考文本每个音素的读音准确程度呢?----> GOP

 

之前介绍过,强制对齐后,参考文本中每个音素q对应的那段语音[fs~fe]就确定了。

有了这个信息,GOP的定义如下:在观察到这段语音的前提下,其对应参考文本音素q的概率值,用公式表示就是:略。 

其中,qi是参考文本中当前要打分的音素,O是强制对齐后qi对应的[fs~fe]这段语音。

NF(O)是这段语音的帧数,在这里起一个归一化的作用。

可以看到,GOP打分其实就是一个条件概率,它衡量了“在观测到用户语音O的情况下,这段语音对应音素qi的概率”。

这个概率越高,说明发音越准确,这个概率越低,说明发音越差,从物理意义上来理解,是一个合适的打分度量标准

这个式子求解复杂,因此GOP做了以下假设:GOP计算公式近似

自由识别时的计算公式

至此,我们已经完成了对GOP的介绍。如上文所述,根据GOP公式我们就可以对参考文本中每个音素的发音情况进行打分,同时,根据强制对齐的结果也可以知道这个音素对应的语音帧区间,这样就可以得到发音错误的位置。更重要的是,我们可以根据自由识别的结果,知道用户真正的读音是什么,这些信息也可以作为结果返回给用户。

 

Next: 声音降噪和改变音色

 

posted @ 2018-06-04 10:48  郝壹贰叁  阅读(3743)  评论(2编辑  收藏  举报