Itenyh版-用HMM做中文分词二:模型准备

本质上看,分词可以看做一个为文本中每个字符分类的过程,例如我们现在定义两个类别:E代表词尾词,B代表非词尾词,于是分词“你/现在/应该/去/幼儿园/了”可以表达为:你E现B在E应B该E去E幼B儿B园E了B,分类完成后只需要对结果进行“解读”就可以得到分词结果了。

那么如何找到这个分类序列EBEBEEBBEB呢?我们可以求得所有可能出现的分类序列的出现概率然后选择其中概率最大的一个,用数学表达为:

                                                 argmax C  P(C1,C2,C3….Ci) (1)

其中C代表一个分类标识,这里,C 属于 {E,B} 进一步的:

P(C1,C2,C3….Ci) = P(C1)P(C2,C3…..Ci|C1)=P(C1)P(C2|C1)P(C3…..Ci|C1,C2)=

P(C1)P(C2|C1)P(C3|C2,C1)P(C4|C3,C2,C1)…P(Ci|Ci-1….C1)

这里,我们假设第i个分类标记只依赖于第i-1个标记,那么我们可以得到分类标记的马尔科夫链了:

                                 P(C1,C2,C3….Ci) =P(C1)P(C2|C1)P(C3|C2)…P(Ci|Ci-1)

我们称P(Cj|Ci)为i到j的状态转移概率,可以通过在大量预料中使用统计的方法求得。如果我们用(1)这个模型为上例找到了EBEBEEBBEB这个序列,看似好像是一个好的解决方案,不难想到的问题是,对于任何一个10个字符组成的文本,我们都会得到这个相同的序列,也即相同的分词结果,这太可怕了!问题在于我们只考虑了分类标记而没有考虑被分词的对象,也即每一个具体的字符,我们称这些字符为观察值,用O表示,现在把它们考虑进来,我们要找的是:

                                argmax C  P(C1,C2,C3….Ci | O1, O2, O3……Oi) = P(C|O)(1)

         给定了O的情况下,最有可能出现的C的序列,也是HMM的“解码问题”,根据贝叶斯公式有:

                                               P(C|O) = P(O|C)P(C) / P(O)

        由于P(O)对于每一种序列来说都是一样的,因此可以去掉,因此,(1)等价于 :

                                                  argmax C P(O|C)P(C) (2)

P(C)的求法上面已经讲过了,对于P(O|C),HMM有两个假设:(a)已知类地序列,观察值在统计上是独立的; (b)某类的概率密度函数不依赖其他类。也就是说依赖性仅仅存在于产生类的序列,而在类内,观察值服从类自己的规则。因此对于:

                              P(O|C) = P(O1, O2, O3……Oi | C1,C2,C3….Ci )

根据假设a,观察序列具有统计意义上的独立性,因此:

                   P(O1, O2, O3……Oi | C1,C2,C3….Ci )=P(O1|C) * P(O2|C)……P(Oi|C)

根据假设b,对于Oi的分类Ci与Cj没有依赖关系,所以有:

                      P(O1|C) * P(O2|C)……P(Oi|C) = P(O1|C1) * P(O2|C2)……P(Oi|Ci)

同样的P(Oi|Ci) 可以通过在大量预料中使用统计的方法求得。至此我们在一个马尔科夫链上加入了观察值数据,构造了一个HMM,这个模型已经可以具备一定的分词能力啦!

尽管没有用到,顺便回顾一下HMM要解决的第一个问题“评估”,也即求一个给定观察序列的概率,即:P(O),用全概率公式展开有:P(O) = sigmaO P(O|C)P(C)(sigmaO代表对O的集合求和),同样需要计算P(O|C),因此计算上和“解码”有相似之处。

PS : 关于模型(1),在论文HMM Tutorial中写的是:

图中O是观察值,q是代表分类序列,λ指HMM模型,可见作者用的是qO的联合概率,而(1)中用的是O作为条件的条件概率。这个模型和模型(2)是相等的,因此所求的的序列也和模型(1)相等。个人认为,从理解来看,既然给定了O,是不是把O作为条件概率更合适呢?

此条目发表在中文分词, 隐马尔科夫模型分类目录。将固定链接加入收藏夹。

Itenyh版-用HMM做中文分词二:模型准备》有 4 条评论

  1. Pingback引用通告: Thought this was cool: Itenyh版-用HMM做中文分词三:前向算法和Viterbi算法的开销 « CWYAlpha

  2. 陈健说:

    @既然给定了O,是不是把O作为条件概率更合适呢?

    这一步中,P(O)的结果是固定的,不会影响最后的label结果。即对于任何C-label序列,P(O)的结果是固定的。

    [回复]

    itenyh 回复:

    结果不会影响,我的意思是,从意思理解上P(C/O) 是不是比 P(CO)好,因为O是一个给定的条件。

    [回复]

  3. zeno说:

    文章写的太棒了。对我目前的学习很有帮助

    [回复]

发表评论

电子邮件地址不会被公开。 必填项已用*标注