隐马尔可夫模型(一)

基本概念

隐马尔可夫由初始概率分布、状态转移概率分布以及观测概率分布确定。

设Q是所有可能的状态,V是所有可能的观测

Q={q1,q2,...,qN}, V={v1,v2,...,vM}

其中,N为所有可能的状态数,M为所有可能的观测数。

设O是一个长度为T的观测序列,I为对应的状态序列

O={o1,o2,...,oT}, I={i1,i2,...,iT}

状态转移概率矩阵A为

A=[aij]NxN

其中aij=P(qj|qi),表示t时刻处于qi状态转移到t+1时刻qj状态的条件概率。

观测概率矩阵B为

B=[bi(m)]NxM

其中bi(m)=P(vm|qi),表示t时刻处于qi状态下观测到vm的条件概率。

初始状态概率向量π

π=(πi)

其中πi=P(i1=qi),表示t=1时刻下状态为qi的概率。

隐马尔可夫模型λ由初始状态概率向量π、状态转移概率矩阵A和观测概率矩阵B决定(隐马尔可夫模型的三要素),即

λ=(A,B,π)

隐马尔可夫模型基于以下两个基本假设:

 (1)齐次马尔可夫性假设,在任意时刻t的状态只依赖于其前一时刻(t-1)的状态,即

P(it|it-1,ot-1,...i1,o1)=P(it|it-1),  t = 1,2,...T

其中t=1时,P(i1|i0)=πi

(2)观测独立性假设,任意时刻的观测只依赖于该时刻的马尔可夫链的状态,与其他任意前后时刻的观测和状态均无关,即

P(ot|iT,oT,...it+1,ot+1,it,it-1,ot-1,...i1,o1)=P(ot|it)

 3个基本问题

隐马尔可夫模型有三个基本问题:

  1. 概率计算问题。给定模型λ=(A,B,π)和观测序列O={o1,o2,...oT},计算此观测序列出现的概率P(O|λ).
  2. 学习问题。已知观测序列O=(o1,o2,...,oT),估计模型参数λ=(A,B,π),使得在该模型下观测序列的概率P(O|λ)最大,即用极大似然估计的方法估计参数。
  3. 预测问题(解码问题)。已知模型λ=(A,B,π)和观测序列O={o1,o2,...oT},求使得条件概率P(I|O)最大的状态序列I=(i1,i2,...iT),也就是求最有可能的状态序列。

由于目前自然语言处理(NLP)中常利用这个模型来进行中文分词,这里先介绍一下这个例子,帮助理解,具体后面会详细介绍。

中文分词

状态集合Q={B,E,M,S},分别表示开始、结束、中间、单字词,这样从开始到结束表示一个词,一个S状态的观测是一个单字词。

观测序列则为中文字符串。

不难发现,中文分词对应于解码问题。而模型参数一般可以是人工标注(状态)来统计得到各种概率,或者通过上面的学习问题来得到,这里不深入阐述,后面再详细介绍。

概率计算

直接计算法

 给定模型λ=(A,B,π)和观测序列O={o1,o2,...oT},计算此观测序列出现的概率P(O|λ)。我们自然而然地想到用全概率公式,也就是将每种可能的状态序列下的观测序列的条件概率相加,其和就是P(O|λ),假设所有可能的状态序列集合为,则

上式中λ表示给定模型λ的条件下,为避免视觉混淆,可以直接将λ从上式中扣掉,变成,

               (1)

其中,P(O|I)表示已知状态序列I的条件下,观测序列O出现的概率,根据上文独立性假设,各观测的出现相互独立,则,

    (2)

P(I)表示状态序列的概率,假设状态序列为I={i1,i2,...iT},根据上文齐次马尔可夫性假设,各状态只依赖于前一状态,则其概率为

   (3)

然而,由于状态序列集合的数量非常大,可能的状态数位N,根据排列原理,长度为T的状态序列的数量为N^T,计算量非常大,所以需要寻找更好的方法,上面的直接计算法是将观测序列和状态序列的概率独立计算的,显然如果结合这两种序列,并降低一些重复的计算,达到降低计算量。

前向算法

前向概率

给定隐马尔可夫模型λ,定义到时刻t部分观测序列o1,...ot,且状态为it=qi的概率为前向概率,

               (4)

显然有,

t=1时,

t=2时,

...

更一般地,t=t时,

       (5)

所以目标概率,已知模型λ求观测序列出现的概率为,

             (6)

其中T为观测序列的长度。

 观察上面的前向概率的结构不难发现,使用前向概率,通过引入状态变量,就可以从上一时刻t-1的观测序列递推出下一时刻t的观测序列出现的概率。

既然有前向算法,那么对称地,就是有后向算法。

后向算法

后向概率

给定隐马尔可夫模型λ,定义在时刻t状态为qi的条件下,从t+1到T的部分观测序列为ot+1,ot+2,...,oT的概率为后向概率,则

          (7)

于是根据上文的两个基本假设有,

t=T-1时(注意t=T时,在此时刻之后已经没有观测序列了,我们先不讨论t=T的情况),

 , 其中,i为T-1时刻的状态iT-1,j表示下一时刻T的状态iT

t=T-2时,

 , 其中,i表示T-2时刻的状态iT-2,j表示下一时刻T-1的状态iT-1

更一般地,t=t时,

     (8), 其中, i表示t时刻的状态it,j表示下一时刻t+1的状态it+1

观察上三式,为了计算和表示方法,我们增加

t=T时

这样,t=T-1时也满足(8)式。

向后概率计算的是在上一时刻t假设给定状态it,那么在t时刻之后,新的部分观测序列出现的概率,于是可以这么认为,t=T时,总是会出现一个新的部分观测序列(长度为0),其概率为1。这个概率就作为我们计算后向概率的初始值。

现在可以知道,当t=0时,后向概率计算状态为i0条件下的观测序列o1,o2,...,oT的出现概率,此即我们要求的目标概率

             (9)

其中t=0时刻的状态i0并不是一个实际观测时刻的状态,t=1时刻才是真正开始观测的第一个状态,所以a0i表示从还没开始观测开始第一个观测到的状态为i的状态转移概率,其实就是状态i的初始概率πi

下一篇介绍隐马尔可夫模型三个问题中的第二个问题:学习问题

ref

  • 统计学习方法,李航

代码

可以参考github上JIEBA分词

posted @ 2017-06-07 20:24  gaoshoufenmu  阅读(406)  评论(0编辑  收藏  举报