其他分享
首页 > 其他分享> > 语音识别(3)HMM

语音识别(3)HMM

作者:互联网

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。

 

附录(魔鬼写手)

 

 

 

 

 

 

 

 

 

 

 

——————
————————————————
版权声明:本文为CSDN博主「AI大道理」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42734492/article/details/108114821

标签:状态,概率,路径,Viterbi,HMM,算法,语音,序列,识别
来源: https://www.cnblogs.com/Edison-zzc/p/16288077.html