最早的统计分词

文章:Richard Sproat, A Statistical Method for Finding Word Boundaries in Chinese, 1990

刚看了一篇2020年关于分词的综述,当中提到,最早使用统计方法进行分词的是1990的一篇文章,看了一下作者名字,Richard Sproat,是一个贝尔实验实的老外,这引起了我的兴趣。

先上结论,这篇文章的方法思想来源于点互信息,与现在的各种模型相比,极其简单,但实验效果达到了惊人的准94%,召94%。

论文的研究动机在于,词的划分结果,影响到中文的发音,进而影响到语音识别效果,比如在“老鼠”单独成词的时候,“老”发第3声(这里其实应该是误解),当“小老鼠”成词时,“老”发第二声。这个例子虽然不恰当,但这个规律确实在中文中普遍出现,比如“小老弟”组合起来时,“小”其实是有变化的。

文章只处理2个字成词的情况,两个字a, b的点互信息定义如下:

I ( a ; b ) = l o g 2 P ( a , b ) P ( a ) P ( b ) I(a;b)=log_2\frac{P(a,b)}{P(a)P(b)} I(a;b)=log2P(a)P(b)P(a,b)

其中,P(a,b)表示两个词同时出现在一个句子中的概率,那这个定义与所需的统计量有一定差异,在点互信息的定义当中并不要求a, b相邻并且保持顺序,据此思想,定义了文章中实际使用的统计量:

A ( a b ) : = l o g 2 f ( a b ) N f ( a ) N f ( b ) N = l o g 2 ( N ) + l o g 2 f ( a b ) f ( a ) f ( b ) A(ab) := log_2 \frac{\frac{f(ab)}{N}}{\frac{f(a)}{N} \frac{f(b)}{N}} =log_2(N)+log_2 \frac{f(ab)}{f(a)f(b)} A(ab):=log2Nf(a)Nf(b)Nf(ab)=log2(N)+log2f(a)f(b)f(ab)

其中,N表示语料的总词数,f(a)表示字a在语料中出现的频率,f(ab)表示ab在句子中连续出现的次数

有了统计量之后,如何切词呢?方法也很简单。对一个句子,遍历当中所有出现的连续字组合ab,计算它们的分值,把分值最高的合并起来,并从候选中去掉,直至无可合并为止。

比如,对句子“我弟弟现在要坐火车回家”,候选及得分如下:

分词候选候选得分合并次序
我弟0.00
弟弟10.441
弟现0.00
现在4.234
在要-2.79
要坐0.00
坐火0.00
火车7.312
车回2.06
回家4.693

合并结果:
我{弟弟}{现在}要坐{火车}{回家}

结果:
语料总词数5828,567错判,347未召回,但错判的部分有明显的规律,如数字、英文等,可以处理,把这部分排除掉的准确率是94%。

错判的原因主要是这些:词的出现频率太低或未在训练集中出现过(岳母、合金等),2字以上词(中山区,不以为然等)

其他讨论:文中还尝试了扩大训练语料集,若扩大的部分与测试集同源,则效果提升,若扩大的部分与测试集异源,则效果有细微下降。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值