隐马尔科夫模型详解

转载请注明地址(http://blog.csdn.net/xinzhangyanxiang/article/details/8522078

学习概率的时候,大家一定都学过马尔科夫模型吧,当时就觉得很有意思,后来看了数学之美之隐马模型在自然语言处理中的应用后,看到隐马尔科夫模型竟然能有这么多的应用,并且取得了很好的成果,更觉的不可思议,特地深入学习了一下,这里总结出来。

马尔科夫过程

马尔科夫过程可以看做是一个自动机,以一定的概率在各个状态之间跳转。

考虑一个系统,在每个时刻都可能处于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)。

隐马尔科夫过程

与马尔科夫相比,隐马尔科夫模型则是双重随机过程,不仅状态转移之间是个随机事件,状态和输出之间也是一个随机过程,如下图所示:

此图是从别处找来的,可能符号与我之前描述马尔科夫时不同,相信大家也能理解。

该图分为上下两行,上面那行就是一个马尔科夫转移过程,下面这一行则是输出,即我们可以观察到的值,现在,我们将上面那行的马尔科夫转移过程中的状态称为隐藏状态,下面的观察到的值称为观察状态,观察状态的集合表示为 O={O1,O2,O3,…OM}。

相应的,隐马尔科夫也比马尔科夫多了一个假设,即输出仅与当前状态有关,可以用如下公式表示:

P(O1,O2,…,Ot|S1,S2,…,St)=P(O1|S1)*P(O2|S2)*...*P(Ot|St)

其中,O1,O2,…,Ot为从时刻1到时刻t的观测状态序列,S1,S2,…,St则为隐藏状态序列。

另外,该假设又称为输出独立性假设。

举个例子

举个常见的例子来引出下文,同时方便大家理解!比如我在不同天气状态下去做一些事情的概率不同,天气状态集合为{下雨,阴天,晴天},事情集合为{宅着,自习,游玩}。假如我们已经有了转移概率和输出概率,即P(天气A|天气B)和P(事情a|天气A)的概率都已知道,那么则有几个问题要问(注意,假设一天我那几件事情中的一件),

1.             假如一周内的天气变化是 下雨->晴天->阴天->下雨->阴天->晴天->阴天,那么我这一周 自习->宅着->游玩->自习->游玩->宅着->自习的概率是多大?

2.             假如我这一周做事序列是 自习->宅着->游玩->自习->游玩->宅着->自习,

不知道天气状态的情况下这个做事序列的概率是多大?

3.             假如一周内的天气变化是 下雨->晴天->阴天->下雨->阴天->晴天->阴天,那我们这一周最有可能的做事序列是什么?

4.             假如我这一周做事序列是 自习->宅着->游玩->自习->游玩->宅着->自习,那么这一周的天气变化序列最有可能是什么?

对于第一个问题,我想大家应该都能很快知道怎么算。(啥?不知道,答案在本文最后)

隐马模型基本要素及基本三问题

综上所述,我们可以得到隐马尔科夫的基本要素,即一个五元组{S,N,A,B,PI};

S:隐藏状态集合;

N:观察状态集合;

A:隐藏状态间的转移概率矩阵;

B:输出矩阵(即隐藏状态到输出状态的概率);

PI:初始概率分布(隐藏状态的初始概率分布);

其中,A,B,PI称为隐马尔科夫的参数,用X表示。

由上述问题可以引出隐马尔科夫的三个基本问题的其中两个,下文中为了简便,将隐马尔科夫模型简称为HMM(Hiden Markov Model)。

HMM的三个基本问题是:

1.      给定模型(五元组),求某个观察序列O的概率(样例问题2)

2.      给定模型和观察序列O,求可能性最大的隐藏状态序列(样例问题4)。

3.      对于给定的观察序列O,调整HMM的参数,使观察序列出现的概率最大。

前向算法

对于第一个基本问题,计算公式为:

即对于观察序列O,我们需要找出所有可能的隐藏状态序列S,计算出在给定模型下S输出为O的概率(就是样例问题一啊),然后计算概率之和。

直观上看,假如序列O的长度为T,模型的隐藏状态集合大小为N,那么一共有NT个可能的隐藏状态序列,计算复杂度极高O(NT),暴力算法太慢了。

解决方案就是动态规划(Dynamic Programming)。

假设观察序列为O1,O2,O3,….,Ot. 在时刻i(1<i<=t)时,定义C为产生序列O1,O2,…,Oi且Si=Sk的概率:

其中,Sk为任意一个隐藏状态值。

则C(i+1,Or)的计算公式为:

其中,Sr为任意一个隐藏状态值。A为转移概率。B为隐藏状态到观察状态的概率。为了便于理解,还是看图:

C(3,下雨)考虑了t=1和t=2的所有组合情况,同时也是C(4,下雨|阴天|晴天)的子问题。C(3,阴天)和C(3,晴天)也是如此计算,而C(i+1,Sr)计算公式则可以表示成:

由图知:C(4,阴天)=[C(3,下雨)*A(下雨,阴天)+C(3,阴天)*A(阴天,阴天)+C(3,晴天)*A(晴天,阴天)]*B(阴天,自习)。

通过图片,大家应该能直观的理解该算法了,该算法又称为前向算法,那还有后向算法?是的,后向算法就是这个算法倒过来嘛,也是动态规划,这里就不赘述了,有兴趣的看参考文献。另外,这里没有讲解如何初始化概率,也可以去参考文献里查证。

维特比算法

现在,HMM的第一个基本问题解决了,下面开始解决第二个问题,第二个问题又称为解码问题,同样的,暴力算法是计算所有可能性的概率,然后找出拥有最大概率值的隐藏状态序列。与问题一的暴力解决方案类似,复杂度为O(NT)。

那应该用什么方案呢?

毫无疑问,还是动态规划啊!

假设观察序列为O1,O2,O3,….,Ot. 在时刻i(1<i<=t)时,定义D为观察O1,O2,…,Oi且Si=Sk时产生该观察序列的最大概率:

其中,S1,S2,….S(i-1),在此时也已经可以得到,因为它们是子问题啊。

童鞋们有么有看到该公式和上面的前向算法的差异?一个是对子问题求和,一个是对子问题求最大值啊。

当然,对于本问题来说,因为需要求出的是使得观察序列概率最大的隐藏状态的序列,而不是最大概率,所以,在算法计算过程中,还需要记录前一个隐藏状态的值。比如C(4,阴天)的最大值是有子问题C(3,下雨)得来的,那么需要在C(4,阴天)这个节点记录前置状态为下雨。

由于本算法和前向算法只是计算公式的不同,所以参考图是一样的,本算法还可以参考上面算法的图;同样的,解释中没有提到初始化,可以去看参考文献。

本算法又称为维特比算法,维特比是人名,这个老先生在上世纪70年代发明的该算法,但在现代人看来没什么神秘,可见问题在解决后可能会很简单,所以不管是生活上还是学术上都不要畏惧,勇于战而后知战之易矣。

相信理解了前向算法和维特比算法后,大家对样例问题2和样例问题4都能解决了吧,对于样例问题3,其实跟维特比算法差不多,只不过是在观察状态的空间中寻找最优解。

对于基本问题三,本人还没有理解的太透彻,这里就不献丑了。

应用

说了这么多,HMM到底有什么应用呢?

HMM一开始是在信息论中应用的,后来才被应用到自然语言处理还有其他图像识别等各个方面。下面举两个例子说明他的应用,一个是输入法的整句解码,一个是语音识别。有图为证:

输入法把拼音看做是观察状态,需要得到的汉字为隐藏状态,这样,输入法的整句解码就变成了维特比解码,其转移概率即是二元语言模型,其输出概率即是多音字对应不同拼音的概率。

将上图中的拼音换成语音,就成了语音识别问题,转移概率仍然是二元语言模型,其输出概率则是语音模型,即语音和汉字的对应模型。

扩展

尽管HMM模型解决问题的效果已经很好了,但在学术上,精益求精,总的想着方法使它变得更好。于是出现了针对HMM的各种扩展,这里介绍两种吧。

一种是对三大假设的时齐性进行扩展,即假设状态转移概率与时间有关。这在输入法中也有实际意义的,比如作为主语的ta(他,它,她)与名词ta(塔)和动词ta(踏,蹋)等出现的位置一般是不一样的,主语一般出现在句首或各种从句的开始端;比如,我们会说“他是谁”,而极少说“塔是谁”(不排除有个别奇葩的人的名字只有一个塔字),这样,我们在考虑‘ta’shi’shui’这个拼音串时,第一个字ta考虑他,它,她的概率会大一些,塔字的概率就会小一些。

在这个方面,参考文献中的论文《一种非时齐性的隐马尔科夫模型在音字转换中的应用》中提到了一种实现方法,统计语言模型时,使用词语在句子中的位置作为位置统计出词语的平均位置。在音字转换的语言模型的使用时,使用拼音所对应的词语位置与平均位置的一个函数作为权重重新估计语言模型的概率。公式如下:

其中PML(w1|w2)是最大似然估计的转移概率,f(.)则为权重函数。

另外一种扩展HMM的方法则是对无后效性假设进行扩展,原来只假设某状态只与前一状态有关,以至于只能使用语言模型中的二元模型,现在则假设某状态与前两个甚至更多个状态有关,这样就能使用高元语言模型了。现在我们考虑只与前两个有关,那么这是虽然使用了三元模型,但是维特比算法的计算就会出现问题,因为现在t时刻的状态的概率不仅要考虑t-1时刻的状态,还要考虑t-2时刻的状态。

用来解决维特比算法在三元模型下的问题(也成为二阶HMM问题)的方法是:合并前后两个状态将二阶HMM问题转换成一阶HMM问题。

合并二阶HMM

对于合并二阶HMM来说,可以看下图:

为了简便起见,我把隐藏状态改为两个,下雨和晴天。由图可以看到,当t>=2时,节点中保存着一些小节点,这些小节点的数目即为上一个状态的状态数目,小节点的值意义为到达该时刻状态为Sr且前一时刻状态为Sk时能够产生状态序列的最大概率。比如背景为绿色的小节点的值的意义为时刻3为下雨,时刻2为下雨时去自习->宅着->游玩的最大概率。(注意,节点表示时刻i时某个状态,小节点表示节点中保存的前一状态的节点,比如绿色的那个节点)。

对于时刻i(i>2),每个小节点的概率为

那么对于时刻i+1,小节点的概率为:

然后,从时刻t中寻找最大的小节点回溯即可。

样例问题一答案

上面样例问题中第一问的答案是:

概率P=P(下雨)*P(晴天|下雨)*…*P(阴天|晴天)*P(自习|下雨)*P(宅着|晴天)*…*P(自习|阴天)

其中,第一项P(下雨)为初始概率分布(还记得马尔科夫的t=1时刻的概率分布么??)。

参考文献:

一种非时齐的隐马尔科夫模型及其在音字转换中的应用

统计语言模型的研究与应用

统计和规则相结合的语言模型的中文输入法中的应用

基于Markov链的整句输入算法研究与实现

参考文献及本文pdf下载地址:猛击这里

时间: 2024-11-10 14:58:02

隐马尔科夫模型详解的相关文章

七月算法-12月机器学习在线班--第十七次课笔记-隐马尔科夫模型HMM

七月算法-12月机器学习--第十七次课笔记-隐马尔科夫模型HMM 七月算法(julyedu.com)12月机器学习在线班学习笔记http://www.julyedu.com 隐马尔科夫模型 三个部分:概率计算,参数估计,模型预测 1,HMM定义 HMM由初始概率分布π.状态转移概率分布A以及观测概率分布B确定. Eg:以中文分词为例子 隐状态为="2",是不是终止字,是/否?(Y/N)即是不是最后一个字. A矩阵:第一个:当前是终止字,下一个也是终止字的概率 B是当前的隐状态是终止词,

隐马尔科夫模型HMM

隐马尔科夫模型HMM 作者:樱花猪 摘要: 本文为七月算法(julyedu.com)12月机器学习第十七次课在线笔记.隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔科夫过程.其难点是从可观察的参数中确定该过程的隐含参数,然后利用这些参数来作进一步的分析.在早些年HMM模型被非常广泛的应用,而现在随着机器学习的发展HMM模型的应用场景越来越小然而在图像识别等领域HMM依然起着重要的作用. 引言: 隐马尔科夫模型是马尔科夫链的一种,它

隐马尔科夫模型python实现简单拼音输入法

在网上看到一篇关于隐马尔科夫模型的介绍,觉得简直不能再神奇,又在网上找到大神的一篇关于如何用隐马尔可夫模型实现中文拼音输入的博客,无奈大神没给可以运行的代码,只能纯手动网上找到了结巴分词的词库,根据此训练得出隐马尔科夫模型,用维特比算法实现了一个简单的拼音输入法.githuh地址:https://github.com/LiuRoy/Pinyin_Demo 原理简介 隐马尔科夫模型 抄一段网上的定义: 隐马尔可夫模型 (Hidden Markov Model) 是一种统计模型,用来描述一个含有隐含

隐马尔科夫模型(HMM)

基本概念 1Markov Models 2Hidden Markov Models 3概率计算算法前向后向算法 1-3-1直接计算 1-3-2前向算法 1-3-3后向算法 4学习问题Baum-Welch算法也就是EM算法 5预测算法 基本概念 1.1Markov Models 处理顺序数据的最简单的方式是忽略顺序的性质,将观测看做独立同分布,然而这样无法利用观测之间的相关性.例如:预测下明天是否会下雨,所有数据看成独立同分布只能得到雨天的相对频率,而实际中,我们知道天气会呈现持续若干天的趋势,观

机器学习算法总结(七)——隐马尔科夫模型(前向后向算法、鲍姆-韦尔奇算法、维特比算法)

概率图模型是一类用图来表达变量相关关系的概率模型.它以图为表示工具,最常见的是用一个结点表示一个或一组随机变量,结点之间的变表是变量间的概率相关关系.根据边的性质不同,可以将概率图模型分为两类:一类是使用有向无环图表示变量间的依赖关系,称为有向图模型或贝叶斯网:另一类是使用无向图表示变量间的相关关系,称为无向图模型或马尔科夫网. 隐马尔科夫模型(简称HMM)是结构最简单的动态贝叶斯网,是一种著名的有向图模型,主要用于时间序数据建模,在语音识别,自然语言处理,生物信息,模式识别中有着广泛的应用,虽

隐马尔科夫模型(前向后向算法、鲍姆-韦尔奇算法、维特比算法)

概率图模型是一类用图来表达变量相关关系的概率模型.它以图为表示工具,最常见的是用一个结点表示一个或一组随机变量,结点之间的变表是变量间的概率相关关系.根据边的性质不同,可以将概率图模型分为两类:一类是使用有向无环图表示变量间的依赖关系,称为有向图模型或贝叶斯网:另一类是使用无向图表示变量间的相关关系,称为无向图模型或马尔科夫网. 隐马尔科夫模型(简称HMM)是结构最简单的动态贝叶斯网,是一种著名的有向图模型,主要用于时间序数据建模,在语音识别,自然语言处理,生物信息,模式识别中有着广泛的应用,虽

隐马尔科夫模型—2

二 定义 (1) 基本定义 在上一篇中,我们通过一个给母亲打电话预测天气的例子,来引入隐马尔科夫模型.下面我们将结合一中的例子来形式化的定义隐马尔可夫模型.隐马尔科夫模型是关于时序的概率模型,描述的由一个隐藏的马尔科夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程.在我们这个例子中,就是由一个隐藏的马尔科夫链生成每天的天气(状态),再由每天的天气决定每天母亲下班以后做什么(观测)的随机过程.隐藏的马尔科夫链随机生成的状态的序列,称为状态序列,也就是最近一段时间

隐马尔科夫模型

特征向量:跟踪框位置相对轨迹中心的比值,角度,速度. 马尔科夫模型: State Sequence, q1 q2 ...... qT t个状态之间的转移可见,则这个时间序列的概率是πq1 × aq1q2 × ...... × aqT-1qT 隐马尔科夫模型: 状态不可见(隐藏),只能从观察值推测出,所以由观察值推测该时刻的状态有个观察值概率b. πq1 × bq1( o1 ) × aq1q2 × bq2( o2 ) × ...... × aqT-1qT × bqT( oT ), 三个问题: 1.

HMM基本原理及其实现(隐马尔科夫模型)

HMM(隐马尔科夫模型)基本原理及其实现 HMM基本原理 Markov链:如果一个过程的“将来”仅依赖“现在”而不依赖“过去”,则此过程具有马尔可夫性,或称此过程为马尔可夫过程.马尔可夫链是时间和状态参数都离散的马尔可夫过程.HMM是在Markov链的基础上发展起来的,由于实际问题比Markov链模型所描述的更为复杂,观察到的时间并不是与状态一一对应的,而是通过一组概率分布相联系,这样的模型称为HMM.HMM是双重随机过程:其中之一是Markov链,这是基本随机过程,它描述状态的转移,是隐含的.