隐马尔可夫模型

这是从刚接触自然语言处理就开始学习的算法之一,隐马可以用与词性标注和分词,在我上概率论课的时候我将其进行总结:

2.1 隐马尔可夫模型

2.1.1马尔可夫链

定义:马尔可夫链是指数学中具有马尔可夫性质的离散事件随机过程,在给定当前信息的情况下,过去对预测将来是无关的。每个状态的转移只依赖与之前的n个状态,其中n是影响状态转移的数目,最简单的马尔可夫过程就是一阶过程,每一个状态的转移只依赖于之前的那一个状态。

PXn+1=xX1=x1,X2=x2,····,Xn=xn=PXn+1=xXn=xn

马尔可夫过程:第n个状态出现的概率P=第n-1个状态下,状态n出现的概率P

马尔可夫性质:

 1.  该时刻的状态只与其前一时刻的状态有关,

 2.  最终,p会达到一个稳态分布。

马尔可夫三要素:

  1. 状态 (晴/阴)
  2. 初始向量  (时间为0时,状态的概率)
  3. 状态转移矩阵

马尔可夫链缺陷:

如果前后关系缺失,也会带来信息的缺失。即不知道状态转移过程,就无法推测。

而这种状态转移过程是隐蔽的情况常常发生,即内部状态不可见,只能看到各个时刻的输出值,这种情况就建模为隐马尔可夫模型(Hidden Markov Model , HMM)。

2.1.2隐马尔可夫模型

定义:隐马尔可夫模型是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数。

隐马尔可夫的五要素:HMM = (N,M,A,B,π)

  1. N:隐含的状态的集合
  2. M:可见的符号的集合
  3. A:隐含状态间转换的概率分布矩阵
  4. B:隐含状态到可见状态的喷射概率矩阵
  5. π:每一个状态在0时刻的概率分布

2.1.3 HMM解决的三大问题

HMM的三大问题:

  1. 如何快速计算观察序列的概率
  2. 如何由观察序列求出最优的状态序列
  3. 如何调整模型参数,使得观察序列的概率最大

HMM求解的算法:

  1. Viterbi Algorithm
  2. Forward / Backward Algorithm
  3. Baum-Welch Algorithm

2.2 viterbi算法原理

viterbi算法是一种用动态规划思想,致力于寻找一条最佳路径,以便能最好的解释观测到的序列。

Viterbi求解过程:

  1. 初始:输入HMM = (N,M,A,B,π)需已知五元组的每一个变量。
  2. 推理:通过选择局部最优,去寻找全局最优。

δ1i=πibi(o1)                                     (6)

φ1i=0                                           (7)

δti=max1≤j≤Nt-1aij]bi(o1)                           (8)

φti=argmax1≤j≤Nt-1aij]                              (9)

  1. 回溯:求得观测序列之后,回溯每一个隐含状态的构成序列。

it=φt+1it+1                                     (10)

 

2.3 基于HMM的词性标注

2.3.1训练流程

对于词性标注任务来说,使用隐马尔可夫模型是半监督的算法,需要先对隐马的五个参数HMM = (N,M,A,B,π)进行训练,即人工标注一部分语料的词性,然后让机器学习根据统计结果学习词性标注中的先验知识,再使用viterbi算法对新的语料进行词性标注。

训练参数的过程如下:

  1. N:隐含状态的集合 N={名词,动词,形容词,数词,量词,代词,副词,介词,连词,助词,叹词,拟声词}。
  2. M:可观测值的的集合 M = { 文本s | s∈语料集}。
  3. A:隐含状态的转移矩阵 A,通过标注的语料集去学习词性前后搭配出现的概率。

矩阵A:Pti····tn=i=1NPtiti-1                        (11)

Aij: Ptitj=count(t=i,t=j)count(t=i)                               (12)

    4. B:从隐含状态到可观测量的喷射概率分布 B,在面对词性不唯一的词时,统计其每个词性喷射出该词的概率。

矩阵B:  Pw1···wn|ti····tn=i=1NPwiti                    (13)

Bij: Pwiti=count(w=word,t=k)count(t=k)                           (14)

   5.  Π:初始概率分布值 π,给每个语料文本前后设置文本开始和结束的符号,统计开始到每一个第一个词的词性的概率。

P(j=tags|i=start)                                    (15)

 

 

2.3.2 算法流程

算法2Tag_Speech (str1)

输入:str1是由词构成的字符串;记为:str1=w1w2w3…wn

输出:对每个词标记了其词性的字符串str2=t1t2t3…tn

1:  Initialise:

2:         for i =1 à K do

3:                 Score(i,1)=P(w1|ti)*P(ti |<start>)

4:          end for

5:  Induction:

6:           for j=2 à N do

7:                  for i =1 à K do

8:                         Score(i,j)=maxk=1…k(Score(k,j-1)*P(ti|tk)*P(wj|ti))

9:                       Backpointer(i,j)=max K from previous line

10:                end for

11:         end for

12:  Back tracing the best tagging:

13:         tN=maxi Score(i,N)

14:         for i=N-1 à 1  

15:                ti =Backpointer(ti+1,i+1)

16:         end for

 

在算法2中,首先在Initialise步骤中统计每个词性出现在语料文本句首的概率,并乘上词性喷射出词的概率得到一个词的score分数。接着在Induction步骤中用viterbi算法计算每两个相邻出现的词的score分数,等于这个词性的初始score分数乘以词性间转换的概率乘以词性喷射到这个词的概率。从最终score分数中选择分数值大的词性值记录在Backpointer中。最后在步骤Back tracing the best tagging中进行从后往前的回溯,得到词性构成的序列串str2。

但词性标注模型不是一次训练完成的,而是不断的训练、标注、筛选正确语料重新添加到训练集中,以求训练参数的稳定性及结果的准确率。基于HMM的词性标注流程如图2-1所示。

图2-1 基于HMM的词性标注流程图

实验部分  在此就不显示了。。。。。。。。。。。。。。。

2.3.4 实验结果分析

影响结果的因素分析:

  • 对于未登录词的处理

由于统计模型的训练语料不可能无限大,许多未登录的词,必然会导致零概率问题。如果扩大训练语料的规模,又会带来标注的准确率下降的问题。

  • 兼类词的处理

单向的词性转移这是HMM的特点,但是对于词性标注来说也是缺点,中文中词的词性不仅依赖于前一个词的词性,通常还依赖于后一个词的词性。

改进方法分析:

  1. 对于未登录词的处理
  1. 通过计算词向量之间的相似度值,选择最相似的n个词的重复词性作为未登录词的候选词性。
  2. 对于零概率的事件进行平滑处理。
  1. 兼类词的处理
  1. 通过前后两种标注方式来进行标注。
  2. 利用语法规则引入更多的上下文信息。

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值