HMM隐马尔科夫模型 学习总结

隐马尔可夫模型(Hidden Markov Model,简称HMM)是结构最简单的动态贝叶斯网(dynamic Bayesian network),这是一种著名的有向图模型,主要用于时序数据建模,在语音识别、自然语言处理等领域有广泛应用。
隐马尔可夫模型中的变量可分为两组,第一组是状态变量 {y1,y2,y3,…yn},其中 yi∈Y表示第i时刻的系统状态。通常假定状态变量是隐藏的、不可被观测的,因此状态变量亦称隐变量(hidden variable)。第二组是观测变量{x1, x2,. . . , xn},其中x ∈X表示第i时刻的观测值。在隐马尔可夫模型中,系统通常在多个状态{ s1, s2,…,sN}之间转换,因此状态变量yi的取值范围Y(称为状态空间)通常是有N个可能取值的离散空间。观测变量xi可以是离散型也可以是连续型。
在这里插入图片描述

图中的箭头表示了变量间的依赖关系。在任一时刻,观测变量的取值仅依赖于状态变量,即 xt由yt确定,与其他状态变量及观测变量的取值无关。同时,t时刻的状态yt仅依赖于t―1时刻的状态yt-1,与其余n-2个状态无关.这就是所谓的“马尔可夫链”(Markov chain),即:系统下一时刻的状态仅由当前状态决定,不依赖于以往的任何状态。基于这种依赖关系,所有变量的联合概率分布为
在这里插入图片描述

除了结构信息,欲确定一个隐马尔可夫模型还需以下三组参数:
状态转移概率:模型在各个状态间转换的概率
输出观测概率:模型根据当前状态获得各个观测值的概率
初始状态概率:模型在初始时刻各状态出现的概率

HMM在序列标注中的应用

在这里插入图片描述

序列标注问题的输入是一个观测序列,输出是一个标记序列或状态序列。问题的目标在于学习一个模型,使它能够对观测序列给出标记序列作为预测。

PPT中举了一个例子,人脑产生一段话,是先产生一段基于语法的词性序列,再在这个词性序列的基础上,产生一句话。
在这里插入图片描述

“John saw the saw”,这段话的词性是"PN V D N"。那如何由序列{“PN V D N”}到{“John saw the saw”}?
在这里插入图片描述

P(x) = P(“John saw the saw”)
P(y) = P(“PN V D N”)
想要得到P(x,y),可由条件概率公式
P(x,y) = P(y) × P(x|y)
先求得 P(y) 和 P(x|y),也就是 P(“PN V D N”) 和 P( “John saw the saw” | “PN V D N” )
而这两个概率,可以从大量语料的训练中得到
在这里插入图片描述

将两个公式展开
P(y) = P(“PN V D N”) = P( “PN” | “Start”) × P( “V” | “PN”) × P( “D” | “V”) × P( “N” | “D”) × P( “End” | “N”)

P(x|y) = P( “John saw the saw” | “PN V D N” ) = P( “John” | “PN” ) × P( “saw” | “V” ) × P( “the” | “D” ) × P( “saw” | “N” )
在这里插入图片描述

上图是展开后的计算公式
下面分别计算P(y) 和 P(x|y),也就是 P(“PN V D N”) 和 P( “John saw the saw” | “PN V D N” )
在这里插入图片描述

第一步:
从大量语料中,得到这四个词性之间的转换概率,可以计算出
P( “PN V D N” ) = P( “PN” | “Start”) × P( “V” | “PN”) × P( “D” | “V”) × P( “N” | “D”) × P( “End” | “N”)
在这里插入图片描述

第二步
同样是在大量语料中,可以分别得到
从词性为PN的词中选到"John"的概率 P( “John” | “PN” )
从词性为V的词中选到"saw"的概率 P( “saw” | “V” )
从词性为D的词中选到"the"的概率 P( “the” | “D” )
从词性为N的词中选到"the"的概率 P( “saw” | “N” )
从而可以得到
P( “John saw the saw” | “PN V D N” ) = P( “John” | “PN” ) × P( “saw” | “V” ) × P( “the” | “D” ) × P( “saw” | “N” )

这样就可以计算出P(x,y)

上面的是一个小热身,现在进入正题

在这里插入图片描述

在上面的例子中,y是知道的,x是不知道的。
现在,x是知道的,而y是要被找出来的,这就成了词性标注问题。
找出y,就是找出令P(y|x)最大时y的取值,因P(x)的值与y无关,故找出令P(y|x)最大时y的取值,也就是找出令P(x,y)最大时y的取值。
在这里插入图片描述

找出P(x,y)最大时的y值有两种方法
第一种方法:穷举法
假设观测序列X长度为L,隐状态序列Y取值有S种状态,那么则需要对每一个隐状态进行S次预测,一共是|S|^L次。
第二种方法:Viterbi算法
时间复杂度为O(L|S|^2)
这是我看到的讲解Viterbi算法很浅显易懂的一篇知乎:
https://www.zhihu.com/question/20136144
维特比算法(Viterbi algorithm)是一种动态规划算法。它用于寻找最有可能产生观测事件序列的-维特比路径-隐含状态序列,特别是在马尔可夫信息源上下文和隐马尔可夫模型中。


下面简单举例说明使用Viterbi算法求S到E的最短路径
在这里插入图片描述
对于t时刻的每个状态,记录下前一个时刻也就是t-1时刻的所有状态到每个t时刻状态的最小路径
在这里插入图片描述
在A1→B1,A2→B1,A3→B1的这三条路径中,A3→B1路径是最短的,故保留A3→B1,删去其他路径。同理,在A1→B2,A2→B2,A3→B2的这三条路径中,A1→B2路径是最短的,故保留A1→B2,删去其他路径。其他的路径也是同理得到的。
在这里插入图片描述
最后发现,S到E只有三条路径,只要从这三条路径中计算出最短的那条就可以得到S→E的最短路径。


但是HMM算法在解决词性标注问题上也存在一些问题(网上拷的)
1、HMM只依赖于每一个状态和它对应的观察对象:
序列标注问题不仅和单个词相关,而且和观察序列的长度,单词的上下文,等等相关。
2、目标函数和预测目标函数不匹配:
HMM学到的是状态和观察序列的联合分布P(Y,X),而预测问题中,我们需要的是条件概率P(Y|X)。

在这里插入图片描述

HMM会给训练集语料中出来没有出现过的序列赋予很高的概率。
再举个例子说明
在训练集中
词性N下一个词性接V,V的观测值是词c,这样的一个序列在训练集中出现9次
词性P下一个词性接V,V的观测值是词a,这样的一个序列在训练集中同样出现9次
词性N下一个词性接D,D的观测值是词a,这样的一个序列在训练集中出现1次
P(V|N) = 0.9 ,P(D|N) = 0.1
P(“c”|V) = 0.5 ,P(“a”|V) = 0.5
P(“a”|D) = 1
在这里插入图片描述
在预测词为a的词性时,当前一个词性为N,计算概率值
P(“a”,N) = P(“a”|N) × P(N)
P(“a”|N) =P (?|N) × P(“a”|?)
当 ?=V 时,P(“a”,N)概率比 ?=D 时的概率值更大
但是训练集中并没有出现过N→V→"a"
如果依据训练集,此处的隐状态应该是D
在这里插入图片描述
对HMM而言,它会觉得语料中没有的N→V→"a"出现的概率比N→D→"a"出现的概率更高。由于这种“脑补”的现象,当训练集很少的时候,HMM的表现比更好一些。但是当训练集很大的时候,HMM的表现就不那么好了。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值