1 概述
隐含马尔可夫模型(HMM)被认为是解决大多数自然语言处理问题最快速、有效的方法; 20世纪70年代被应用在语音处理上,后被广泛应用在汉 语自动分词、词性标注、统计机器翻译等方面。 本次文章将介绍基于HMM和Viterbi算法进行词性标注。
2 理论描述
2.1 HMM五元组
HMM是一个五元组(O,S, O 0 O_0 O0,A,B):
- O:{ o 1 o_1 o1… o t o_t ot}是状态集合, 也称为观测序列 ;
- S:{ s 1 s_1 s1… s v s_v sv}是一组输出结果,也称隐序列 ;
- a i j a_{ij} aij=P( s j s_j sj| s i s_i si): 转移概率分布 ;
- b i j b_{ij} bij=P( o j o_j oj| s i s_i si):发射概率分布 ;
- O 0 O_0 O0是初始状态,有些还有终止状态。
HMM可以用于估算隐藏于表面事件背后的事件的概率。 在词性标注中,词串可视为可观察序列,词的词性可视为隐序列。
2.2 HMM三个基本问题
- 估计问题:给定一个隐马尔科夫模型M=(A,B),如何有效计算某个观测序列O出现的概率,即计算P(O|M) (A表示转移概率,B表示发射概率) 。
- 解码问题:给定一个观测序列O和一个HMM模型M,寻找最好的隐序列Q以便最好的解释观测值 。
- 学习问题:依据给定的观测序列O以及HMM模型中的状态集合,学习最佳HMM参数模型A和B。
我们所讨论的词性标注问题即是HMM中的解码问题。
2.3 Viterbi算法
Viterbi算法实际上是最优路径算法的一种。在HMM的解码问题中,我们可以使用穷举法把所有可能的隐序列的概率都计算出来,这样最优解自然就出来了,但是缺点也很明显,即计算量太大。Viterbi算法的主要思想是寻找局部最优路径,即寻找所有序列中在t时刻以状态j终止的最大概率,所对应的路径为部分最优路径。依据最后一个时刻中概率最高的状态,通过回溯找其路径中的上一个最大部分最优路径,从而找到整个最优路径,而不用穷举所有的状态。这样就比计算整个的排列组合的次数要小得多。穷举的时间复杂度为O( m n m^n mn),而Viterbi是多次对链中的一个小分布穷举,时间复杂度为O(m*n)。 下面是wiki百科给出的乡村诊所例子的解释图:
3 算法描述
- 构造两个矩阵,max_p每一列为当前观测序列不同隐状态的最大概率;path每一行存储上max_p对应列的路径,用于回溯;
- 初始化max_p第1个观测节点不同隐状态的最大概率并初始化path从各个隐状态出发;
- 遍历第1项后的每一个观测序列,计算其不同隐状态的最大概率,计算公式为 ν t ( j ) = m a x ( v t − 1 ( i ) × a i j ) × b j ( o t ) ν_t (j) = max(v_{t−1}(i)×a_{ij})×b_j (o_t ) νt(j)=max(vt−1(i)×aij)×bj(ot);
- 记录最大概率及路径,用新的路径覆盖之前的路径;
- 到达最后一个观测节点,比较并返回概率最大的路径,从path中取出。
4 详例描述
输入:‘The’, ‘bear’, ‘is’, ‘on’, ‘the’, ‘move’, '.
隐状态:‘AT’, ‘BEZ’, ‘IN’, ‘NN’, ‘VB’, ‘PERIOD’
输出:The/AT bear/NN is/BEZ on/IN the/AT move/NN ./PERIOD
初始概率:语料库中各词性出现的占比
AT BEZ IN NN VB PERIOD 0.2 0.1 0.1 0.2 0.3 0.1
转移概率矩阵:由当前词性 a i a_i ai转移到下一个词性 a j a_j aj的概率
AT(第二个标记) BEZ IN NN VB PERIOD AT(第一个标记) 1 48659 \frac{1}{48659} 486591 1 48659 \frac{1}{48659} 486591 1 48659 \frac{1}{48659} 486591 48636 48659 \frac{48636}{48659} 4865948636 1 48659 \frac{1}{48659} 486591 19 48659 \frac{19}{48659} 4865919 BEZ 1937 2590 \frac{1937}{2590} 25901937 1 2590 \frac{1}{2590} 25901 426 2590 \frac{426}{2590} 2590426