AI大语音(五)——隐马尔科夫模型(HMM)
点击上方“AI大道理”,选择“置顶”公众号
重磅干货,细致入微AI大道理
——————
1HMM基础
一模型、两假设、三问题
1)一个模型
随机过程:是依赖于参数的一组随机变量的全体,参数通常是时间。随机变量是随机现象的数量表现,其取值随着偶然因素的影响而改变。
例如,某商店在从时间t0到时间tK这段时间内接待顾客的人数,就是依赖于时间t的一组随机变量,即随机过程。
马尔科夫过程:随机过程的一类,系统下一时刻的状态仅与单前状态有关。
隐马尔科夫模型(HMM):用来描述一个含有未知参数的马尔科夫过程。
隐马尔可夫模型是关于时间序列的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态序列 (state sequence),再由各个状态生成一个 观测而产生观测序列 (observation sequence)的过程,序列的每一个位置又可以看作是一个时刻。
2)两个基本假设
齐次马尔可夫性假设:隐藏的马尔可夫链在时刻t的状态只和t-1的状态有关。
观测独立性假设:观测只和当前时刻的状态有关。
3)三大问题
1) 概率计算问题。即给定模型λ=(A,B,Π)λ=(A,B,Π)和观测序列O={o1,o2,...oT}O={o1,o2,...oT},计算在模型λ下观测序列O出现的概率P(O|λ)。这个问题的求解需要用到前向算法、后向算法和直接计算法。
2)解码问题。即给定模型λ=(A,B,Π)和观测序列O={o1,o2,...oT},求给定观测序列条件下,最可能出现的对应的状态序列,这个问题的求解需要用到基于动态规划的Viterbi算法。
3)模学习问题。即给定观测序列O={o1,o2,...oT},估计模型λ=(A,B,Π)的参数,使该模型下观测序列的条件概率P(O|λ)最大。这个问题的求解需要用到基于EM算法的Baum-Welch算法。
2 HMM的隐状态
隐状态、箱子、第K个高斯
隐藏状态是抽象出来的概念,由于语音信号在一个长时间断内是非平稳信号,而在一个较短的时间内则可近似看做平稳的(比如50毫秒)。平稳信号的特点在于信号的频谱分布是稳定的,不同时间段的频谱分布相似。隐马尔可夫模型将一小段频谱相似的连续信号归为一个隐状态。Viterbi算法对齐就是为了找到哪些帧归于哪个隐状态,隐马尔可夫模型的训练过程是最大化似然度,每一个状态产生的数据用一个概率分布表示。只有当相似的连续信号尽可能被归为同一个状态,似然度才能尽可能的大
类比箱子和小球,手从哪个箱子拿的球不知道,只知道拿出来后看见的小球,问小球来自哪个箱子的可能。其中,箱子就是隐状态,小球就是可观测的。箱子中有不同小球的比例,或者分布,而HMM中也有隐状态对应到特征向量的概率分布。假如箱子中小球分布符合高斯分布,假设HMM中隐状态中特征符合高斯分布,GMM混合高斯模型就是在模拟这个分布,理解性的表达可以说模拟隐状态中可观测特征的比例。只不过一个箱子中三个小球比列为3:2:1,而HMM一个隐状态中有39种特征,也是有占比。
GMM中也有隐状态,特征向量不知道来自哪个Gaussion。K1、K2、K3组成一个GMM,K1、K2、K3类比箱子1、箱子2、箱子3,类比HMM中状态1、状态2、状态3。
3 概率计算问题
前向算法、后向算法、Viterbi
概率计算问题(评估问题、序列分类问题、求可观测问题):
即给定模型λ=(A,B,Π)λ=(A,B,Π)和观测序列O={o1,o2,...oT}O={o1,o2,...oT},计算在模型λ下观测序列O出现的概率P(O|λ)。
1)直接法(不用)
2)前向算法
前向算法实现:
3)后向算法
后向算法实现:
4)Viterbi算法(近似)
可以回溯到最优的状态序列,求最优路径的概率代替所有路径的概率和P(O|λ)。
灵魂的拷问:这样计算最优路径的概率代替所有路径概率和P(O|λ),是不是不准了呢?又为什么能代替呢?
AI大语音:在实际语音识别中,是可以代替的。因为概率的分布比较尖,也就是某个位置的概率会非常大,其他比较小,最优路径的概率跟所有路径的概率差不多。那条最优路径的概率就如同战场上的将军、游戏里的大boss,战力已经接近总战力了,所有和所有路径的概率和很接近。
既然可以近似,那两种算法的概率应该差不多大才是。对比一下程序中前向算法和Viterbis算法求出来的概率。
灵魂的拷问:一个0.13级别、一个0.014级别的,这也叫差不大嘛?都差一个数量级了。
AI大语音:转移矩阵、发射矩阵中的概率差别不是特别大的时候是不能用来近似的,程序中的例子不具有代表性,不是类似语音识别的例子,在大多数语音识别应用中求出来两者的概率才会差不多,才能近似代替。
4 解码问题
Viterbi算法、近似算法
解码问题(对齐问题、预测问题、序列标注问题、求隐状态问题)
即给定模型λ=(A,B,Π)和观测序列O={o1,o2,...oT},求给定观测序列条件下,最可能出现的对应的状态序列,这个问题的求解需要用到基于动态规划的Viterbi算法。
Viterbi算法是最优路径算法的一种。最优路径算法:
穷举法
方法:把所有可能路径都计算一遍,最优路径自然就出来了。
优点:必然能找到最优路径。
缺点:计算量太大。
A*算法
方法:每一步只走最好走的路(目光短浅)
优点:计算快,而且这种贪心或者说启发式的算法,通常情况下,效果还是不错的。
缺点:很难找到最优解,陷入局部最优
beam search (波束搜索)
方法:每一步只走最好走的前N条路。这里的N也叫Beam Width。是A*算法的改进,当N=1时,退化为A*算法,当N=N时,退化为穷举法。
优点:N设置良好的话效果不错。
缺点:Beam Width越大,找到最优解的概率越大,相应的计算复杂度也越大。
1) Viterbi算法
方法:记录每个时刻的每个可能状态的之前最优路径的概率,同时记录最优路径的前一个状态,不断向后迭代,找到最后一个时间点的最大概率值对应的状态,回溯找到最优路径。
注意:Viterbi算法前向时只是计算概率,并记住,后向回溯时才得到最优路径。
算法实现:
2) 近似算法(不常用)
近似算法是前向计算时最大的就选了这个路径,也就是单步最大的路径组合成最优路径;而Viterbi是前向只计算并记住,根据最后最大的那个概率回溯选择路径。
5 学习问题
Viterbi学习算法、Baum-Welch算法
学习问题(训练问题、参数估计、求模型问题)
即给定观测序列O={o1,o2,...oT},估计模型λ=(A,B,Π)的参数,使该模型下观测序列的条件概率P(O|λ)最大。这个问题的求解需要用到基于EM算法的Baum-Welch学习算法和Viterbi学习算法。
1)Viterbi学习算法(硬对齐)
Viterbi算法需要先初始化一个HMM模型λ=(A,B,Π)。
在语音识别应用中由于HMM是从左到右的模型,第一个必然是状态一,即P(q0=1)=1。所以没有pi这个参数了。
1)Baum-Welch学习算法(软对齐)
同样,在语音识别应用中没有pi。
附录(魔鬼写手)
——————
浅谈则止,细致入微AI大道理
扫描下方“AI大道理”,选择“关注”公众号
欢迎加入!
▼下期预告▼AI大语音(六)——混合高斯模型(GMM)
▼往期精彩回顾▼
AI大语音(一)——语音识别基础
AI大语音(二)——语音预处理
AI大语音(三)——傅里叶变换家族
AI大语音(四)——MFCC特征提取