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(T∣O)
其中:
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},是状态/标签序列。Ti∈all POS tags
根据贝叶斯公式:
P ( T ∣ O ) = P ( O ∣ T ) P ( T ) P ( O ) P(T|O) = \frac{P(O|T)P(T)}{P(O)} P(T∣O)=P(O)P(O∣T)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(T∣O)=argmaxTP(O∣T)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=1∏NP(Ti∣Ti−1)
观测独立假设,当前的观测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(O∣T)=i=1∏NP(Oi∣Ti)
因此可以计算:
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(T∣O)=argmaxTP(O∣T)P(T)
上述的观测概率,状态转移概率和初始状态概率可以由监督学习(最大似然估计)和非监督学习(EM算法)学习得到。详细信息参照《统计学习方法》第十章。
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(C∣O)。
由贝叶斯公式 P ( C ∣ O ) = P ( O ∣ C ) P ( C ) P ( O ) P(C|O) = \frac{P(O|C)P(C)}{P(O)} P(C∣O)=P(O)P(O∣C)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(C2∣C1)∗P(C3∣C2)∗...∗P(CN∣CN−1),其中 P ( C i ∣ C i − 1 ) P(C_i|C_{i-1}) P(Ci∣Ci−1)为状态转移概率。由观测独立假设知,当前的观测输出只与当前状态有关,则 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(O∣C)=P(O1,...,ON∣C1,...,CN)=P(O1∣C1)∗P(O2∣C2)∗...∗P(ON∣CN),其中 P ( O i ∣ C i ) P(O_i|C_i) P(Oi∣Ci)为观测概率。
至此,分词问题可以归结于标注问题,是HMM的解码问题,使用到了维特比(Viterbi)算法。其中初始状态概率 π i \pi_i πi状态转移概率 P ( C i ∣ C i − 1 ) P(C_i|C_{i-1}) P(Ci∣Ci−1)和观测概率 P ( O i ∣ C i ) P(O_i|C_i) P(Oi∣Ci)是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(Ci∣Ci−1)=Count(Ci−1)Count(Ci−1,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(Oi∣Ci)=CiCi,Oi, 其中考虑到未出现的bigram对,这里可以使用不同的smooting技术(add-1, back-off…)。
接着,得到HMM模型参数后,就可以通过Viterbi算法来找到最佳的标签序列了,继而完成对句子的分词。