李宏毅DLHLP.05.Speech Recognition.4/7. HMM

介绍

本门课程是2020年李宏毅老师新课:Deep Learning for Human Language Processing(深度学习与人类语言处理)
课程网站:http://speech.ee.ntu.edu.tw/~tlkagk/courses_DLHLP20.html
B站视频:https://www.bilibili.com/video/BV1EE411g7Uk?t=222
公式输入请参考:在线Latex公式
本节从传统的方式来看语音识别这个任务

HMM(Hidden Markov Model)

在这里插入图片描述
从统计的角度来看这个问题,就是求给定的一段sequence,得到一段文字的概率是多少,然后我们穷举所有可能的几率Y,找到使得几率最大的那段文字:
Y ∗ = a r g max Y P ( Y ∣ X ) \text{Y}^*=arg\underset{\text{Y}}{\text{max}}P(\text{Y}|X) Y=argYmaxP(YX)
我们把上面找几率最大的Y这个过程称为Decode,上式可以根据贝叶斯定理写为:
Y ∗ = a r g max Y P ( Y ∣ X ) = a r g max Y P ( X ∣ Y ) P ( Y ) P ( X ) = a r g max Y P ( X ∣ Y ) P ( Y ) \text{Y}^*=arg\underset{\text{Y}}{\text{max}}P(\text{Y}|X)\\ =arg\underset{\text{Y}}{\text{max}}\cfrac{P(X|\text{Y})P(\text{Y})}{P(X)}\\ =arg\underset{\text{Y}}{\text{max}}P(X|\text{Y})P(\text{Y}) Y=argYmaxP(YX)=argYmaxP(X)P(XY)P(Y)=argYmaxP(XY)P(Y)
上面由于 P ( X ) P(X) P(X)是常数,在求极值的时候可以忽略
上式中,
P ( X ∣ Y ) P(X|\text{Y}) P(XY)称为:Acoustic Model,这块就是HMM
P ( Y ) P(\text{Y}) P(Y)称为:Language Model
对于HMM来说之前讲的token以句子,单词什么的为单位都太大了,所以要换小一点的单位:State(比phoneme还要小的单位,人为定义的),用 S S S表示:
P ( X ∣ Y ) → P ( X ∣ S ) P(X|\text{Y})\rightarrow P(X|S) P(XY)P(XS)
例如,下面句子对应的phoneme:
在这里插入图片描述
每个发音又会受到前后音节的影响:
在这里插入图片描述
这里的tri-phone不是指三个phoneme,而是指切分得更加细致的发音
每个tri-phone可以由3-5个state组成(绿色箭头,根据计算资源决定)
在这里插入图片描述
为了要计算给定State生成acoustic feature的概率,我们来看一下这个过程:
在这里插入图片描述
假设我们有3个state,在第一个state,会产生一些vector:
在这里插入图片描述
接下来是第二个state:
在这里插入图片描述
然后是第三个state:
在这里插入图片描述
从上面的过程可以看到,要从state生成acoustic feature需要两个概率:
一个是从一个state等待多久,然后变到另外一个state的概率;Transition Probability: Probability from one state to another.(包括自己跳到自己)
在这里插入图片描述

一个是某个state生成某个acoustic feature vector的概率。Emission Probability.

Emission Probability

这里我们假定每个state产生acoustic feature vector都有固定的分布,例如:
t-d+uw1这个state可以生成如下acoustic feature vector
在这里插入图片描述
d-uw+y3这个state可以生成如下acoustic feature vector
在这里插入图片描述
可以看到,上面每个state生成acoustic feature vector的概率可以用Gaussian Mixture Model (GMM)来表示,这里注意我们的假设,每个state生成acoustic feature vector的概率是固定的,不能用character来做,因为【c】这个character发【k】的音,但是它和h组合为【ch】发音就变了,不能用这个方式来做。
但是现在的问题是我们有30多个phoneme,组合成state后,就太多太多了,需要太多的Gaussian Mixture Model来表示,玩不起,为了解决这个问题,研究人员将相近的state指向同一个Gaussian Mixture Model:在这里插入图片描述
这样就减少了Gaussian Mixture Model的数量。发展到后来就变成:
Subspace GMM [Povey, et al., ICASSP’10]:所有的state都共用同一个Model。
插曲:同年Geoffrey Hinton也发表了DL用于语音辨识的文章,在同一个会议,但是没有用state,没有拿STOA的结果,这个文章并没有引起注意。

alignment问题

现在我们假设我们已经算好两个概率:
在这里插入图片描述
现在要求从state生成acoustic feature的概率还是不行,因为我们还不知道如何做alignment,也就是不知道acoustic feature是哪个state生成的。
在这里插入图片描述
例如上面的state生成acoustic feature的例子
我们假设知道acoustic feature的alignment为: h 1 = a a b b c c h^1=aabbcc h1=aabbcc
那么才能计算: P ( X ∣ h 1 ) P(X|h^1) P(Xh1),就是把下面的所有的P都乘起来
在这里插入图片描述
当然,这只是alignment的一种可能,还有 h 2 = a b b b b c h^2=abbbbc h2=abbbbc
在这里插入图片描述
只给声音信号,不给alignment,可以有很多种结果,在HMM中的Hidden就是指的alignment(隐藏属性),我们就只能穷举所有可能的alignment,然后将结果累加,就得到最后的结果:
P θ ( X ∣ S ) = ∑ h ∈ a l i g n ( S ) P ( X ∣ h ) P_{\theta}(X|S)=\sum_{h\in align(S)}P(X|h) Pθ(XS)=halign(S)P(Xh)
这里注意:h是所有可能的alignment,例如上面的例子中:
在这里插入图片描述
是不可能的。
可以看到整个HMM的语音识别技术完全没有用到DL,当DL崛起的时候,就有人考虑要在HMM上引入DL,下面看几种基于HMM的DL方法。

基于HMM的DL方法

Method 1: Tandem.09年

这个方法的思想是不要动HMM的部分,而是使用DL来获取更加精准的acoustic feature,训练一个DNN作为state classifier,这个DNN吃一个MFCC(MFCC看这里),吐出这个MFCC属于某个state的几率是多少
在这里插入图片描述
然后用中间的acoustic feature代替MFCC,进行HMM计算。当然还可以用DNN的中间层(Last hidden layer or bottleneck layer are also possible.)来进行计算。

Method 2: DNN-HMM Hybrid

思想是用DNN来代替HMM中的GMM。
在这里插入图片描述
从公式上面看,DNN干的事情和GMM是不一样的,但是前人做了一个变化:

在这里插入图片描述
这个改进有两点比较牛叉:
第一个:不用改动原有的程序,只用替换内部GMM的部分,换成DNN就可以,改动较小,对于外部的语音识别调用者而言完全没有感觉。
第二个:之前每个State都要对应自己的GMM,虽然后面有改进如何减少GMM的数量,但是仍然在参数上量非常大,换成DNN后,发现无论你是多少个state,都用一个DNN来搞定,减少了参数量。而且DNN我们可以用当前STOA的构架,CNN、LSTM都行,可以不断改进。

state classifier

我们下面看下state classifier如何训练,我们知道,state classifier吃MFCC,吐出MFCC对应的state,如果我们有MFCC和state对应的数据,那就很简单,直接训练即可,但是这样的训练数据是不存在的。
我们只知道Acoustic features对应的state sequence集合,但是具体每个Acoustic features对应哪个state我们不知道。
在这里插入图片描述
然后我们先训练一个HMM-GMM Model
然后根据HMM-GMM Model再算Acoustic features对应的state最大几率,从而得到state sequence,进而得到alignment。
在这里插入图片描述
在这里插入图片描述
然后训练出state classifier,也就是DNN1:
在这里插入图片描述
如果担心由于HMM-GMM model性能不好,导致训练出来的DNN1不行的话,我们可以用DNN1替换HMM-GMM model做alignment,继续往下迭代:
在这里插入图片描述
使用这个方法得到人类水准:Human Parity
后面给出了微软、IBM在语音识别上做的一些STOA结果,不贴了。
目前大多数语音识别是用的混合式的方式,相信将来会有更多的End to End的方式。

猜你喜欢

转载自blog.csdn.net/oldmao_2001/article/details/108727428
HMM