HMM隐马尔可夫模型(词语粘合)
HMM用于自然语言处理(NLP)中文分词,是用来描述一个含有隐含未知参数的马尔可夫过程,其目的是希望通过求解这些隐含的参数来进行实体识别,说简单些也就是起到词语粘合的作用。
HMM隐马尔可夫模型包括:
OBS 显现层(observations)
States 隐含层
Start_p 初始概率 P(a)
Trans_p 转移概率 P(b|a)
Emit_p 发射概率
例题:小黑每天根据天气【下雨、晴天】决定当天的活动【散步、购物、清理房间】,她有在朋友圈里发了一条信息“我前天在公园散步,昨天购物,今天清理房间了”,如何根据发的信息推断这三天的天气?

第一天:
【第一天】【散步】=【初始概率,下雨】*【发射概率,散步】=0.6*0.1=0.06
【第一天】【散步】=【初始概率,晴天】*【发射概率,散步】=0.4*0.6=0.24
因为0.24>0.06,第一天可能是晴天
第二天:
【第二天】【购物】=【第一天散步,初始概率,下雨】*【转移概率,下雨】*【发射概率,购物】=0.06*0.7*0.4=0.0168
【第二天】【购物】=【第一天散步,初始概率,下雨】*【转移概率,晴天】*【发射概率,购物】=0.06*0.3*0.3=0.0054
【第二天】【购物】=【第一天散步,初始概率,晴天】*【转移概率,下雨】*【发射概率,购物】=0.24*0.4*0.4=0.0384
【第二天】【购物】=【第一天散步,初始概率,晴天】*【转移概率,晴天】*【发射概率,购物】=0.24*0.6*0.3=0.0432
第一天散步+第二天购物的情况下,第一天可能是晴天,第二天也可能是晴天
第三天:
【第三天】【清理】=【初始概率,晴天,下雨】*【转移概率,下雨】*【发射概率,清理】=0.0384*0.7*0.5=0.01344
【第三天】【清理】=【初始概率,晴天,下雨】*【转移概率,晴天】*【发射概率,清理】=0.0384*0.3*0.1=0.00114
【第三天】【清理】=【初始概率,晴天,晴天】*【转移概率,下雨】*【发射概率,清理】=0.0432*0.4*0.5=0.00864
【第三天】【清理】=【初始概率,晴天,晴天】*【转移概率,晴天】*【发射概率,清理】=0.0432*0.6*0.1=0.00259
【第三天】【清理】=【初始概率,下雨,下雨】*【转移概率,下雨】*【发射概率,清理】=0.0168*0.7*0.5=0.00588
【第三天】【清理】=【初始概率,下雨,下雨】*【转移概率,晴天】*【发射概率,清理】=0.0168*0.3*0.1=0.00050
【第三天】【清理】=【初始概率,下雨,晴天】*【转移概率,下雨】*【发射概率,清理】=0.0054*0.4*0.5=0.00108
【第三天】【清理】=【初始概率,下雨,晴天】*【转移概率,晴天】*【发射概率,清理】=0.0054*0.6*0.1=0.00032
第一天散步+第二天购物+第三天打扫的情况下,第一天晴天,第二天下雨,第三天下雨概率最大
用Python实现:


# Python -version 3.5以上版本
# 打印路径概率表
def print_dptable(V):
print (" ",)
for i in range(len(V)):
print ("%7d" % i,)
print ()
for y in V[0].keys():
print ("%.5s: " % y,)
for t in range(len(V)):
print ("%.7s" % ("%f" % V[t][y]),)
print ()
def viterbi(obs, states, start_p, trans_p, emit_p):
# 路径概率表 V[时间][隐含层] = 概率
V = [{}]
# 中间变量
path = {}
# 状态初始化 (t == 0)
for y in states:
V[0][y] = start_p[y] * emit_p[y][obs[0]]
path[y] = [y]
# 对 t > 0 跑一遍维特比算法
for t in range(1, len(obs)):
V.append({})
newpath = {}
for y in states:
# 概率 隐含层 = 前状态是y0的初始概率 * y0转移到y的转移概率 * y表现为当前状态的发射概率
(prob, state) = max([(V[t - 1][y0] * trans_p[y0][y] * emit_p[y][obs[t]], y0) for y0 in states])
# 记录最大概率
V[t][y] = prob
# 记录路径
newpath[y] = path[state] + [y]
path = newpath
print_dptable(V)
(prob, state) = max([(V[len(obs) - 1][y], y) for y in states])
return (prob, path[state])
# HMM 实例导入
states = ('Rainy', 'Sunny')
observations = ('walk', 'shop', 'clean')
start_probability = {'Rainy': 0.6, 'Sunny': 0.4}
transition_probability = {
'Rainy': {'Rainy': 0.7, 'Sunny': 0.3},
'Sunny': {'Rainy': 0.4, 'Sunny': 0.6},
}
emission_probability = {
'Rainy': {'walk': 0.1, 'shop': 0.4, 'clean': 0.5},
'Sunny': {'walk': 0.6, 'shop': 0.3, 'clean': 0.1},
}
def example():
#将实例值传输到viterbi函数
return viterbi(observations,
states,
start_probability,
transition_probability,
emission_probability
)
print (example())
HMM隐马尔可夫模型(词语粘合)的更多相关文章
- HMM隐马尔可夫模型来龙去脉(一)
目录 隐马尔可夫模型HMM学习导航 一.认识贝叶斯网络 1.概念原理介绍 2.举例解析 二.马尔可夫模型 1.概念原理介绍 2.举例解析 三.隐马尔可夫模型 1.概念原理介绍 2.举例解析 四.隐马尔 ...
- HMM隐马尔可夫模型来龙去脉(二)
目录 前言 预备知识 一.估计问题 1.问题推导 2.前向算法/后向算法 二.序列问题 1.问题推导 2.维特比算法 三.参数估计问题 1.问题推导 2.期望最大化算法(前向后向算法) 总结 前言 H ...
- HMM隐马尔科夫模型
这是一个非常重要的模型,凡是学统计学.机器学习.数据挖掘的人都应该彻底搞懂. python包: hmmlearn 0.2.0 https://github.com/hmmlearn/hmmlearn ...
- 机器学习-HMM隐马尔可夫模型-笔记
HMM定义 1)隐马尔科夫模型 (HMM, Hidden Markov Model) 可用标注问题,在语音识别. NLP .生物信息.模式识别等领域被实践证明是有效的算法. 2)HMM 是关于时序的概 ...
- 自然语言处理(1)-HMM隐马尔科夫模型基础概念(一)
隐马尔科夫模型HMM 序言 文本序列标注是自然语言处理中非常重要的一环,我先接触到的是CRF(条件随机场模型)用于解决相关问题,因此希望能够对CRF有一个全面的理解,但是由于在学习过程中发现一个算法像 ...
- HMM 隐马尔科夫模型
参考如下博客: http://www.52nlp.cn/itenyh%E7%89%88-%E7%94%A8hmm%E5%81%9A%E4%B8%AD%E6%96%87%E5%88%86%E8%AF%8 ...
- HMM:隐马尔可夫模型HMM
http://blog.csdn.net/pipisorry/article/details/50722178 隐马尔可夫模型 隐马尔可夫模型(Hidden Markov Model,HMM)是统计模 ...
- 隐马尔可夫模型(Hidden Markov Model)
隐马尔可夫模型(Hidden Markov Model) 隐马尔可夫模型(Hidden Markov Model, HMM)是一个重要的机器学习模型.直观地说,它可以解决一类这样的问题:有某样事物存在 ...
- 隐马尔科夫模型HMM学习最佳范例
谷歌路过这个专门介绍HMM及其相关算法的主页:http://rrurl.cn/vAgKhh 里面图文并茂动感十足,写得通俗易懂,可以说是介绍HMM很好的范例了.一个名为52nlp的博主(google ...
随机推荐
- 使用idea创建maven项目时 需要注意的问题
截几张图来说明吧 上面的红色框如果不选中 将来创建的工程中没有webapp目录以及下面的子目录 选中之后 然后一直“下一步” 直到工程创建 但是我第一次按照正确的方式操作时 工程中并没有src ...
- 洛谷 P2144 BZOJ 1003 [FJOI2007]轮状病毒
题目描述 轮状病毒有很多变种.许多轮状病毒都是由一个轮状基产生.一个n轮状基由圆环上n个不同的基原子和圆心的一个核原子构成.2个原子之间的边表示这2个原子之间的信息通道,如图1. n轮状病毒的产生规律 ...
- foj 2139
hi.baidu.com/ydlqw/item/120cd21a5afd5becddeeca41?qq-pf-to=pcqq.c2c
- CodeForces - 340 C - Tourist Problem
先上题目: A - Tourist Problem Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & ...
- [Drupal]主题教程
drupal6和drupal7的主题开发有很大不同,本指南包含了这些不同 drupal7的默认主题是Bartik,6的是Garland drupal的主题系统是如何工作的 这部分内容主要讲述的是dru ...
- nyoj-20-吝啬的国度(深搜)
吝啬的国度 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描写叙述 在一个吝啬的国度里有N个城市.这N个城市间仅仅有N-1条路把这个N个城市连接起来.如今,Tom在第S号城市 ...
- 开源 免费 java CMS - FreeCMS2.0 会员password设置
项目地址:http://www.freeteam.cn/ password设置 从右側管理菜单点击password设置进入. 输入正确的当前password和新password后点击改动就可以.
- android制作闪动的红心
先上一张效果图吧: 说说这个东西的来源吧.今天突然想到笛卡尔心形图,想去看看能不能画个心出来,可是看到一篇不错的文章,那篇文章罗列了非常多关于心形的函数方程,这可把我高兴坏了,于是我选取了一个比較好看 ...
- 【待解决】使用JUnit时报错java.lang
编写selenium自动化代码,代码逻辑应该都没有错,运行时老是报如下错误 java.lang.NoClassDefFoundError: org/json/JSONException 解决办法:导入 ...
- 局部变量,全局变量,extend,static
main.c #include <stdio.h> #include "zs.h" /* 局部变量是定义在函数.代码块.函数形参列表.存储在栈中,从定义的那一行开始作用 ...