【NLP】HMM 词性标注&中文分词

文章目录

  • HMM词性标注
    • 任务描述
    • 贝叶斯转换
    • 模型结构
  • HMM中文分词
    • 任务描述
    • 模型结构
    • 实现实例

HMM词性标注

HMM是一个生成模型,由隐藏状态序列生成观测序列。HMM有三个重要知识点:HMM的三个参数初始概率状态转移概率,和观测概率HMM三个任务预测问题(计算观测序列的概率),解码问题(已知观测序列求最可能产生该观测序列的状态序列),以及学习问题(学习HMM的三个参数)。HMM两个假设齐次马尔可夫假设(当前状态只与前一状态有关)和观测独立假设(当前观测只与当前状态有关)。HMM详细的介绍可以参照《统计学习方法》的第十章。这里我就简单介绍一下HMM如何用于词性标注(POS tagging)。

任务描述

输入序列 O:I love NLP.
输出序列 T:PRP VB NN

其中PRP是人称代词, VB是动词原形,NN是名词。这里只是举个例子,实际任务中的POS tag会复杂很多。对应于HMM模型,状态序列对应了序列T,也就是词性标签序列;而观测序列对应了序列O。因此词性标注可以理解为HMM三大问题中的第三个问题:解码问题。因此,我们的目标是得到最符合原句子词性的组合序列,即:

T = a r g m a x T P ( T ∣ O ) T = argmax_T P(T|O) T=argmaxTP(TO)

其中:

O = { O 1 , O 2 , . . . , O N } ,是观测序列。 O = \{O_1, O_2,...,O_N\} \text{,是观测序列。} O={O1,O2,...,ON},是观测序列。

T = { T 1 , T 2 , . . . , T N } ,是状态/标签序列。 T i ∈ a l l   P O S   t a g s T = \{T_1, T_2,...,T_N\} \text{,是状态/标签序列。} T_i \in all \ POS\ tags T={T1,T2,...,TN},是状态/标签序列。Tiall POS tags

贝叶斯转换

根据贝叶斯公式:

P ( T ∣ O ) = P ( O ∣ T ) P ( T ) P ( O ) P(T|O) = \frac{P(O|T)P(T)}{P(O)} P(TO)=P(O)P(OT)P(T)
首先,由于对于给定的观测序列P(O)是固定不变的,因此我们可以省略分母。其次,在贝叶斯公式中P(O|T)被称为似然函数,P(T)被称为先验概率。对应到我们的任务,P(O|T)是“已知状态序列T求观测序列O的概率”,P(T)则是状态序列本身的概率,因此任务变成了:

T = a r g m a x T P ( T ∣ O ) = a r g m a x T P ( O ∣ T ) P ( T ) T = argmax_TP(T|O) = argmax_T P(O|T)P(T) T=argmaxTP(TO)=argmaxTP(OT)P(T)

模型结构

那么如何求解上述的两个概率P(O|T) 和 P(T) 呢?根据HMM的两个假设:

齐次马尔科夫假设,当前状态只与前一个状态有关,P(Ti|Ti-1)是状态转移概率,注意第一对P(T1|T0)指的是初始状态T1的概率。计算公式如下:

P ( T ) = P ( T 1 , T 2 , . . . , T N ) = ∏ i = 1 N P ( T i ∣ T i − 1 ) P(T) = P(T_1, T_2,...,T_N) = \prod_{i=1}^NP(T_i|T_{i-1}) P(T)=P(T1,T2,...,TN)=i=1NP(TiTi1)

观测独立假设,当前的观测Oi只与当前状态Ti有关,P(Oi|Ti)是观测概率:

P ( O ∣ T ) = ∏ i = 1 N P ( O i ∣ T i ) P(O|T) = \prod_{i=1}^NP(O_i|T_i) P(OT)=i=1NP(OiTi)

因此可以计算:

T = a r g m a x T P ( T ∣ O ) = a r g m a x T P ( O ∣ T ) P ( T ) T = argmax_TP(T|O) = argmax_T P(O|T)P(T) T=argmaxTP(TO)=argmaxTP(OT)P(T)

上述的观测概率,状态转移概率和初始状态概率可以由监督学习(最大似然估计)和非监督学习(EM算法)学习得到。详细信息参照《统计学习方法》第十章。

HMM中文分词

HMM中文分词是一种:字标注法。即将分词任务转化成对每个字进行标注标签问题。 因此和词性标注问题基本类似。

任务描述

对中文句子进行分词,比如:

原句: 我喜欢机器学习。
分词后: 我\喜欢\机器学习。

我们可以对每个字赋予一个标签,‘B’代表非词尾,‘E’表示词尾。则上述例子应该被标记为:

标记后: 我E喜B欢E机B器B学B习E。

假设观测序列为 O = { O 1 , O 2 , . . . , O N } O = \{O_1, O_2, ..., O_N\} O={O1,O2,...,ON},待预测的标签序列为 C = C 1 , . . . , C N C = {C_1, ..., C_N} C=C1,...,CN,其中 C i ∈ { B , E } C_i \in \{B,E\} Ci{B,E}。那么我们的目标是 C = a r g m a x C P ( C ∣ O ) C = argmax_{C}P(C|O) C=argmaxCP(CO)

模型结构

由贝叶斯公式 P ( C ∣ O ) = P ( O ∣ C ) P ( C ) P ( O ) P(C|O) = \frac{P(O|C)P(C)}{P(O)} P(CO)=P(O)P(OC)P(C)。因为观测序列不变则省略分母 P ( O ) P(O) P(O)

马尔科夫假设知,当前状态只与前一时刻状态有关,则 P ( C ) = P ( C 1 , C 2 , . . . , C N ) = P ( C 1 ) ∗ P ( C 2 ∣ C 1 ) ∗ P ( C 3 ∣ C 2 ) ∗ . . . ∗ P ( C N ∣ C N − 1 ) P(C)=P(C_1, C_2,..., C_N) = P(C_1) * P(C_2|C_1)*P(C_3|C_2)*...*P(C_N|C_{N-1}) P(C)=P(C1,C2,...,CN)=P(C1)P(C2C1)P(C3C2)...P(CNCN1),其中 P ( C i ∣ C i − 1 ) P(C_i|C_{i-1}) P(CiCi1)为状态转移概率。由观测独立假设知,当前的观测输出只与当前状态有关,则 P ( O ∣ C ) = P ( O 1 , . . . , O N ∣ C 1 , . . . , C N ) = P ( O 1 ∣ C 1 ) ∗ P ( O 2 ∣ C 2 ) ∗ . . . ∗ P ( O N ∣ C N ) P(O|C) = P(O_1,...,O_N|C_1,...,C_N) = P(O_1|C_1)*P(O_2|C_2)*...*P(O_N|C_N) P(OC)=P(O1,...,ONC1,...,CN)=P(O1C1)P(O2C2)...P(ONCN),其中 P ( O i ∣ C i ) P(O_i|C_i) P(OiCi)为观测概率。

至此,分词问题可以归结于标注问题,是HMM的解码问题,使用到了维特比(Viterbi)算法。其中初始状态概率 π i \pi_i πi状态转移概率 P ( C i ∣ C i − 1 ) P(C_i|C_{i-1}) P(CiCi1)观测概率 P ( O i ∣ C i ) P(O_i|C_i) P(OiCi)是HMM模型的参数,可以由极大似然估计的统计方法(监督学习,训练集包含观测序列和对应的标签序列),或者EM/Baum-Welch/前向后向算法(非监督学习,数据集只有观测序列)求得。

Viterbi算法使用了动态规划思想,全局最优通过逐步子问题最优求得。详细介绍参见《统计学习方法》chap 10。

实现实例

分词资源:中文分词入门之资源

实际问题中,我们使用4种标签 {B,E,M,S},分别表示:

B:词语的开始

E:词语的结束

M:词语的中间部分

S:单个字组成的单词

举例:我S喜B欢E机B器M学M习E

实际任务中,状态转移矩阵和观测矩阵可以由监督学习得来。这里我们可以用bigram模型: P ( C i ∣ C i − 1 ) = C o u n t ( C i − 1 , C i ) C o u n t ( C i − 1 ) P(C_i|C_{i-1}) = \frac{Count(C_{i-1}, C_i)}{Count(C_{i-1})} P(CiCi1)=Count(Ci1)Count(Ci1,Ci), P ( O i ∣ C i ) = C i , O i C i P(O_i|C_i) = \frac{C_i,O_i}{C_i} P(OiCi)=CiCi,Oi, 其中考虑到未出现的bigram对,这里可以使用不同的smooting技术(add-1, back-off…)。

接着,得到HMM模型参数后,就可以通过Viterbi算法来找到最佳的标签序列了,继而完成对句子的分词。

你可能感兴趣的:(NLP)