自然语言处理(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}$,求给定观测序列条件下,最可能出现的对应的状态序列。