隐马尔可夫模型及其在词性标注中的应用
隐马尔可夫模型,Hidden Markov model (HMM),被认为是解决大多数自然语言处理问题最快速、有效的方法,成功解决了复杂的语音识别、机器翻译等问题。
隐马尔可夫模型简介(HMM) :
马尔可夫模型最早由Andrei A.Markov于1913年提出,当时他希望:Use frequency counts from the text to help compute the probability that the next letter in sequence would be a vowel? (使用基于频数的方法计算文本序列中下一个字母为元音字母的概率)。后来马尔科夫模型发展成为了一个通用的统计工具。
有别于HMM,一般马尔可夫模型称为显马尔可夫模型 (Visible Markov Model, VMM)。
HMM则是由美国数学家鲍姆Baum等人在20世纪60年代到70年代发表的一系列论文中提出的,隐含马尔可夫模型的训练方法也是以他的名字命名的,即鲍姆-韦尔奇算法。20世纪70年代被应用在语音处理上,后被广泛应用在汉语自动分词、词性标注、统计机器翻译等方面。
马尔可夫模型:
开始了解隐马尔可夫模型之前,我们不妨先看看什么是马尔可夫模型。
马尔可夫模型描述了一类重要的随机过程,这个随机过程是随时间而随机变化的过程。例如,我们常会考虑一个由并不互相独立的随机变量组成的序列,序列中每个变量的值依赖于它前面的元素(一个句子即是由并不互相独立的词语组成的,每一个词语的出现都和前面的词语有关系。)
假设某系统有N个有限状态S={s1,s2,…,sN} ,随着时间的推移,系统将从某一个状态转移到另一个状态。
X={x1,x2,…,xT} 是一个取值于有限状态集合S的随机变量序列,随机变量的取值为状态集S的某个状态,假定在时间t的状态记为xt (xt ∈S,t=1,2,…,T)。
系统在时间t处于状态sj的概率取决于它在时间 1,2,3,…,t-1的状态,其概率为: P(xt =sj |xt-1 =si , xt-2 =sk,…)。
在特定条件下,系统在时间t的状态只与其在时间t-1的状态相关,则: P(xt =sj |xt-1 =si , xt-2 =sk,…) ≈ P(xt =sj |xt-1 =si ),该随机过程称为一阶马尔可夫过程。(即在做自然语言处理时,我们认为一个词语的出现只与其前面一个词语有关,不考虑其他的词语,这样做的目的是减少计算的复杂度)。
一个马尔可夫模型通常有以下部分组成:
1:若干个状态。
2:转移概率矩阵。转移概率矩阵描述了系统从一个状态转移到另一状态的概率值。
3:初始概率。初始概率是系统在初始时间处于某一状态的概率。
转移概率矩阵A可以描述一阶马尔可夫过程,转移矩阵A的每个元素aij为:
即aij的值为:系统在时间t-1到时间t,从状态si转到状态sj的概率。我们以下图为例:
假定每一个词有三种词性:{v,n,p},从上图的转移矩阵可以知道,当前一个词word(t-1)的词性为p时,后一个词word(t)的词性为v的概率为0.9。
我们看一个例子,加深一下理解:
例:假定有一阶马尔可夫模型M,转移矩阵如上图,初始概率如下,计算语料中句子词性顺序为 n-v-p-n 的概率:
P(n,v,p.n|M)=P(n|start)*P(v|n)*P(p|v)*P(n|p)=1*0.8*0.1*0.05=0.004
隐马尔可夫模型 HMM
在马尔可夫模型中,每个状态代表了一个可观察到的事件。如果知道某个事件的观察序列,是可以使用一个马尔可夫模型来计算的。但是,有时候有些事件是不可以直接观测到的,例如:
字串(可观察序列):“结合/成/分子/时”
字的词性(隐序列):vn,v/ v,nr,q,a,an,j/ n/ Ng,nr,Dg/
在词性标注的工作中,给定的字符串就是一个可观测序列,但是,字符串中每个词语的词性我们现在是不知道的,对于我们来说就是一个不可观测的隐序列。HMM就是估算隐藏于表面事件背后的事件的概率。
HMM是一个五元组(O,Q,O0,A,B)
O:{o1….ot }是状态集合, 也称为观测序列
Q:{q1…qv}是一组输出结果,也称隐序列
A:与马尔可夫模型一样,是转移概率矩阵,其中aij=P(qj |qi )(注意是隐序列中状态间的转移概率)
B:发射概率矩阵,bij=P(oj |qi )(从隐序列到观测序列的概率)
O0是初始状态,有些还有终止状态
隐马尔可夫模型 HMM的三个基本问题:
1. 给定一个隐马尔可夫模型M=(A,B),如何有效计算某个观测序列O出现的概率,即计算P(O|M) (A表示 转移概率,B表示发射概率)
2. 给定一个观测序列O和一个HMM模型M,寻找最好的隐序列Q以便最好的解释观测值 (解码)
3. 依据给定的观测序列O以及HMM模型中的状态集合,学习最佳HMM参数模型A和B(学习)
隐马尔可夫模型用在词性标注的工作中时,主要是涉及到第2个问题,即 给定一个观测序列O和一个HMM模型M,寻找最好的隐序列Q以便最好的解释观测值 ,该观测序列就是给定的字符串,而要寻找的最好的隐序列就是字符串的词性序列。
问题2:解码---viterbi算法
给定一个观测序列O和一个HMM模型M(A,B), 寻找最好的隐序列Q (解码),例如下面字符串。
O: 结合 成 分子 时
Q: vn,v /v,nr,q,a,an,j/ n /Ng,nr,Dg
“结合”有2个词性:vn和v
“成”有6个词性:v,nr,q,a,an,j
“分子”有1个词性:n
“时”有3个词性:Ng,nr,Dg
所以,“结合成分子时”这一个观测序列有2*6*1*3=36个隐序列。
第一个可能的词性序列为:vn,v,n,Ng。即P(结合,成,分子,时,vn,v,n,Ng)=p(结合|vn)×p(成|v)×p(分子|n)×p(时|Ng)×p(vn|start)×p(v|vn)×p(n|v)×p(Ng|n) 。
首先,如何求最优的隐序列呢?我们可以用最暴力的方法,穷举搜索算法:可以通过穷举的方式列出所有的隐含状态序列,并算出每一种隐状态序列组合对应的观察状态序列的概率。 概率最大的那个组合对应的就是最可能的隐状态序列组合。
如果直接使用上述的穷举法去寻找最优的概率,毋庸置疑该算法的复杂度是相当复杂的,例如上述例子仅有4个词却总共有36种情况需要考虑,也就是说我们需要分别计算36种情况的概率,然后取最大值作为我们的预测结果。那么我们有没有什么可以简化的方法吗?
因此在算法优化上,我们可以引用维特比算法(Veterbi)。维特比算法是现代数字通信中使用最频繁的算法,同时也是很多自然语言处理的解码算法。
算法描述:依据最后一个时刻中概率最高的状态,逆向通过找其路径中的上一个最大部分最优路径,从而找到整个最优路径。
vt(j)是所有序列中在t时刻以状态j终止的最大概率,所对应的路径为部分最优路径。