推导过程如下(个人推导): P(W)?P(WC)P(C|W)?P(W|C)P(C)P(C|W)
这里值的注意的是P(C|W),由于一个词序列与类序列是严格对应关系,一个词只能为一个类,一个类可以对应多个词,因此P(C|W)=1,原式可得P(W)?P(W|C)P(C)。
将词类看做状态,词语看做观察值,利用一阶HMM展开
NW#?argmax?p(wi|ci)p(ci|ci?1) (其中,c0为句子的开始标记BEG)
Wi?1推导过程如下(个人推导): 由于给定的词序,我们是已知其类序列的,因此可以认为从观察值序列可以得到其状态转换序列,这实际上就是马尔可夫链模型,因此按照马尔可夫链模型的公式可得
NP(C)?P(c0)?P(ci|ci?1)
i?1NP(W|C)??i?0P(wi|ci)
词序c0必为BEG,P(c0)=1,P(w0|c0)=1,故,可得到上式。
为方便计算,常用负对数来运算,则
NW#?argminW?[?lni?1p(wi|ci)?lnp(ci|ci?1)]
则最终所求的分词结果就转化成了出各个词序中初始节点到结束节点的最短路径。
未登录词的隐马识别方法
我们在基于类地隐马分词中使用到的是已经分好类地词序,如:张磊,可以切分为张|张,磊|磊,也可作为一个词张磊|PER,那么将它识别成人名的未登录词则是本算法的任务,(1)确定未登录词wi的边界和类别ci,(2)计算P(wi|ci)。
和基于类地隐马分词类似,对初始切分得到的各个词按照其再未登录词识别中的作用进行分类,并将词所起的不同作用称为角色。与隐马分词中定义的类相比,角色不同的是:类和词是一对多的关系,而角色与词是多对多的关系,即:一个词可以充当多个角色,而一个角色也可以对应多个词。
对于一个给定的初始切分结果W=(w1w2…w3),在一个角色集合的范畴内,假定R=(r1,r2…rn)为C的某个角色序列。我们取概率最大的角色序列R#作为最终的角色标注结果。 论文上提出R#的求法与隐马分词的W#求法类似,得出的计算公式为
NR?argminW#?[?lni?1p(wi|ri)?lnp(ri|ri?1)]
这点我不认同,在这里W为观察序列,R为状态转移序列,R#代表的是得到观察序列W的最佳状态转移序列R,这是HMM中的第二个问题,而隐马分词中求的W#是求的是概率最大的观察序列W,这是HMM中的第一个问题,因此这个结论是错误的。
R#可以通过viterbi算法选优得到。(基于HMM的第二种问题解决方法)下图给出了在词序“毛/泽/东/TIME/诞生”的viterbi算法标注人名角色的过程。
Viterbi的计算过程已讲解过,不再重复论述。 在上图中,我们可以求解出最优的角色标注:“毛/C泽/D东/ETIME/B诞生/Z”而CDE正好构成一个典型的汉语人名,因此“毛泽东”被识别为人名PER。 识别出来的未登录词wi,类别为ci,利用隐马过程可得:
kP(wi|ci)??j?0p(wp?j|rp?j)p(rp?j|rp?j?1)
其中,wi由第p,p+1,…,p+k-1个初始切分单元组成。
复杂地名和机构名往往嵌套了普通无嵌套的人名,地名等未登录词,如“张自忠路”,“周恩来和邓颖超纪念馆”。对于这种嵌套的未登录词,论文中的做法是:在低层的HMM识别过程中,先识别出普通不嵌套的未登录词,然后在此基础上,通过角色标注计算出最优的角色序列,在此基础上,进一步识别出嵌套的未登录词,以切分序列片段“周/恩/来/和/邓/颖/超/的/纪念馆”为例,我们先识别出“周恩来”和“邓颖超”为人名PER,得到新的词序列“PER/和/PER/纪念馆”,最终就可以识别出该片段为机构名。这样的处理优点在于能够利用已经分析的结果,并降低数据的稀疏程度。