隐马尔科夫模型(HMM)与其在分词上的应用

前言

同时在LP 之分词技术概述中有提到 HMM 模型,虽然此方法在现代的作用和地位有所下降,但是依然是非常值得了解的学习机器学习经典算法。 本文的基本提纲如下: 1. 基础知识 1. 定义 2. 适用场景 3. 隐马尔科夫模型的两个基本假设 4. 实例 2. HMM模型的三个基本问题 1. 前向后向算法评估观察序列概率 2. 鲍姆-韦尔奇算法求解HMM参数 3. 维特比算法解码隐藏状态序列 3. 分词实战

基础知识

定义

直观定义 首先看一个图: 状态序列图

该图的文字描述是其分成两排,第一排是\(y\)序列,第二排是\(x\)序列。每个\(x\)都只有一个\(y\)指向它,每个\(y\)也都有另一个\(y\)指向它。

下面按照上述描述给出一个定义: - 状态序列(上图中的\(y\),下面的\(I\):隐藏的马尔科夫链随机生成的状态序列,称为状态序列(state sequence) - 观测序列(上图中的\(x\),下面的\(O\): 每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列(obeservation sequence) - 隐马尔科夫模型:隐马尔科夫模型是关于时序的概率模型,描述由一个隐藏的马尔科夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。 序列的每一个位置可以看做是一个时刻,HMM 由初始概率分布、状态转移概率分布和观测概率分布确定。

形式化的定义如下: 形式化定义\(Q\)是所有可能的状态的集合,\(V\)是所有可能的观测的集合,如下:

\[Q={q_1,q_2,...,q_N},V={v_1,v_2,...,v_M}\] 其中,\(N\)是可能的状态数,\(M\)是可能的观测数。

\(I\)是长度为\(T\)的状态序列,\(O\)是对应的观测序列。 \[I=(i_1,i_2,...,i_T),O=(o_1,o_2,...,o_T)\]

A是状态转移概率矩阵: \[A=[a_{ij}]_{N×N}\]

其中。,在时刻\(t\),处于\(q_i\) 状态的条件下在时刻\(t+1\)转移到状态\(q_j\) 的概率【齐次马尔科夫链假设,下面的第一个假设】: \[a_{ij}=P(i_{t+1}=q_j|i_t=q_i)\]

B是观测概率矩阵: \[B=[b_j(k)]_{N×M}\] 其中\(k=1,2,...,M; j=1,2,...,N\) 其中,在时刻\(t\)处于状态\(q_j\) 的条件下生成观测\(v_k\) 的概率【观测独立性假设,下面第二个假设】: \[b_j(k)=P(o_t=v_k|i_t=q_j)\]

π是初始状态概率向量: \[π=(π_i)\] 其中,\(π_i=P(i_1=q_i)\) 隐马尔科夫模型由初始状态概率向量\(π\)、状态转移概率矩阵A和观测概率矩阵\(B\)决定。\(π\)\(A\)决定状态序列,\(B\)决定观测序列。因此,隐马尔科夫模型\(λ\)可以由三元符号表示,即:\(λ=(A,B,π)\)\(A,B,π\)称为隐马尔科夫模型的三要素

适用场景

有了上述的定义可以看出使用HMM模型时我们的问题一般有这两个特征: - 我们的问题是基于序列的,比如时间序列,或者状态序列。 - 我们的问题中有两类数据,一类序列数据是可以观测到的,即观测序列;而另一类数据是不能观察到的,即隐藏状态序列,简称状态序列。

比如语言转文字的问题,发出的一串连续的声音就是观测序列,而实际要表达的一段话的文字就是状态序列,机器的任务,就是从这一串连续的声音中判断出最可能要表达的文字的内容。

隐马尔科夫模型的两个基本假设

  1. 设隐马尔科夫链在任意时刻\(t\)的状态只依赖于其前一时刻的状态,与其他时刻的状态及观测无关,也与时刻\(t\)无关。(齐次马尔科夫性假设)
  2. 假设任意时刻的观测只依赖于该时刻的马尔科夫链的状态,与其他观测和状态无关。(观测独立性假设)

一个例子

李航的《统计学习方法》的例子,假设我们有3个盒子,每个盒子里都有红色和白色两种球,这三个盒子里球的数量分别是:

盒子 1 2 3
红球数 5 4 7
白球数 5 6 3

按照下面的方法从盒子里抽球: 1. 开始的时候,从第一个盒子抽球的概率是0.2,从第二个盒子抽球的概率是0.4,从第三个盒子抽球的概率是0.4。以这个概率抽一次球后,将球放回。 2. 从当前盒子转移到下一个盒子进行抽球。规则是: 1. 如果当前抽球的盒子是第一个盒子,则以0.5的概率仍然留在第一个盒子继续抽球,以0.2的概率去第二个盒子抽球,以0.3的概率去第三个盒子抽球。 2. 如果当前抽球的盒子是第二个盒子,则以0.5的概率仍然留在第二个盒子继续抽球,以0.3的概率去第一个盒子抽球,以0.2的概率去第三个盒子抽球。 3. 如果当前抽球的盒子是第三个盒子,则以0.5的概率仍然留在第三个盒子继续抽球,以0.2的概率去第一个盒子抽球,以0.3的概率去第二个盒子抽球。 4. 如此下去,直到重复三次.

得到一个球的颜色的观测序列: 参数

HMM观测序列的生成 从上面的例子,我们也可以抽象出HMM观测序列生成的过程。 输入的模型是\(\lambda = (A, B, \Pi)\),观测序列长度是\(T\). 输出是观测序列:\(O =\{o_1,o_2,...o_T\}\)

以下代码是 HMM 一个模拟,

##HMM模型的三个基本问题 ###前向后向算法评估观察序列概率 ###鲍姆-韦尔奇算法求解HMM参数 ###维特比算法解码隐藏状态序列 ##分词实战

向我开炮