一、隐含马尔可夫模型(Hidden Markov Model)

1、简介

  隐含马尔可夫模型并不是俄罗斯数学家马尔可夫发明的,而是美国数学家鲍姆提出的,隐含马尔可夫模型的训练方法(鲍姆-韦尔奇算法)也是以他名字命名的。隐含马尔可夫模型一直被认为是解决大多数自然语言处理问题最为快速、有效的方法。

2、马尔可夫假设

  随机过程中各个状态St的概率分布,只与它的前一个状态St-1有关,即P(St|S1,S2,S3,…,St-1) = P(St|St-1)。

  比如,对于天气预报,硬性假定今天的气温只与昨天有关而和前天无关。当然这种假设未必适合所有的应用,但是至少对以前很多不好解决的问题给出了近似解。

3、马尔可夫链

  符合马尔可夫假设的随机过程称为马尔可夫过程,也称为马尔可夫链。

图:马尔可夫链

  在这个马尔可夫链中,四个圈表示四个状态,每条边表示一个可能的状态转换,边上的权值是转移概率。隐含马尔可夫链是上述马尔可夫链的一个扩展:任一时刻t的状态St是不可见的。所以观察者没法通过观察到一个状态序列S1,S2,S3,…,ST来推测转移概率等参数。但是隐含马尔可夫模型在每个时刻t会输出一个符号Ot,而且Ot和St相关且仅和St相关。这称为独立输出假设。隐含马尔可夫模型的结构如下图,其中隐含的状态S1,S2,S3,…是一个典型的马尔可夫链。鲍姆把这种模型称为“隐含”马尔可夫模型。

图:隐含马尔可夫模型

4、隐含马尔可夫模型的三个基本问题

(1)给定一个模型,如何计算某个特定的输出序列的概率?

  Forward-Backward算法

(2)给定一个模型和某个特定的输出序列,如何找到最可能产生这个输出的状态序列?

  维特比算法

(3)给定足够量的观测数据,如何估计隐含马尔可夫模型的参数?

训练隐含马尔可夫模型更实用的方式是仅仅通过大量观测到的信号O1,O2,O3,….就能推算模型参数的P(St|St-1)和P(Ot|St)的方法(无监督训练算法),其中主要使用鲍姆-韦尔奇算法

5、隐含马尔可夫模型的五元组

HMM是一个五元组(O , Q , O0,A , B):

  O:{o1,o2,…,ot}是状态集合,也称为观测序列。

  Q:{q1,q2,…,qv}是一组输出结果,也称为隐序列。

  Aij = P(qj|qi):转移概率分布

  Bij = P(oj|qi):发射概率分布

  O0是初始状态,有些还有终止状态。

二、维特比算法(Viterbi)

1、简介

  维特比算法是一个特殊但应用最广的动态规划算法,它是针对篱笆网络的有向图(Lattice)的最短路径问题而提出的。凡是使用隐含马尔可夫模型描述的问题都可以用维特比算法来解码,包括今天的数字通信、语音识别、机器翻译、拼音转汉字、分词等。

图:篱笆网络

2、维特比算法的基础

(1)如果概率最大的路径P(或叫最短路径)经过某个点,比如下图中的X22,那么这条路径上从起始点S到X22的这一段子路径Q,一定是S到X22之间的最短路径。否则,用S到X22的最短路径R替代Q,便构成了一条比P更短的路径,这显然是矛盾的。

(2)从S到E的路径必定经过第i时刻的某个状态,假定第i时刻有k个状态,那么如果记录了从S到第i个状态的所有k个节点的最短路径,最终的最短路径必经过其中的一条。这样,在任何时刻,只需要考虑非常有限条最短路径即可。

(3)结合上述两点,假定当我们从状态i进入状态i+1时,从S到状态i上各个节点的最短路径已经找到,并且记录在这些节点上,那么在计算从起点S到前一个状态i所有的k个结点的最短路径,以及从这k个节点到Xi+1,j的距离即可。

3、维特比算法总结

(1)从点S出发,对于第一个状态X1的各个节点,不妨假定有n1个,计算出S到它们的距离d(S,X1i),其中X1i代表任意状态1的节点。因为只有一步,所以这些距离都是S到它们各自的最短距离。

(2)对于第二个状态X2的所有节点,要计算出从S到它们的最短距离。对于特点的节点X2i,从S到它的路径可以经过状态1的n1中任何一个节点X1i,对应的路径长度就是d(S,X2i) = d(S,X1i) + d(X1i,X2i)。由于j有n1种可能性,我们要一一计算,找出最小值。即:

d(S,X2i) = minI=1,n1 d(S,X1i) + d(X1i,X2i)

这样对于第二个状态的每个节点,需要n1次乘法计算。假定这个状态有n2个节

点,把S这些节点的距离都算一遍,就有O(n1·n2)次计算。

(3)接下来,类似地按照上述方法从第二个状态走到第三个状态,一直走到最后一个状态,就得到了整个网格从头到尾的最短路径。每一步计算的复杂度都和相邻两个状态Si和Si+1各自的节点数目ni,ni+1的乘积成正比,即O(ni·ni+1)

(4)假设这个隐含马尔可夫链中节点最多的状态有D个节点,也就是说整个网格的宽度为D,那么任何一步的复杂度不超过O(D2),由于网格长度是N,所以整个维特比算法的复杂度是O(N·D2)。

三、HMM模型+维特比算法实例

1、问题描述

假设连续观察3天的海藻湿度为(Dry,Damp,Soggy),求这三天最可能的天气情况。

2、已知信息

①天气只有三类(Sunny,Cloudy,Rainy),海藻湿度有四类{Dry,Dryish, Damp,Soggy },而且海藻湿度和天气有一定的关系。

②隐藏的状态:Sunny, Cloudy, Rainy;

③观察状态序列:{Dry, Damp, Soggy}

④初始状态序列:

Sunny

Cloudy

Rainy

0.63

0.17

0.20

⑤状态转移矩阵:

Sunny

Cloudy

Rainy

Sunny

0.5

0.375

0.125

Cloudy

0.25

0.125

0.625

Rainy

0.25

0.375

0.375

⑥发射矩阵:

Dry

Dryish

Damp

Soggy

Sunny

0.6

0.2

0.15

0.05

Cloudy

0.25

0.25

0.25

0.25

Rainy

0.05

0.10

0.35

0.5

3、分析

  由一阶HMM可知,Day2的天气仅取决于Day1;Day3的天气又只取决于Day2的天气。

4、计算过程

(1)Day1由于是初始状态,我们分别求

P(Day1-Sunny)=0.63*0.6;

P(Day1-Cloudy)=0.17*0.25;

P(Day1-Rain)=0.20*0.05;

Choose max{ P(Day1-Sunny) , P(Day1-Cloudy),P(Day1-Rainy)}, 得到P(Day1-Sunny)最大,得出第1天Sunny的概率最大。

(2)Day2的天气又取决于Day1的天气状况,同时也受Day2观察的海藻情况影响。

P(Day2-Sunny)= max{ P(Day1-Sunny)*0.5, P(Day1-Cloudy)*0.25,  P(Day1-Rainy)*0.25} *0.15;

P(Day2-Cloudy)= max{ P(Day1-Sunny)*0.375,  P(Day1-Cloudy)*0.125, P(Day1-Rainy)*0.625} *0.25;

P(Day2-Rainy)= max{ P(Day1-Sunny)*0.125,  P(Day1-Cloudy)*0.625 , P(Day1-Rainy)*0.375} *0.35;

Choosemax{ P(Day2-Sunny) , P(Day2-Cloudy), P(Day2-Rainy)},得到P(Day2-Rainy)最大,得出第2天Rainy的概率最大。

故{Sunny,Rainy}是前两天最大可能的天气序列。

(3)Day3的天气又取决于Day2的天气状况,同时也受Day3观察的海藻情况影响。

  P(Day3-Sunny)= max{ P(Day2-Sunny)*0.5, P(Day2-Cloudy)*0.25,  P(Day2-Rainy)*0.25} *0.05;

  P(Day3-Cloudy)= max{ P(Day2-Sunny)*0.375,  P(Day2-Cloudy)*0.125, P(Day2-Rainy)*0.625} *0.25;

  P(Day3-Rainy)= max{ P(Day2-Sunny)*0.125,  P(Day2-Cloudy)*0.625, P(Day2-Rainy)*0.375} *0. 05;

  Choosemax{ P(Day3-Sunny) , P(Day3-Cloudy), P(Day3-Rainy)},得到P(Day3-Rainy)最大,得出第3天Rainy的概率最大。故{Sunny,Rainy,Rainy}是这三天最可能的天气序列。

HMM模型和Viterbi算法相关推荐

  1. 基于Hmm模型和Viterbi算法的中文分词和词性标注

    使用 python 实现基于Hmm模型和Viterbi算法的中文分词及词性标注:使用 最大概率算法 进行优化.最终效果:人民日报语料:分词(F1:96.189%):词性标注(F1:97.934%) 完 ...

  2. 一文读懂 HMM 模型和 Viterbi 算法

    隐含马尔可夫模型(Hidden Markov Model) 隐含马尔可夫模型并不是俄罗斯数学家马尔可夫发明的,而是美国数学家鲍姆提出的,隐含马尔可夫模型的训练方法(鲍姆-韦尔奇算法)也是以他名字命名的 ...

  3. viterbi算法_HMM模型和Viterbi算法如何应用于分词

    首先感谢以下博主的分享,第一,二个链接是讲的HMM模型,第三个文章讲的是Viterbi算法 结巴分词3--基于汉字成词能力的HMM模型识别未登录词 - 老顽童2007 - 博客园​www.cnblog ...

  4. 机器学习(八)——在线学习、K-Means算法、混合高斯模型和EM算法

    http://antkillerfarm.github.io/ 贝叶斯统计和规则化(续) p(θ|S)p(\theta\vert S)可由前面的公式得到. 假若我们要求期望值的话,那么套用求期望的公式 ...

  5. 机器学习知识点(二十四)隐马尔可夫模型HMM维特比Viterbi算法Java实现

    1.隐马尔可夫模型HMM    学习算法,看中文不如看英文,中文喜欢描述的很高深.    http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/ht ...

  6. 基于python的RFM模型和K-Means算法的用户特征分析

    一.业务背景 2018 年在全球所有零售支出中在线零售支出占 15%.据互联网零售商估计,2018 年全球消费者在网上购买零售商品的支出为 2.86 万亿美元,较上年的 2.43 万亿美元增长 18. ...

  7. HMM模型与viterbi算法

    2021SC@SDUSC HMM(Hidden Markov Model): 隐式马尔科夫模型.HMM 模型可以应用在很多领域,所以它的模型参数描述一般都比较抽象,HMM 的典型介绍就是这个模型是一个 ...

  8. 时间序列分析模型:ARIMA模型和SARIMAX算法

    文章目录 自回归综合移动平均 可视化时间序列数据 差分 自回归模型 关于自相关和偏自相关的最后思考 自回归综合移动平均 ARIMA模型的一般过程如下: 可视化时间序列数据 使时间序列数据平稳 绘制相关 ...

  9. HMM——viterbi算法

    对于一个特殊的隐马尔科夫模型(HMM)及一个相应的观察序列,我们常常希望能找到生成此序列最可能的隐藏状态序列. 1.穷举搜索 我们使用下面这张网格图片来形象化的说明隐藏状态和观察状态之间的关系: 我们 ...

最新文章

  1. MediaCodeC解码视频指定帧,迅捷、精确
  2. Spring在Java领域的统治地位:86% 的Java开发者依赖它!
  3. .NET Core微服务之基于Ocelot实现API网关服务(续)
  4. js 移动端 滑块验证码插件_VUE技术详解,Vue.js从入门到精通
  5. unef螺纹_这十一种螺纹,你知道几种呢?
  6. Windows Phone性能优化建议
  7. setTimeOut传参数
  8. Hadoop MapReduce作业的基本构成要素
  9. 数据库原理—关系模型的数据操作(八)
  10. [转]《帮我买个单》
  11. C# Json、datatable、model互相转换
  12. redis 实践笔记和源码分析
  13. python打包deb_python开发将项目打包成deb
  14. 安全圈年终大趴,FIT 2019首日盛况全程回顾
  15. 逻辑思维训练和推理思维训练
  16. 别只关注M1芯片的苹果笔记本,iOS APP支持在 Mac上运行也是大事
  17. vvebo源码学习(一)
  18. Vue SSR 渲染 Nuxt3 入门学习
  19. linux驱动时间差引发的64位除法问题
  20. springcloud -netflix-Ribbon 负载均衡的实现

热门文章

  1. Ethernet II帧格式
  2. 802.11ac/ax (wifi6)中的Beamforming技术介绍
  3. leetcode 454. 四数相加 II c语言
  4. php如何获取js文本框内的内容,js获取input标签的输入值(实例代码)
  5. 科学计算机怎么显示除尽的数字,如何快速判断一个数能被整除的方法(1-23之内)...
  6. pemicro识别不了驱动_usb驱动无法识别怎么办-usb驱动无法识别通常解决办法 - 河东软件园...
  7. string类有可以调换方向的函数吗_C++中的string类的用法小结
  8. 图像语义分割python_遥感图像语义分割常用精度指标及其python实现(支持多类)
  9. abaqus单位怎么设置_ABAQUS-怎样模拟塑料瓶的抗挤压能力?
  10. java统计日志qps_【原创】基于日志增量,统计qps,并基于ip排序