隐马尔可夫模型的Viterbi解码算法

原创 2017年09月21日 08:42:04

前言

前面在做自然语言处理时涉及到一些词性标注的工作,一般会使用隐马尔科夫模型(HMM)来实现词性标注,而HMM模型的解码实现算法一般就会使用Viterbi算法。

关于穷举法

HMM模型有多种应用,这里说的是其中一个常见应用,即根据观察序列找到最可能的隐含状态序列。最朴素的想法就是直接穷举所有可能的隐含状态序列,并计算出每个组合成的状态序列的概率,概率最大的那个组合序列即是最可能的隐含状态序列。举个水藻和天气的例子,穷举出所有可能的隐含状态序列的概率,如下,
P(dry,damp,soggy | sunny,sunny,sunny), P(dry,damp,soggy | sunny,sunny,cloudy), P(dry,damp,soggy | sunny,sunny,rainy), … . P(dry,damp,soggy | rainy,rainy,rainy),最大值对应的序列即为最可能的隐含状态序列。穷举的路径一共有3t条,可以看到随着序列还有状态数的增加,计算量是非常大的。

这里写图片描述

Viterbi算法

上面的穷举法需要的计算量很大,为减少复杂度引入Viterbi算法,Viterbi算法要解决的解码问题就是多步且每步多重选择的最优选择的问题。根据下图就能很清晰看到Viterbi的核心思想,随着时刻增加,每个节点都保存了前一时刻所有节点到该节点的最优值的子路径,如图中红色箭头,当前时刻的某一节点可能的路径为上一时刻所有节点到该节点的路径,但我们只保留其中一条最优路径。依次计算完所有步后,最后通过回溯的方法得到整个过程的最优路径。

这里写图片描述

下面用一个例子说明整个过程,假设有3中状态,序列为t个时刻,p(a1)表示a1节点的值,p(b1)表示b1节点的值,同理其他的节点也一样。对于不同时刻,状态之间的转换概率是不变的,所以p(aa)表示从a状态转移到a状态的概率,不管是从1时刻到2时刻,还是从2时刻到3时刻,都是相同的。同理还有p(ab)、p(ac)、p(ba)…。

这里写图片描述

t+1时刻节点值的计算公式为pt+1(y)=pt(x)p(xy)其中x,y都属于a,b,c一种状态。

我们计算t=2时刻的p(a)的值,它可能从a1到a2、b1到a2或c1到a2,假如a1到a2这条路径计算出来的p(a)最大,那么就保留该路径。同理分别计算p(b)和p(c)的最大值,保留b1到b2的路径,b1到c2的路径。接着计算t=3时刻的p(a)、p(b)和p(c),最后到达t时刻,计算该时刻最大的p(a)、p(b)和p(c),选择出它们最大的值的节点,再根据保留的上一时刻的路径依次往前回溯,就得到最优的序列。比如ct是最大的节点,那就是ct>ct1>...>b3>c2>b1即最可能的序列为bcb…cc。

========广告时间========

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以到 https://item.jd.com/12185360.html 进行预定。感谢各位朋友。

为什么写《Tomcat内核设计剖析》

=========================

欢迎关注:

这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

隐马尔可夫模型中的Viterbi算法

这篇文章简单描述一下Viterbi算法——一年之前我听过它的名字,直到两周之前才花了一点时间研究了个皮毛,在这里做个简单检讨。先用一句话来简单描述一下:给出一个观测序列o1,o2,o3 …,我们希望找...
  • nocml
  • nocml
  • 2012-02-01 10:18
  • 412

动态规划之隐含马尔可夫模型(HMM)和维特比算法(Viterbi Algorithm)

动态规划之(HMM)和(Viterbi Algorithm)1. 实际问题HMM-韦小宝的骰子 • 两种骰子,开始以2/5的概率出千。 – 正常A:以1/6的概率出现每个点 – 不正常B: 5,...

隐马尔可夫模型及的评估和解码问题

http://www.cnblogs.com/zhangchaoyang/articles/2219571.html HMM介绍 Hidden Markov Models是一种统计...

隐马尔可夫模型的forward算法的c实现

隐马尔可夫模型问题有3个,即评估、解码、学习。其中评估问题描述为给定一个隐马尔可夫模型参数和一个观察序列,求该观察序列的概率。我们使用前向算法(forward algorith)来解决这个问题。其c代...

几个常用机器学习算法 - 隐马尔可夫模型

几个常用机器学习算法 - 隐马尔可夫模型1先引入一个知乎上看到的例子:假设你的手中有三个不同的骰子。 第一个是我们平常都能见到的骰子(称其为D6),6个面,每个面(1,2,3,4,5,6)出现的概率...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)