训练算法
基于字串成词概率(WR)的全切分
本分词方法的要点在于找一条具有最大概率的切分路径。对于一个待分词句子,有多种切分可能。如果一个句子的长度为n,则理论上有2^(n-1)种可能性。这是因为n个字的句子中间有(n-1)个间隔,每个间隔都有切开和不切开两种选择,不同的选择将导致 2^(n-1)种不同的切分路径。
比如对“它是狗”,就会有4种可能的切分路径:
它/是/狗
它是/狗
它/是狗
它是狗
如果只考虑一元语法,那么对于每种切分形式的概率,可以计算如下。我们将选择切分概率最大的结果作为分词结果。
Pr("它是/狗“|”它是狗“)是指句子”它是狗“被切分为”它是/狗“的概率,这里WR是成词概率。在本文中,对于语料出现的字串S,其成词概率 的计算方法如下:
其中,count(S)是字串S在语料中出现的次数, wordcount(S)是S 在语料作为独立完整的词语出现的次数。假设语料如下(空格表示词语之间的间隔):
我 是 研究生 , 研究 生物 , 一 个 人 认真 工作 , 从不 讲求 个人 利益 。
在这个句子中,字串“研究”出现了2次,在“研究 生物”中作为完整独立的词语出现了1次,在“研究生”中作为词语内部的子串出现了1次。同样,字串“个人”作为完整独立的词语只出现了1次,但“一 个 人”作为两个相邻词语合并成的字串出现了1次,因此“个人”作为字串一共出现了2次。
容易得知, WR值高的字串更容易作为词语出现,因此在中文分词时产生歧义的可能性要小。
上面用的是一元语法,因而没有考虑相邻词语之间的相关性。为此,我们要引入二元语法,此时,不同切分路径的概率计算如下:
其中<S>是一个虚设的词语,我们假定在每个句子的前面都有这么一个词语。基于WR的二元语法概率定义如下:
其中,count(S|P) 是词语P后面相邻字串S的次数, wordcount(S|P)是指词语P后面相邻词语S的次数。
值得说明的是,很多情况下 WR(S)=WR(S|P),也就使得其实不用为所有出现的(P,S)二元组保存成词概率WR(S|P) ,而只需用WR(S) 来替代 即可。这可以大大节省存储空间。
回复 5# lkk_super
|