中文分词算法漫游指南
Posted 美文美影
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了中文分词算法漫游指南相关的知识,希望对你有一定的参考价值。
美
文
美
影
美文美影擅长的业务之一就是中文分词和语义识别领域的相关标注。
我们为客户提供自主研发的标注后台,开发业界领先的交叉标注系统来确保标注的准确性。同时我们的标注员均来自各大本科院校的文科类专业,确保了团队的成长性与标注质量。
目前跟搜狐和趣头条都建立了深入长期的中文分词标注合作。帮助他们更好地为用户提供个性化精准推荐内容,合作至今,每期任务均完美交付,综合准确率在96%以上。
那么,机器学习领域里的中文分词是什么?它是怎样实现的?接下来小编就给大家做一个简单的科谱。
中
文
分
词
“结婚的和尚未结婚的”,应该分成“结婚/的/和/尚未/结婚/的”,还是“结婚/的/和尚/未/结婚/的”?
中文分词的主要困难在于分词歧义。很多分词,人来判断很容易,但要交给计算机来处理就麻烦了。类似的例子数不胜数,“中外科学名著”、“提高产品质量”随便切几刀下去,得出的切分都是合理的。
最
大
匹
配
最简单的,也是最容易想到的自动分词算法,便是最大匹配法了。也就是说,从句子左端开始,不断匹配最长的词(组不了词的单字单独划开),直到把句子划分完。算法的理由很简单:人是从左往右逐字阅读的,算法与人的习惯相符。大多数情况下,这种算法也能侥幸成功。不过,这种算法并不可靠,构造反例可以不费吹灰之力。
例如,“北京大学生前来应聘”本应是“北京/大学生/前来/应聘”,却会被误分成“北京大学/生前/来/应聘”。
特
殊
规
则
维护一个特殊规则表,可以修正一些很机械的问题,效果相当不错。例如,“不可能”要划分成“不/可能”,“会诊”后面接“断”、“疗”、“治”时要把“会”单独切出,等等。
还有一个适用范围相当广的特殊规则。首先我们要维护一个一般不单独成词的字表,比如“民”、“尘”、“伟”、“习”等等;这些字通常不会单独划出来,都要跟旁边的字一块儿组成一个词。在分词过程中,一旦发现这些字被孤立出来,都要重新考虑它与前面的字组词的可能。例如,在用最大匹配法切分“为人民服务”时,算法会先划出“为人”一词,然后发现“民”字只能单独成词了。查表发现,“民”不能单独划出,于是进行修正——把“为人”的“人”字分配给“民”字。这下“为”和“人民”正好都能成词,据此便可得出正确的划分“为/人民/服务”。
最
小
数
词
为了把问题变得更加形式化,充分利用计算机的优势,我们还有一种与人的阅读习惯完全不同的算法思路,就是把句子作为一个整体来考虑,从全局的角度评价一个句子划分方案的好坏,寻找词数最少的划分,即最少数词法。在有的情况下,最少词数法比最大匹配法效果更好。比如:若用最大匹配法来划分,“独立自主和平等互利的原则”将被分成“独立自主/和平/等/互利/的/原则”,一共有 6 个词;但词数更少的方案则是“独立自主/和/平等互利/的/原则”,一共只有 5 个词。
罚
分
最
少
当然,最少词数法也会有踩大便的时候。“为人民办公益”的最大匹配划分和最少词数划分都是“为人/民办/公益”,而正确的划分则是“为/人民/办/公益”。同时,很多句子也有不止一个词数最少的分词方案,最少词数法并不能从中选出一个最佳答案。不过,把之前提到的“不成词字表”装备到最少词数法上,我们就有了一种简明而强大的算法:对于一种分词方案,里面有多少词,就罚多少分;每出现一个不成词的单字,就加罚一分。最好的分词方案,也就是罚分最少的方案。这种算法的效果出人意料的好。“他说的确实在理”是一个很困难的测试用例,“的确”和“实在”碰巧也成词,这给自动分词带来了很大的障碍。但是“确”、“实”、“理”通常都不单独成词的,因此很多切分方案都会被扣掉不少分:
他/说/的/确实/在理(罚分:1+1+1+1+1=5)
他/说/的确/实/在理(罚分:1+1+1+2+1=6)
他/说/的确/实在/理(罚分:1+1+1+1+2=6)
正确答案胜出。
最
大
概
率
算法还有进一步加强的余地,即用每个词出现的概率,来衡量分词的优劣。“字不成词”有一个程度的问题。“民”是一个不成词的语素,它是绝对不会单独成词的。“鸭”一般不单独成词,但在儿歌童谣和科技语体中除外。换句话说,每个字成词都有一定的概率,每个词出现的频率也是不同的。于是我们有了一个更标准、更连续、更自动的改进算法,最大概率法:先统计大量真实语料中各个词出现的频率,然后把每种分词方案中各词的出现概率乘起来作为这种方案的得分。利用动态规划,不难求出得分最高的方案。
以“有意见分歧”为例,查表可知,在大量真实语料中,“有”、“有意”、“意见”、“见”、“分歧”的出现概率分别是 0.0181 、 0.0005 、 0.0010 、 0.0002 、 0.0001 ,因此“有/意见/分歧”的得分为 1.8×10-9 ,但“有意/见/分歧”的得分只有 1.0×10-11 ,正确方案完胜。
这里的假设是,用词造句无非是随机选词连在一块儿,是一个简单的一元过程。显然,这个假设理想得有点不合理,必然会有很多问题。考虑下面这句话:
这/事/的确/定/不/下来
但是概率算法却会把这个句子分成:
这/事/的/确定/不/下来
原因是,“的”字的出现概率太高了,它几乎总会从“的确”中挣脱出来。
统
计
语
言
模
型
其实,以上所有的分词算法都还有一个共同的大缺陷:即同一个字串既可合又可分。比如说,“个人恩怨”中的“个人”,“这个人”就必须拆开为“这个”“人”;“这扇门的把手”中的“把手”,“把手抬起来” 就必须拆开为“把”“手”。这样的例子非常多,“难过”、“马上”、“将来”、“才能”、“过人”等都有此问题。究竟是合还是分,还得取决于它两侧的词语。到目前为止,所有算法对划分方案的评价标准都是基于每个词固有性质的,完全不考虑相邻词语之间的影响,所以以上的所有策略都不能实现具体情况具体分析。
于是,我们不得不跳出一元假设。此时,便有了统计语言模型算法。对于任意两个词语 w1 、 w2 ,统计在语料库中词语 w1 后面恰好是 w2 的概率 P(w1, w2) 。这样便会生成一个很大的二维表。再定义一个句子的划分方案的得分为 P(∅, w1) · P(w1, w2) · … · P(wn-1, wn) ,其中 w1, w2, …, wn 依次表示分出的词。我们同样可以利用动态规划求出得分最高的分词方案。这真是一个天才的模型,这个模型一并解决了词类标注、语音识别等各类自然语言处理问题。
至此,中文自动分词算是有了一个漂亮而实用的算法。
下一篇将继续给大家科谱中文分词面临的几座大山。
• end •
公司介绍:
文章摘自《漫话中文自动分词和语义识别(上):中文分词算法》
美文美影
人工智能界的富士康需要标注扫我→→
以上是关于中文分词算法漫游指南的主要内容,如果未能解决你的问题,请参考以下文章