记得第一次了解中文分词算法是在 Google 黑板报 上看到的,当初看到那个算法时我彻底被震撼住了,想不到一个看似不可能完成的任务竟然有如此神奇巧妙的算法。最近在詹卫东老师的《中文信息处理导论》课上再次学到中文分词算法,才知道这并不是中文分词算法研究的全部,前前后后还有很多故事可讲。在没有建立统计语言模型时,人们还在语言学的角度对自动分词进行研究,期间诞生了很多有意思的理论。
中文分词的主要困难在于分词歧义。“结婚的和尚未结婚的”,应该分成“结婚/的/和/尚未/结婚/的”,还是“结婚/的/和尚/未/结婚/的”?人来判断很容易,要交给计算机来处理就麻烦了。问题的关键就是,“和尚未”里的“和尚”也是一个词,“尚未”也是一个词,从计算机的角度看上去,两者似乎都有可能。对于计算机来说,这样的分词困境就叫做“交集型歧义”。
有时候,交集型歧义的“歧义链”有可能会更长。“中外科学名著”里,“中外”、“外科”、“科学”、“学名”、“名著”全是词,光从词库的角度来看,随便切几刀下去,得出的切分都是合理的。类似的例子数不胜数,“提高产品质量”、“鞭炮声响彻夜空”、“努力学习语法规则”等句子都有这样的现象。在这些极端例子下,分词算法谁优谁劣可谓是一试便知。
最简单的,也是最容易想到的自动分词算法,便是“最大匹配法”了。也就是说,从句子左端开始,不断匹配最长的词(组不了词的单字则单独划开),直到把句子划分完。算法的理由很简单:人在阅读时也是从左往右逐字读入的,最大匹配法是与人的习惯相符的。而在大多数情况下,这种算法也的确能侥幸成功。不过,这种算法并不可靠,构造反例可以不费吹灰之力。例如,“北京大学生前来应聘”本应是“北京/大学生/前来/应聘”,却会被误分成“北京大学/生前/来/应聘”。
维护一个特殊规则表,可以修正一些很机械的问题,效果相当不错。例如,“不可能”要划分成“不/可能”,“会诊”后面接“断”、“疗”、“脉”、“治”时要把“会”单独切出,“的确切”后面是抽象名词时要把“的确切”分成“的/确切”,等等。
还有一个适用范围相当广的特殊规则,这个强大的规则能修正很多交集型歧义的划分错误。首先我们要维护一个一般不单独成词的字表,比如“民”、“尘”、“伟”、“习”等等;这些字通常不会单独划出来,都要跟旁边的字一块儿组成一个词。在分词过程中时,一旦发现这些字被孤立出来,都重新考虑它与前面的字组词的可能。例如,在用最大匹配法切分“为人民服务”时,算法会先划出“为人”一词,而后发现“民”字只能单独成词了。查表却发现,“民”并不能单独划出,于是考虑进行修正——把“为人”的“人”字分配给“民”字。巧在这下“为”和“人民”正好都能成词,据此便可得出正确的划分“为/人民/服务”。
不过,上述算法归根结底,都是在像人一样从左到右地扫描文字。为了把问题变得更加形式化,充分利用计算机的优势,我们还有一种与人的阅读习惯完全不同的算法思路:把句子作为一个整体来考虑,从全局的角度评价一个句子划分方案的好坏。设计自动分词算法的问题,也就变成了如何评估分词方案优劣的问题。最初所用的办法就是,寻找词数最少的划分。注意,每次都匹配最长的词,得出的划分不见得是词数最少的,错误的贪心很可能会不慎错过一些更优的路。因而,在有的情况下,最少词数法比最大匹配法效果更好。若用最大匹配法来划分,“独立自主和平等互利的原则”将被分成“独立自主/和平/等/互利/的/原则”,一共有 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 ,正确方案完胜。
这里的假设是,用词造句无非是随机选词连在一块儿,是一个简单的一元过程。显然,这个假设理想得有点不合理,必然会有很多问题。考虑下面这句话:
这/事/的确/定/不/下来
但是概率算法却会把这个句子分成:
这/事/的/确定/不/下来
原因是,“的”字的出现概率太高了,它几乎总会从“的确”中挣脱出来。
其实,以上所有的分词算法都还有一个共同的大缺陷:它们虽然已经能很好地处理交集型歧义的问题,却完全无法解决另外一种被称为“组合型歧义”的问题。所谓组合型歧义,就是指同一个字串既可合又可分。比如说,“个人恩怨”中的“个人”就是一个词,“这个人”里的“个人”就必须拆开;“这扇门的把手”中的“把手”就是一个词,“把手抬起来”的“把手”就必须拆开;“学生会宣传部”中的“学生会”就是一个词,“学生会主动完成作业”里的“学生会”就必须拆开。这样的例子非常多,“难过”、“马上”、“将来”、“才能”、“过人”、“研究所”、“原子能”都有此问题。究竟是合还是分,还得取决于它两侧的词语。到目前为止,所有算法对划分方案的评价标准都是基于每个词固有性质的,完全不考虑相邻词语之间的影响;因而一旦涉及到组合型歧义的问题,最大匹配、最少词数、概率最大等所有策略都不能实现具体情况具体分析。
于是,我们不得不跳出一元假设。此时,便有了那个 Google 黑板报上提到的统计语言模型算法。对于任意两个词语 w1 、 w2 ,统计在语料库中词语 w1 后面恰好是 w2 的概率 P(w1, w2) 。这样便会生成一个很大的二维表。再定义一个句子的划分方案的得分为 P(∅, w1) · P(w1, w2) · … · P(wn-1, wn) ,其中 w1, w2, …, wn 依次表示分出的词。我们同样可以利用动态规划求出得分最高的分词方案。这真是一个天才的模型,这个模型一并解决了词类标注、语音识别等各类自然语言处理问题。
至此,中文自动分词算是有了一个漂亮而实用的算法。
但是,随便拿份报纸读读,你就会发现我们之前给出的测试用例都太理想了,简直就是用来喂给计算机的。在中文分词中,还有一个比分词歧义更令人头疼的东西——未登录词。中文没有首字母大写,专名号也被取消了,这叫计算机如何辨认人名地名之类的东西?最近十年来,中文分词领域都在集中攻克这一难关。
在汉语的未定义词中,中国人名的规律是最强的了。根据统计,汉语姓氏大约有 1000 多个,其中“王”、“陈”、“李”、“张”、“刘”五大姓氏的覆盖率高达 32% ,前 400 个姓氏覆盖率高达 99% 。人名的用字也比较集中,“英”、“华”、“玉”、“秀”、“明”、“珍”六个字的覆盖率就有 10.35% ,最常用的 400 字则有 90% 的覆盖率。虽然这些字分布在包括文言虚词在内的各种词类里,但就用字的感情色彩来看,人名多用褒义字和中性字,少有不雅用字,因此规律性还是非常强的。根据这些信息,我们足以计算一个字符串能成为名字的概率,结合预先设置的阈值便能很好地识别出可能的人名。
可是,如何把人名从句子中切出来呢?换句话说,如果句中几个连续字都是姓名常用字,人名究竟应该从哪儿取到哪儿呢?人名以姓氏为左边界,相对容易判定一些。人名的右边界则可以从下文的提示确定出来:人名后面通常会接“先生”、“同志”、“校长”、“主任”、“医生”等身份词,以及“是”、“说”、“报道”、“参加”、“访问”、“表示”等动作词。
但麻烦的情况也是有的。一些高频姓氏本身也是经常单独成词的常用字,例如“于”、“马”、“黄”、“常”、“高”等等。很多反映时代性的名字也是本身就成词的,例如“建国”、“建设”、“国庆”、“跃进”等等。更讨厌的就是那些整个名字本身就是常用词的人了,他们会彻底打乱之前的各种模型。如果分词程序也有智能的话,他一定会把所有叫“高峰”、“汪洋”的人拖出去斩了;要是听说了有人居然敢叫“令计划”,估计直接就崩溃了。
还有那些恰好与上下文组合成词的人名,例如:
费孝通向人大常委会提交书面报告
邓颖超生前使用过的物品
这就是最考验分词算法的句子了。
相比之下,中国地名的用字就分散得多了。北京有一个地方叫“臭泥坑”,网上搜索“臭泥坑”,第一页全是“臭泥坑地图”、“臭泥坑附近酒店”之类的信息。某年《重庆晨报》刊登停电通知,上面赫然印着“停电范围包括沙坪坝区的犀牛屙屎和犀牛屙屎抽水”,读者纷纷去电投诉印刷错误。记者仔细一查,你猜怎么着,印刷并无错误,重庆真的就有叫“犀牛屙屎”和“犀牛屙屎抽水”的地方。
好在,中国地名数量有限,这是可以枚举的。中国地名委员会编写了《中华人民共和国地名录》,收录了从高原盆地到桥梁电站共 10 万多个地名,这让中国地名的识别便利了很多。
真正有些困难的就是识别机构名了,虽然机构名的后缀比较集中,但左边界的判断就有些难了。更难的就是品牌名了。如今各行各业大打创意战,品牌名可以说是无奇不有,而且经常本身就包含常用词,更是给自动分词添加了不少障碍。
最难识别的未登录词就是缩略语了。“高数”、“抵京”、“女单”、“发改委”、“北医三院”都是比较好认的缩略语了,有些缩略语搞得连人也是丈二和尚摸不着头脑。你能猜到“人影办”是什么机构的简称吗?打死你都想不到,是“人工影响天气办公室”。
汉语中构造缩略语的规律很诡异,目前也没有一个定论。初次听到这个问题,几乎每个人都会做出这样的猜想:缩略语都是选用各个成分中最核心的字,比如“安全检查”缩成“安检”,“人民警察”缩成“民警”等等。不过,反例也是有的,“邮政编码”就被缩成了“邮编”,但“码”无疑是更能概括“编码”一词的。当然,这几个缩略语已经逐渐成词,可以加进词库了;不过新近出现的或者临时构造的缩略语该怎么办,还真是个大问题。
说到新词,网络新词的大量出现才是分词系统真正的敌人。这些新词汇的来源千奇百怪,几乎没有固定的产生机制。要想实现对网络文章的自动分词,目前来看可以说是相当困难的。革命尚未成功,分词算法还有很多进步的余地。
分享到:
相关推荐
第一章 从计算机说起 第二章 数是什么 第三章 运算的规律 第四章 怎样才能算的快 第五章 对数、算尺与算图 ……
漫话IP:TCP_IP基础知识读本
《数学文化小丛书:漫话e》先简要介绍对数的基本概念及性质,阐述其在多方面的表现和应用,然后着重讨论自然对数与自然指数及它们的底e。说明e这一似乎难以捉摸的数其实并不神秘,而且以e为底的对数和指数都的确非常...
《教育漫话》是17世纪英国哲学家约翰·洛克的一部重要教育著作,它对幼儿教育实践提供了深刻的启示。洛克在书中强调了健康教育、道德教育和知识教育的重要性,这些观点至今仍对现代幼儿教育有着深远的影响。 首先,...
### 初等组合学漫话:算法的基础 在探讨初等组合数学之前,我们首先要明确这一领域的核心概念及其与算法之间的联系。初等组合数学作为数学的一个分支,它研究的是有限集合元素的不同组合方式,包括排列、组合以及...
河西走廊南依祁连山脉,北抵腾格里沙漠和巴丹吉林沙漠,是秦岭和长城的连接部分,自汉代张骞通西域开始,直到明代东西方陆路交通衰落之前,一直是东西方官方使节、民间商旅往来的通道,也是农耕文明、草原文明以及...
《漫话九月会》是一篇回顾旧时...整体而言,《漫话九月会》不仅是一篇简单的回忆录,它更是一幅丰富多彩的历史画卷,展现了上世纪中期中国北方地区的社会风情和人民生活,对于研究该时期的社会文化具有重要的参考价值。
《教育漫话》是约翰·洛克的教育经典之作,它以信件的形式,深入探讨了家庭教育的诸多方面,尤其强调了教育的重要性和深远影响。洛克认为教育错误对人的影响是无法轻易消除的,而且人的品质和能力很大程度上由教育...
本讲座“漫话数据结构-顺序查找和折半查找”聚焦于两种基本的查找算法:顺序查找和折半查找。 顺序查找是一种最直观的查找方法。在顺序查找中,我们遍历线性表中的每个元素,逐个比较目标值与表中元素的关键字,...
《漫话三国英雄》的主题显然聚焦于中国历史上的三国时期,这一时代因其英雄辈出而闻名,其中最为人们津津乐道的人物包括关羽、曹操、诸葛亮、曹植和张飞等。他们各自的故事和言行,成为了后世诸多成语和典故的来源。...
《漫话清高》这篇内容主要探讨了中国古代文化中对于"清高"这一概念的理解和诠释。"清高"一词在中国传统文化中常用来形容那些品行高尚、不慕名利、保持独立人格的人。作者金开诚通过一系列历史人物的事迹,揭示了...
压缩包中的“漫话e_12860232.lnk”可能是指向《漫话e》电子书的快捷方式,而“解码三大数学常数e的密码.pdf”和“漫话e_12860232.pdf”则是两本书的PDF版本,供读者下载阅读。通过这两本书,读者不仅可以了解到e的...
初中语文语文论文漫话教育诚信
【标题】:“初中语文文摘社会北京四格漫话”主要涵盖了几个方面的内容,包括北京动物园的特殊含义、个人成长与职场经历、以及城市与人物故事。这些内容虽然表面上看似与IT行业无关,但其中蕴含的生活哲学和人性洞察...
在《漫话互联网产品经理》中,作者深入浅出地介绍了产品经理的职责、工作内容以及所需技能。 首先,让我们明确什么是产品经理。产品经理是产品的管理者,他们对产品的整个生命周期负全责,从构思到上市,再到最终的...
【漫话互联网产品经理】课程旨在深入探讨互联网产品经理这一角色,帮助学员全面了解产品经理的工作内容、职责以及所需的技能。课程从“什么是产品经理”开始,强调产品经理是产品的守护者,负责产品从构思到终结的全...
数据结构是计算机科学中至关重要的基础概念,它关乎如何高效地组织和管理数据,以便进行快速查找、插入和删除等操作。在这个名为“漫话数据结构-学生成绩分段查找”的主题中,我们将探讨如何利用数据结构解决一个...
漫话ERP- 轻松掌控现代管理工具 以生動幽默的寫法,詳細說明ERP的建構理論
《教育漫话》是约翰·洛克的一部教育经典著作,书中深入探讨了教育的三个核心领域:体育、德育和智育。以下是对这三个主题的详细解读: 1. 体育(健康教育): 洛克强调体育的重要性,实际上是指健康教育。他提倡...
在“漫话数据结构-舞伴问题.pptx”中,我们探讨了一个有趣的问题——舞伴问题。这个问题涉及到了数据结构的基本概念,如逻辑结构、存储结构和运算,以及如何运用这些知识来解决实际问题。舞伴问题的核心在于,男士和...