隐马可夫模型及相关算法

    本文是 Daniel Jurafsky & James H. Martin的《Speech and Language Processing》一书第九章Hidden Markov Model的读书笔记。


一、相关定义

1.Observed Markov Model(Markov Chain)

    首先介绍一下马可夫链(或者叫显式马可夫模型):


    这里直接把原书配图拿来做例子。

    从定义上来说,显式马可夫模型其实就是一个带权的确定有限自动机,其中每条边的权值都是一个转移发生的概率。具体定义如下:

      

    也就是由状态集Q、状态转移矩阵A、特殊的开始状态和终止状态构成的。

    由于权值的实际意义是概率,因此显然有:


    同时,Markov Chain还满足Markov假设,即在一阶Markov Chain中,转移到某个状态的概率只跟上一个状态有关,即

    

    Markov Chain还有另一种表示形式,即不显式的给出开始和终止状态,改为给出一个概率向量π,表示Markov Chain在每个状态开始的概率;再给出一个接受状态集合QA,表示所有可行的终止状态。


2.Hidden Markov Model

    在Markov Chain中,所有状态都是可观测的,因此我们计算出的某个状态序列出现概率是有实际意义、可以被观测验证的。但是在现实生活中,很多问题中的“状态”是不可观测的;或者说,可以观测到的东西无法建模为“状态”进行研究。因此我们引入了隐马可夫模型,它的定义如下:


    可以看出,与Markov Chain相比,HMM增加了一个观测序列O,和每个状态取到不同观测值的概率分布B。

    同样,与Markov Chain类似,HMM也有不指定初始和终止状态的表示方式,同时也需要满足一阶Markov假设。


    

    同时,观测值也只依赖于产生该观测的状态,而与其他状态或观测无关:


    下图是原文举出的一个HMM的例子:


    注意到如上图中的HMM中,任意两个状态之间转移的概率都不为零,这样的HMM也被称为全连接的HMM(fully connected HMM)。有时我们会用到非全连接的HMM,比如Bakis HMM(left-to-right HMM)中,只能从标号较小的状态转移到标号较大的状态,这样的HMM常常用于给演讲这样的时间序列建模。

    以上就是HMM模型的全部相关定义。在使用HMM模型时,我们主要要解决三类问题:

  1. 可能性计算(Likelihood):给定一个HMM λ=(A, B)和一个观测序列O,计算对于λ,O出现的概率(P(O|λ));
  2. 解码问题(Decoding):给定一个HMM λ=(A, B)和一个观测序列O,计算O所对应的隐状态序列中出现可能性最大的一个;
  3. 学习问题(Learning):给出HMM λ的状态集合和一个观测序列O,学习HMM的参数矩阵A和B。

    以上这三个问题将在下面一一解决。


二、可能性问题(Likelihood):前向算法

    首先给出问题的正式叙述:

   

    对比Markov Chain,由于状态和观测并不是同一个东西,我们不能直接计算出某个观测序列出现的概率,但是如果给定了隐状态序列,计算给定的观测序列出现的概率就很容易了:

    

    如上所示,根据马可夫假设,由于每个观测出现这一事件与其他观测出现和其他隐状态都是独立的,只需要把对应的P(o|q)乘起来就可以了。

    事实上,由于我们不知道对应的隐状态序列,所以隐状态序列为Q且观测序列为O的概率可以如下表示:


    因此我们可以对于所有可能出现的隐状态序列,观测到观测值序列O的概率为:


    事实上,对于一个有N个可能的隐状态、观测序列O长度为T的HMM来说,可能出现的隐状态序列共有T^N(原文此处为N^T)种。对于实际问题,N和T可能都非常大,指数时间的朴素算法明显不适用。因此我们提出了一种基于动态规划的多项式时间算法前向算法(Forward Algorithm),其时间复杂度为O(N^2 T)。

    作为一种动态规划算法,前向算法的本质就是填表。这里,我们用α(t, j)表示对于HMM λ,在已经观察到前t个观测值之后处于状态j的概率。即:

    根据之前的讨论,显然有:


    其中各项的意义如下:


    现在可以写出算法的伪代码如下:


    如图为算法的示意图:



三、译码问题(Decoding):The Vertibi Algorithm

    对于HMM这种包含隐状态的模型,判断导致某个观测序列产生的隐状态序列的任务,通称为解码/译码任务(Decoding Task)。对于HMM来说,正式的定义如下所示:


    直接的想法是,既然我们可以计算出每个可能的隐状态序列产生出已知的观察序列的概率,那么只需要枚举所有的隐状态序列,就能找出可能性最大的一个。

    显然,朴素的算法需要指数时间,在解决实际问题时是不现实的。有了解决上一个问题的经验,我们可以发现,根据马可夫假设,由于第i个观测值对应的隐状态的概率分布与前i-2个观测和状态都无关,所以前i个观测值对应的最优隐状态序列一定以前i-1个观测值对应的隐状态序列为前缀。也就是说,该问题具有最优子结构性质,可以实用动态规划算法进行求解。

    具体的算法与Likelihood问题求解的前向算法非常类似,区别是状态转移方程中的求和改为求最大值,同时在转移时要记下来每次选择的隐状态一遍后续输出。具体算法伪码及示意图如下: 


 


四、训练(Training):前-后向算法

    HMM的第三种常见问题是训练(学习)问题,也就是给定隐状态集合和观测序列,训练HMM的参数矩阵A和B。

    解决训练问题的标准算法是forward-backward算法,也称为Baum-Welch算法,它是EM算法(Expectation Maximization)的一个特例。EM算法是一种迭代算法,即首先从初始的参数矩阵开始进行迭代,根据估测值与观测值的偏差更新矩阵,逐渐优化预测。

    我们首先考虑较为简单的训练显式马可夫模型。对于显式的马可夫链来说,转移矩阵A可以用最大似然法进行估计(C(i->j)代表从i到j的转移数目):


    对于马可夫链来说,如上计算很容易做到。但是对于HMM来说,由于无法直接确定隐状态序列,不能直接进行计算。

    在Likelihood问题中,我们使用了前向算法,其中定义了前向概率(Forward Probability),即给定前k-1个观测值,第k个状态取状态q[i]的概率。这里我们再定义后向概率(Backward Probability),表示已知t时刻处在状态i,则t+1到最后的观测序列为给定序列的概率:


    后向概率的计算方法与前向算法类似:






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值