隐马尔可夫模型在中文分词中的应用

隐马尔可夫模型在中文分词中的应用

马尔可夫模型

马尔可夫链是随机变量X1,X2,X3…的一个数列。这些变量的范围,即他们所有可能取值的集合,被称为“状态空间”,而Xn的值则是在时间n的状态。如果Xn+1对于过去状态的条件概率分布仅是Xn的一个函数,则

P(Xn+1=x∣X0,X1,X2,…,Xn)=P(Xn+1=x∣Xn)

这里x为过程中的某个状态。上面这个恒等式可以被看作是马尔可夫性质。
马尔科夫过程就是指过程中的每个状态的转移只依赖于之前的 n个状态,这个过程被称为1个 n阶的模型,其中 n是影响转移状态的数目。最简单的马尔科夫过程就是一阶过程,每一个状态的转移只依赖于其之前的那一个状态。

隐马尔可夫模型

隐马尔可夫模型主要解决三个问题:

问题 解决算法
评估问题 前向算法 (根据隐马尔科夫模型得到一个可观察状态序列的概率)
解码问题 Viterbi算法 (找到一个隐藏状态的序列使得这个序列产生一个可观察状态序列的概率最大)
学习问题 Baum-Welch算法(向前向后算法)(根据一个可以观察到的状态序列集产生一个隐马尔科夫模型)

隐马尔可夫模型(HMM)可以用五个元素来描述,包括2个状态集合3个概率矩阵

1. 隐含状态 S (状态序列,state sequence)

(Viterbi算法所求)这些状态之间满足马尔可夫性质(t时刻的状态只与它t-1时刻的状态相关),是马尔可夫模型中实际所隐含的状态。这些状态通常无法通过直接观测而得到。(例如S1、S2、S3等等) 它由一阶马尔可夫链产生,也就是说每一时刻的状态qt只依赖于前一时刻的状态:qt-1
qt时刻的概率:

P(qt∣q1,o1,…,qt−1,ot−1)=P(qt∣qt−1)P(qt∣q1,o1,…,qt−1,ot−1)=P(qt∣qt−1)
P(q1,q2,…,qt)=P(q1)P(q2∣q1)P(q3∣q1,q2)⋯P(qt∣q1,…,qt−1)=P(q1)P(q2∣q1)P(q3∣q2)⋯P(qt∣qt−1)

(概率求的是每个字成为B,M,E,S的概率)

2. 可观测状态 O(观测序列,observation sequence)

(自然文本中的句子)在模型中与隐含状态相关联,可通过直接观测而得到。(例如O1、O2、O3等等,可观测状态的数目不一定要和隐含状态的数目一致。) 观测序列服从观测独立性假设(每一时刻的观测值Ot只依赖于该时刻的状态值qt)

P(ot∣q1,o1,…,qt,ot)=P(ot∣qt)

对于给定的序列O来说,P(O)是确定的,所以HMM的任务就是要建模 P(O,Q)(联合概率,即P(OQ),O,Q同时发生的概率)

3. 初始状态概率矩阵 π

表示隐含状态在初始时刻t=1的概率矩阵,(例如t=1时,P(S1)=p1、P(S2)=P2、P(S3)=p3,则初始状态概率矩阵 π=[ p1 p2 p3 ].
初始状态概率

4. 隐含状态转移概率矩阵 A。

描述了HMM模型中各个状态之间的转移概率。
其中aij = P( Sj | Si ),1≤i,j≤N.
状态转移概率
表示在 t 时刻、状态为 Si 的条件下,在 t+1 时刻状态是 Sj 的概率。

A和π是一阶马尔可夫链的两个参数。

5. 观测状态转移概率矩阵(发射概率矩阵) B

(英文名为Confusion Matrix,直译为混淆矩阵不太易于从字面理解)令N代表隐含状态数目,M代表可观测状态数目,则:

Bqj(oi) = P( Ot=Oi∣qt=Sj ), 1≤i≤M,1≤j≤N

表示在 t 时刻、隐含状态是 Sj 条件下,观察状态为 Oi 的概率。

总结:一般的,可以用λ=(A,B,π)三元组来简洁的表示一个隐马尔可夫模型。隐马尔可夫模型实际上是标准马尔可夫模型的扩展,添加了可观测状态集合和这些状态与隐含状态之间的概率关系。

HMM 的数学模型

HMM 就是要建模P(O,Q)。对于给定的一个HMM,下式就是 HMM 模型:

P(O,Q∣λ)=π_(q_1 ) b_(q_1 ) (o_1 ) a_(q_(1 ) q_2 ) b_(q_1 ) (o_1 )…a_(q_(T-1 ) q_T ) b_(q_T ) (o_T )

推导:由于不同时刻的释放概率相互独立,所以:

P(O∣Q,λ)=bq1(o1)bq2(o2)⋯bqT(oT)

根据一阶马尔可夫链,有:

P(Q∣λ)=πq1aq1q2aq2q3⋯aqT−1qT

二者结合就得到了下面的式子:

P(O,Q∣λ)=(P(O,Q,λ))/(P(λ))=(P(Q,λ)P(O∣Q,λ))/(P(λ))=(P(λ)P(Q∣λ)P(O∣Q,λ))/(P(λ))=P(Q∣λ)P(O∣Q,λ)

(注:λ相当于一个先决条件(全集),即在λ条件下的概率P(O,Q│λ)=P(O,Q)

HMM模型有三个基本假设

  1. 系统在时刻t的状态只与时刻t-1处的状态相关(无后效性);
  2. 状态转移概率与时间无关(齐次性或时齐性);
  3. 假设任意时刻的观测只依赖于该时刻的马尔科夫链的状态,与其它观测及状态无关(观测独立性假设)。

中文分词中的应用

给定一个HMM模型,λ和一个观测序列O(o1,…,ot。相当与文本中分的每一个词),如何最大化 P(Q|O),求出“最有可能”的状态序列Q。(找出在观测文本O条件下的Q的最大概率(QT=Si),也就是找到最优的分词方式)换句话说,怎样可以快速地从NT个序列里找到概率最大的那一个:
隐马尔可夫模型在中文分词中的应用_第1张图片

维特比算法(Viterbi algorithm)

维特比算法是一种动态规划方法。动态规划的基础是贝尔曼最优性原理(Bellman’s Principle of Optimality):多级决策过程的最优策略(最优序列)有这样的性质:不论初始状态和初始决策如何,其余的决策对于初始决策所形成的状态来说,必定也是一个最优策略。
在解码问题里就是说:如果最优状态序列q1∗,q2∗,…,qT∗在时刻t的状态qt∗已知为Si,那么从qt∗ 到qT∗的局部状态序列一定是所有可能的状态序列里最优的。通俗一点说,已知最优路径P,那么我们在路径上选择一个节点,从起点到该节点的这段局部路径P1一定是所有可能的局部路径里最优的;同样地,从这个节点到终点的局部路径P2一定是所有可能的局部路径里最优的。
维特比算法利用以下的方法求解最优序列:从起始时刻t=1开始,递推地找出在时刻t的状态为Si的各个可能的状态序列中的最大概率,一直求解到时刻t=T的状态为Si的最大概率,并得到时刻T的状态Sj;然后向前回溯求得其他时刻的状态。
定义如下维特比变量δt(i) :能够输出已知的观测序列o1,…,ot、且在时刻t的状态qt为Si的所有局部状态序列q1,q2,…,qt−1,Si 中,概率最大的序列q1∗,q2∗,…,qT-1∗,Si所对应的概率值为:

δt(i)=maxq1,q2,…,qt−1P(q1,q2,…,qt−1,qt=Si, o1,…,ot∣λ) (t和i的最大取值相等)

首先,初始情况下,有:

δ1(i)=πibi(o1),1≤i≤N
ψ1(i)=S0

(ψt(i)记录概率最大路径上当前状态的前一个状态(前一个变量δt-1(i)的最大取值))
然后,可以得到递归关系:

δt(i)=(max1≤j≤N[δt−1(j)aji])bi(ot),2≤t≤T,1≤i≤N

(找到每一个词在初始状态下(B,M,E,S)中得最大概率)

{P(O,Q│λ)=π_(q_1 ) b_(q_1 ) (o_1 ) a_(q_(1 ) q_2 ) b_(q_1 ) (o_1 )…a_(q_(T-1 ) q_T ) b_(q_T ) (o_T )}
ψt(i)=arg maxSj,1≤j≤N[δt−1(j)aji],2≤t≤T,1≤i≤N

结果:

P*=max1≤i≤N[δt(i)]
qT*=argP*=argmax1≤i≤N[δt(i)]

现在已知时刻t的状态qt为Si,需要求解δt(i),如何利用已经求解过的(即时刻t之前的)值(从状态转移入手):时刻t−1的状态Sj并不是任取的(1≤j≤N),对于δt(i)所对应的最优局部状态序列q1∗,q2∗,…,qt−1∗,Si来说,它是唯一的。那么,为了得到δt(i),就需要确定出Sj,也就是Si由谁转移而来。也就是说,需要全部的δt−1(j)(1≤j≤N),然后找出δt−1(j)ajibi(ot)最大的一个。由Si 释放出ot(观测序列的每个值都是已知的)的概率bi(ot)为固定值,从而得到了上面的递推式。ψt(i)是记录前一时刻状态的数组:对于在时刻t的状态qt为Si的概率最大的局部状态序列q1∗,q2∗,…,qt−1∗,Si,记录其在时刻t−1的状态qt−1∗的状态值Sj。有了这个信息,就可以不断向前回溯。
那么可以得到最终时刻的状态:只有计算到最终时刻T的δT(i),才知道最优序列q1∗,…,qT∗ 的概率(此前的概率不管多大,因为没有转移到最后一个状态,所以都是局部的)以及其在最终时刻的状态qT∗,才能进一步回溯求解此前每个时刻的状态:

i=arg max1≤i≤NδT(i)
qT∗=Si

最后需要回溯,得到每个时刻的状态:

qt∗=ψt+1(qt+1∗),T−1≥t≥1

在具体实现过程中,为避免多个很小的数相乘导致浮点数下溢,所以可以取对数使相乘变为相加。
'''笔者的话:HMM是一个非常经典的算法,需要我们认真的去分析每一个数学公式。在学习的过程中收获颇多。只写了一些皮毛,对于刚开始接触HMM的来说还是比较有用的。希望能够帮到大家。FIGHTING...(热烈欢迎大家批评指正,互相讨论)
(you must strive to find your own voice.)'''

你可能感兴趣的:(NLP,隐马尔可夫模型,中文分词)