这是从刚接触自然语言处理就开始学习的算法之一,隐马可以用与词性标注和分词,在我上概率论课的时候我将其进行总结:
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会达到一个稳态分布。
马尔可夫三要素:
- 状态 (晴/阴)
- 初始向量 (时间为0时,状态的概率)
- 状态转移矩阵
马尔可夫链缺陷:
如果前后关系缺失,也会带来信息的缺失。即不知道状态转移过程,就无法推测。
而这种状态转移过程是隐蔽的情况常常发生,即内部状态不可见,只能看到各个时刻的输出值,这种情况就建模为隐马尔可夫模型(Hidden Markov Model , HMM)。
2.1.2隐马尔可夫模型
定义:隐马尔可夫模型是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数。
隐马尔可夫的五要素:HMM = (N,M,A,B,π)
- N:隐含的状态的集合
- M:可见的符号的集合
- A:隐含状态间转换的概率分布矩阵
- B:隐含状态到可见状态的喷射概率矩阵
- π:每一个状态在0时刻的概率分布
2.1.3 HMM解决的三大问题
HMM的三大问题:
- 如何快速计算观察序列的概率
- 如何由观察序列求出最优的状态序列
- 如何调整模型参数,使得观察序列的概率最大
HMM求解的算法:
- Viterbi Algorithm
- Forward / Backward Algorithm
- Baum-Welch Algorithm
2.2 viterbi算法原理
viterbi算法是一种用动态规划思想,致力于寻找一条最佳路径,以便能最好的解释观测到的序列。
Viterbi求解过程:
- 初始:输入HMM = (N,M,A,B,π)需已知五元组的每一个变量。
- 推理:通过选择局部最优,去寻找全局最优。
δ1i=πibi(o1) (6)
φ1i=0 (7)
δti=max1≤j≤N[δt-1aij]bi(o1) (8)
φti=argmax1≤j≤N[δt-1aij] (9)
- 回溯:求得观测序列之后,回溯每一个隐含状态的构成序列。
it=φt+1it+1 (10)
2.3 基于HMM的词性标注
2.3.1训练流程
对于词性标注任务来说,使用隐马尔可夫模型是半监督的算法,需要先对隐马的五个参数HMM = (N,M,A,B,π)进行训练,即人工标注一部分语料的词性,然后让机器学习根据统计结果学习词性标注中的先验知识,再使用viterbi算法对新的语料进行词性标注。
训练参数的过程如下:
- N:隐含状态的集合 N={名词,动词,形容词,数词,量词,代词,副词,介词,连词,助词,叹词,拟声词}。
- M:可观测值的的集合 M = { 文本s | s∈语料集}。
- 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 算法流程
算法2:Tag_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的特点,但是对于词性标注来说也是缺点,中文中词的词性不仅依赖于前一个词的词性,通常还依赖于后一个词的词性。
改进方法分析:
- 对于未登录词的处理
- 通过计算词向量之间的相似度值,选择最相似的n个词的重复词性作为未登录词的候选词性。
- 对于零概率的事件进行平滑处理。
- 兼类词的处理
- 通过前后两种标注方式来进行标注。
- 利用语法规则引入更多的上下文信息。