分词,顾名思义,就是把一段文字划分成多个词的动作。它是自然语言处理的重要分支。分词的终极目标,是在尽可能短的时间里将一段文字分解成尽可能接近用户本意的多个词。
自然语言处理的发展史上曾经有两大流派:语法派,统计派。
语法派,是期望计算机能像人一样用语法规则来分析语言,经过一代科学家走了20多年弯路之后,人们发现这条路不切实际,没有再继续探索的价值。
统计派,是用数学方法通过大量语料来训练计算机,从而让计算机知道哪些是词,哪些不是,并且能联系上下文进行分词选择,这种思路发展至今已经比较成熟。目前的分词方案都是基于这个思路实现的。
改善分词质量主要从两个方面着手:算法,词库。
(一)合理的算法可以提高分词性能、提高歧义处理能力。
(二)强大的词库可以提高词汇的识别率。与时俱进的词库对分词有决定性的作用。词库需要一个完整的训练机制来维护,使得词库越来越强大。
(1)覆盖歧义
例子:开心辞典是个好节目,“开心”是一个词,“开心辞典”也是一个词,究竟该按哪个词来分呢?“开心”之后可下刀否?
(2)交叉歧义
例子:北京大学生的素质普遍比较高,是该“北京大学/生”?还是该“北京/大学生”?这种左拥右抱的货色该怎么处置?
(3)语义歧义
例子:“白天鹅在水中游”,这句话是有歧义的,它可能指的是“白天有一只鹅在水中游”,也可能指的是“有一只白天鹅在水中游”。别说是计算机,就是活人来解读也无法确定其真实含义。
(4)新词识别
要识别词势必离不开词库,可是“时代在发展、社会在进步”,大量新鲜事物必然带来大量新词汇,如果词库不能及时更新,那么分词的时候就不认识这些词了。比如五年前的分词系统的词库肯定没有“坑爹”这个词。
(5)错别字
用户的输入是不可靠的,不是每个人都能把心理想要的东西准确表达出来,但是分词系统不能因此而抛弃他们。比如:黄粱一梦,如果用户输入“黄梁一梦”呢?难道把这四个字分成四个单字吗?那实在是太弱了。
CRF——Conditional Random Field.
条件随机场,是目前分词系统中广泛使用的算法。要了解条件随机场就要从马尔可夫链开始讲起。
如果随机变量m在时间t所处的状态用St来表示,S1,S2... ...St表示随机变量m在时间1~t之间的状态。假设St只和St-1有关,和其他状态无关,这一假设称为马尔可夫假设,符合这一假设的随机过程称为马尔可夫过程,也叫马尔可夫链。
对于马尔可夫链,如果已知状态序列S1,S2... ...St,则很容易指定随机变量m的变化情况,包括变化成的值和变成该值的次数,从而算出变成各值的概率。
隐含马尔可夫模型是马尔可夫链的一个扩展:随机变量m在任一时刻t的状态St是不可见的。但是会输出一个符号Ot,这个Ot和且仅和St相关。这就是隐含马尔可夫模型。
在隐含马尔可夫模型里,观察值Ot只和号St有关。如果扩大Ot的考虑因素范围,同时和St-1、St、St+1有关,这样的模型就是条件随机场模型。
分词质量评估主要考虑PRF三个指标:准确率(P)、召回率(R)、综合指标F值(F)。
准确率(P) = 准确切分的词语数 / 切分出的所有词语数
召回率(R) = 准确切分的词语数 / 应该切分的词语数
综合指标F值(F) = (β的平方+1)PR/(β的平方*P+R)
其中,β决定对P侧重还是对R侧重,通常设定为1、2或1/2。β取值为1,即对二者一样重视。