基于HMM+Viterbi算法的词性标注 Python

本文介绍了如何利用HMM和Viterbi算法进行词性标注。详细阐述了HMM的五元组、三个基本问题,重点讲解了Viterbi算法的原理,以及如何通过构建最大概率矩阵和回溯路径实现最优解。通过实例展示了算法过程,并提到后续将探讨基于人民日报语料库生成转移和发射矩阵的方法。
摘要由CSDN通过智能技术生成

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 算法描述

  1. 构造两个矩阵,max_p每一列为当前观测序列不同隐状态的最大概率;path每一行存储上max_p对应列的路径,用于回溯;
  2. 初始化max_p第1个观测节点不同隐状态的最大概率并初始化path从各个隐状态出发;
  3. 遍历第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(vt1(i)×aij)×bj(ot)
  4. 记录最大概率及路径,用新的路径覆盖之前的路径;
  5. 到达最后一个观测节点,比较并返回概率最大的路径,从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
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值