在讲隐含马尔科夫之前先介绍下马尔科夫过程:
马尔科夫过程
马尔科夫过程可以看做是一个自动机,以一定的概率在各个状态之间跳转。
考虑一个系统,在每个时刻都可能处于N个状态中的一个,N个状态集合是 {S1,S2,S3,...SN}。我们现在用q1,q2,q3,…qn来表示系统在t=1,2,3,…n时刻下的状态。在t=1时,系统所在的状态q取决于一个初始概率分布PI,PI(SN)表示t=1时系统状态为SN的概率。
马尔科夫模型有两个假设:
1. 系统在时刻t的状态只与时刻t-1处的状态相关;(也称为无后效性)
2. 状态转移概率与时间无关;(也称为齐次性或时齐性)
第一条具体可以用如下公式表示:
P(qt=Sj|qt-1=Si,qt-2=Sk,…)= P(qt=Sj|qt-1=Si)
其中,t为大于1的任意数值,Sk为任意状态
第二个假设则可以用如下公式表示:
P(qt=Sj|qt-1=Si)= P(qk=Sj|qk-1=Si)
其中,k为任意时刻。
下图是一个马尔科夫过程的样例图:
可以把状态转移概率用矩阵A表示,矩阵的行列长度均为状态数目,aij表示P(Si|Si-1)。
有隐含马尔科夫模型,就有不隐含的马尔科夫模型,先了解下不隐含的马尔科夫模型。
马尔科夫模型,是用来探索随机过程的,也即探索如何求解随机变量的时间序列(
)。但是, 如果是纯粹随机的,那么显然是不可能求解的,于是马尔科夫为了简化问题,提出了一个假设:随机过程中各个状态 的概率分布,至于它的前一个状态 有关,即P( | )=P( | ),这样的话,相当于将随机过程变成了“伪随机过程“,也可以求近似解了。这个假设,后来就称之为马尔科夫假设,而符合这个假设的随机过程,则成为马尔科夫过程,也成为马尔科夫链。隐含马尔科夫模型:
是马尔科夫链的一个扩展:随机变量的时间序列(
)符合马尔科夫假设,同时隐含了一个状态,就是每个时刻t, 会输出一个符号 ,而且 和 相关且仅和 相关(独立输出假设,一个很容易想象的现实场景就是语音输出的识别)。好,概念说清楚了,但是隐含马尔科夫模型到底有啥用呢?以语音识别为例,就是可以用来求解正确概率最高的文本翻译。
设想,(
)就是语音信号,{ }是语音产生的文本翻译,那么我们要求解的,就是使得P( | )达到最大值的序列( )。根据隐含马尔科夫模型,可以得到公式1:
P(
=
根据贝叶斯定理,我们又可以得到公式2:
P(
=P(
| )*P( )/P( )由于语音序列的文本翻译一旦产生,就不会有变化,因此P(
)可以处理成一个常数,因此根据公式1和公式2,我们可以得到: P(
P(
其中,
代表语音 产生文本翻译 的概率是多大, 代表语音 产生的概率多大,很显然,这些参数,是可以用训练数据,得到初始值的。这样,我们就能不断输入数据反复训练,得到一个可靠的语音识别模型。如果进行详细的拆分,隐含马尔科夫模型,其实就是解决如下三个关键问题:
1、给定一个模型(HMM),计算某个特定的输出序列的概率。
举例:
已知语音序列{
}的转移概率P( | ),也就是根据上一段语音 得到下一段语音 的概率;已知以及语音
时得到文本 的生成概率P( | );可以解得:得到的文本翻译序列{
},可以计算得到有多大的概率是正确的。业界对应的算法是Forward-Backward算法,前向后向算法。
2、给定一个模型和某个特定的输出序列,找到最可能产生这个输出的状态序列(隐藏序列状态即解码)。
举例:
已知语音序列{
}的转移概率P( | ),也就是根据上一段语音 得到下一段语音 的概率;已知以及语音
时得到文本 的概率P( | );已知文本翻译序列{
}可以解得:概率最大的产生该文本翻译序列的语音序列{
}。 业界对应的算法是Viterbi算法,维特比算法。
3、给定足够量的观测数据,如何估计隐含马尔科夫模型的参数。
举例:
已知观测数据语音序列{
},文本翻译序列{ };可以解得:
转移概率P(
生成概率P(
业界对应的算法是Baum-Welch算法,鲍姆-韦尔奇算法。
应用
说了这么多,HMM到底有什么应用呢?
HMM一开始是在信息论中应用的,后来才被应用到自然语言处理还有其他图像识别等各个方面。下面举两个例子说明他的应用,一个是输入法的整句解码,一个是语音识别。有图为证:
![](https://img-my.csdn.net/uploads/201301/20/1358665136_7599.jpg)
输入法把拼音看做是观察状态,需要得到的汉字为隐藏状态,这样,输入法的整句解码就变成了维特比解码,其转移概率即是二元语言模型,其输出概率即是多音字对应不同拼音的概率。
将上图中的拼音换成语音,就成了语音识别问题,转移概率仍然是二元语言模型,其输出概率则是语音模型,即语音和汉字的对应模型。
扩展
尽管HMM模型解决问题的效果已经很好了,但在学术上,精益求精,总的想着方法使它变得更好。于是出现了针对HMM的各种扩展,这里介绍两种吧。
一种是对三大假设的时齐性进行扩展,即假设状态转移概率与时间有关。这在输入法中也有实际意义的,比如作为主语的ta(他,它,她)与名词ta(塔)和动词ta(踏,蹋)等出现的位置一般是不一样的,主语一般出现在句首或各种从句的开始端;比如,我们会说“他是谁”,而极少说“塔是谁”(不排除有个别奇葩的人的名字只有一个塔字),这样,我们在考虑‘ta’shi’shui’这个拼音串时,第一个字ta考虑他,它,她的概率会大一些,塔字的概率就会小一些。
在这个方面,参考文献中的论文《一种非时齐性的隐马尔科夫模型在音字转换中的应用》中提到了一种实现方法,统计语言模型时,使用词语在句子中的位置作为位置统计出词语的平均位置。在音字转换的语言模型的使用时,使用拼音所对应的词语位置与平均位置的一个函数作为权重重新估计语言模型的概率。公式如下:
![](https://img-my.csdn.net/uploads/201301/20/1358665186_2226.png)
其中PML(w1|w2)是最大似然估计的转移概率,f(.)则为权重函数。
另外一种扩展HMM的方法则是对无后效性假设进行扩展,原来只假设某状态只与前一状态有关,以至于只能使用语言模型中的二元模型,现在则假设某状态与前两个甚至更多个状态有关,这样就能使用高元语言模型了。现在我们考虑只与前两个有关,那么这是虽然使用了三元模型,但是维特比算法的计算就会出现问题,因为现在t时刻的状态的概率不仅要考虑t-1时刻的状态,还要考虑t-2时刻的状态。
用来解决维特比算法在三元模型下的问题(也成为二阶HMM问题)的方法是:合并前后两个状态将二阶HMM问题转换成一阶HMM问题。
合并二阶HMM
对于合并二阶HMM来说,可以看下图:
![](https://img-my.csdn.net/uploads/201301/20/1358665285_8726.jpg)
为了简便起见,我把隐藏状态改为两个,下雨和晴天。由图可以看到,当t>=2时,节点中保存着一些小节点,这些小节点的数目即为上一个状态的状态数目,小节点的值意义为到达该时刻状态为Sr且前一时刻状态为Sk时能够产生状态序列的最大概率。比如背景为绿色的小节点的值的意义为时刻3为下雨,时刻2为下雨时去自习->宅着->游玩的最大概率。(注意,节点表示时刻i时某个状态,小节点表示节点中保存的前一状态的节点,比如绿色的那个节点)。
对于时刻i(i>2),每个小节点的概率为
![](https://img-my.csdn.net/uploads/201301/20/1358665358_2834.png)
那么对于时刻i+1,小节点的概率为:
参考:
http://blog.csdn.net/sight_/article/details/43307581
https://zhuanlan.zhihu.com/p/21546467