自然语言处理(1)-HMM隐马尔科夫模型基础概念(一)
隐马尔科夫模型HMM
序言
文本序列标注是自然语言处理中非常重要的一环,我先接触到的是CRF(条件随机场模型)用于解决相关问题,因此希望能够对CRF有一个全面的理解,但是由于在学习过程中发现一个算法像jar包依赖一样依赖于各种算法,就像提到CRF模型,那么肯定不得不提一下HMM等模型,如果不能很好的理解这些算法,那么其实也不算完全搞明白!因此我会在算法的介绍中对涉及到的算法知识尽我所能尽量详细和朴实的说明。
网上也有很多算法说明,但是感觉对一些向我一样刚入门的小白用户很不友好,大堆的数据公式,甚至有个公式符号都没有说明,让人看了真是一头雾水~因此在翻阅了大量的资料后,决定整合我学到的内容,详细介绍下HMM模型。
1)HMM模型是什么
隐马尔科夫模型(Hidden Markov Model,以下简称HMM)是比较经典的机器学习模型了,它在语言识别,自然语言处理,模式识别等领域得到广泛的应用。
我们使用HMM模型用于解决什么问题呢?问题一般具有两种特征:
- 我们要处理的问题是有序的,比如时间序列或者状态序列;
- 数据是包含两种类型的,一类数据是观测数据,是我们可以看到的,另一类是隐藏数据,属于隐含状态,也就是状态序列。
OK,我们来举个例子。假设我们根据天气情况来决定我们当天的活动内容,天气情况有两种:晴天和雨天,活动有三种:逛街、打游戏和看电影。那么我们翻阅小明过去几天的日志记录,日志记录了他进行了打游戏和看电影。这里小明的活动就是观测数据,是我们可以看到的内容,而天气情况就是隐含状态,而我们要根据活动情况来推测当天的天气,这就是一个普通的HMM模型需要解答的问题。
2)HMM的模型定义
我们采用更加标准数学符号概念来描述HMM模型的表示。从上面例子中我们看到HMM问题中包含两类数据,观测数据和隐含状态。因此假设Q是所有隐含状态的集合,V是所有观测数据的集合,即:
$$Q=q_{1},q_{2},q_{3},...q_{n}; V=v_{1},v_{2},v_{3},...v_{m}$$
这里表示隐含状态有n种,观测种类有m种。
之前提到了有观测序列和隐含序列两个序列,设序列长度为T,I表示隐含序列,O表示观测序列,即:
$$I=i_{1},i_{2},i_{3},...i_{T}; O=o_{1},o_{2},o_{3},...o_{T}$$
其中,每个隐含序列种的元素都在Q中,每个观测序列中的元素都在V中,即:$i_{T}\in Q,o_{T}\in V$
3)HMM模型的3个要素
齐次马尔科夫链假设。即任意时刻的隐藏状态只依赖于它前一个隐藏状态,在文本中也就是bigram。采用这种假设是因为模型简单,便于求解。在某时刻t隐含状态为$q_{i}$,则在t+1时刻状态变为$q_{j}$,当然从一个隐含状态转变为另一个隐含状态是一个0~1的概率发生事件,按天气的例子也就是从晴天转变为雨天的概率,这种从t时刻到t+1时刻的隐含状态$q_{i}->q_{j}$转变概率$a_{ij}$可以表示为:$a_{ij}=P(i_{t+1}=q_{j}|i_{t}=q_{i})$
组成的隐含状态转移概率矩阵A为:$A=\begin{bmatrix}a_{ij}\end{bmatrix}_{N\times N}$
观测独立性假设。也就是每个观测状态都只跟当前时刻的隐含状态有关,这也是为了使模型尽可能简单。如果t时刻的隐含状态$i_{t}=q_{i}$,观测状态$o_{t}=v_{i}$,则我们称当前隐含状态下产生观测状态的概率$b_{i}(k)$可以表示为:$b_{i}(k)=P(o_{t}=v_{i}|i_{t}=q_{i})$
构成的观测状态发射概率矩阵B为:$B=\begin{bmatrix}b_{i}(k)\end{bmatrix}_{N\times M}$
除了以上两种假设外,我们还需要一个初始隐含状态发生概率Π,对应集合Q的隐含状态数N个,$Π=\begin{bmatrix}\pi(i)\end{bmatrix}_{N}$,其中$\pi(i)=P(i_{t}=q_{i})$
根据上述两个假设和初始隐含状态发生概率,我们就得到了HMM模型的三个重要参数:A、B、Π,组成了HMM模型的3个要素:
$$\lambda =\begin{Bmatrix}\Pi ,A,B\end{Bmatrix}$$
有了这三个要素后,我们就可以来解决HMM模型的问题了。
4)HMM模型实例
上面的公式看起来比较抽象,我们用实际例子来举例说明下。有三个盒子,里面分别有红球和白球,如下表所示:
| 盒子X1 | 盒子X2 | 盒子X3 | |
| 红球 | 5 | 4 | 7 |
| 白球 | 5 | 6 | 3 |
盒子之间转变的概率如下表所示:
| 盒子X1 | 盒子X2 | 盒子X3 | |
| 盒子X1 | 0.2 | 0.3 | 0.5 |
| 盒子X2 | 0.4 | 0.4 | 0.2 |
| 盒子X3 | 0.3 | 0.3 | 0.4 |
假设盒子间的初始概率都相同,我们从这三个盒子中有放回地取三次球,分别得到红、白、红三种颜色的球,于是我们得到:
- 观测集合V={红球,白球},观测序列O={红,白,红};
- 隐含集合Q={盒子X1,盒子X2,盒子X3}
- 初始状态分布概率$$\Pi =\begin{Bmatrix}\frac{1}{3} & \frac{1}{3} & \frac{1}{3}\end{Bmatrix}^{T}$$
- 隐含状态转移概率矩阵$$A=\begin{bmatrix}0.2 & 0.3 & 0.5\\ 0.4 & 0.4 & 0.2\\ 0.3 & 0.3 & 0.4\end{bmatrix}$$
- 观测状态概率矩阵$$B=\begin{bmatrix}0.5 & 0.5\\ 0.4 & 0.6\\ 0.7 & 0.3\end{bmatrix}$$
以上的例子请仔细查看了解,在后面的例子中会根据该例子进行计算实例。
5)HMM模型的三个基本问题
HMM模型有三个经典问题需要解决:
- 求解观测序列的概率。给定模型$\lambda =\begin{Bmatrix}\Pi ,A,B\end{Bmatrix}$和观测序列$O=o_{1},o_{2},o_{3},...o_{T}$,计算在模型λ下观测序列O出现的概率P(O|λ)。
- 模型参数学习问题。给定观测序列$O=o_{1},o_{2},o_{3},...o_{T}$,我们需要去学习模型的3个要素$\lambda =\begin{Bmatrix}\Pi ,A,B\end{Bmatrix}$,使该模型下观测序列的条件概率P(O|λ)最大。
- 预测(解码)问题。给定模型$\lambda =\begin{Bmatrix}\Pi ,A,B\end{Bmatrix}$和观测序列$O=o_{1},o_{2},o_{3},...o_{T}$,求给定观测序列条件下,最可能出现的对应的状态序列。
自然语言处理(1)-HMM隐马尔科夫模型基础概念(一)的更多相关文章
- HMM隐马尔科夫模型
这是一个非常重要的模型,凡是学统计学.机器学习.数据挖掘的人都应该彻底搞懂. python包: hmmlearn 0.2.0 https://github.com/hmmlearn/hmmlearn ...
- 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)实现词性标注---1998年1月份人民日报语料---learn---test---evaluation---Demo---java实现
先放上一张Demo的测试图 测试的句子及每个分词的词性标注为: 目前/t 这/rzv 条/q 高速公路/n 之间/f 的/ude1 路段/n 已/d 紧急/a 封闭/v ./w 需要基础知识 HM ...
- Atitit 马尔可夫过程(Markov process) hmm隐马尔科夫。 马尔可夫链,的原理attilax总结
Atitit 马尔可夫过程(Markov process) hmm隐马尔科夫. 马尔可夫链,的原理attilax总结 1. 马尔可夫过程1 1.1. 马尔科夫的应用 生成一篇"看起来像文章的 ...
- HMM 自学教程(四)隐马尔科夫模型
本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,这是针对 国外网站上一个 HMM 教程 的翻译,作者功底很深,翻译得很精彩 ...
- 隐马尔科夫模型HMM(一)HMM模型
隐马尔科夫模型HMM(一)HMM模型基础 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比 ...
- 隐马尔科夫模型(HMM)与词性标注问题
一.马尔科夫过程: 在已知目前状态(现在)的条件下,它未来的演变(将来)不依赖于它以往的演变 (过去 ).例如森林中动物头数的变化构成——马尔可夫过程.在现实世界中,有很多过程都是马尔可夫过程,如液体 ...
- 隐马尔科夫模型HMM
崔晓源 翻译 我们通常都习惯寻找一个事物在一段时间里的变化规律.在很多领域我们都希望找到这个规律,比如计算机中的指令顺序,句子中的词顺序和语音中的词顺序等等.一个最适用的例子就是天气的预测. 首先,本 ...
- 隐马尔科夫模型 HMM(Hidden Markov Model)
本科阶段学了三四遍的HMM,机器学习课,自然语言处理课,中文信息处理课:如今学研究生的自然语言处理,又碰见了这个老熟人: 虽多次碰到,但总觉得一知半解,对其了解不够全面,借着这次的机会,我想要直接搞定 ...
随机推荐
- webpack入门系列1
一.什么是webpack?为什么要使用它? Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源. 为什么我们要使用它呢?因 ...
- ELK:收集k8s容器日志最佳实践
简介 关于日志收集这个主题,这已经是第三篇了,为什么一再研究这个课题,因为这个课题实在太重要,而当今优秀的开源解决方案还不是很明朗: 就docker微服务化而言,研发有需求标准输出,也有需求文件输出, ...
- bootstrap 表单类
bootstrap 表单类 表单美化 用法: 向父元素 <form role="form"></form> 添加 role="form&q ...
- 【redis】-- redis的持久化(作为数据库)
目录 1.RDB rdb持久化的方式 rdb方式的优点: aof的优点 3.持久化的其他特性 日志重写 工作原理 rdb和aof混合使用 redis是一个基于内存的数据库,故在redis正在运行的数据 ...
- DOCKER绝对领域从2048到4069?不:25519,数字的飞跃,HTTP/2
这个标题花了几分钟,远远超过我构思以下内容的时间损耗,希望大家且看且珍惜,因为这是为数不多的cnblog特别标题 我记得很久以前,我开了一系列随笔,从第一篇揭发233的docker/machine开始 ...
- 【MySQL 线上 BUG 分析】之 多表同字段异常:Column ‘xxx’ in field list is ambiguous
一.生产出错! 今天早上11点左右,我在工作休息之余,撸了一下猫.突然,工作群响了,老大在里面说:APP出错了! 妈啊,这太吓人了,因为只是说了出错,但是没说错误的信息.所以我赶紧到APP上看看. 这 ...
- JavaScript实现计算后缀表达式(逆波兰表达式)以及将中缀表达式转为后缀表达式
逆波兰表达式,它的语法规定,表达式必须以逆波兰表达式的方式给出.逆波兰表达式又叫做后缀表达式.这个知识点在数据结构和编译原理这两门课程中都有介绍,下面是一些例子: 正常的表达式 逆波兰表达式 a+b ...
- ORB-SLAM2 论文&代码学习 ——Tracking 线程
本文要点: ORB-SLAM2 Tracking 线程 论文内容介绍 ORB-SLAM2 Tracking 线程 代码结构介绍 写在前面 上一篇文章中我们已经对 ORB-SLAM2 系统有了一个概览性 ...
- 如何构建OpenStack镜像
本文以制作CentOS7.2镜像为例,详细介绍手动制作OpenStack镜像详细步骤,解释每一步这么做的原因.镜像上传到OpenStack glance,支持以下几个功能: 支持密码注入功能(nova ...
- mysql5.5编译安装
MySQL是一个关系型数据库管理系统 ,由瑞典MySQL AB公司开发,目前属于Oracle 公司.MySQL分为社区版和商业版,由于其体积小.速度快.总体拥有成本低,尤其是开放源码 这一特点,一般中 ...