NLP中的中文分词技术
NLP中的中文分词技术
作者:mjs (360电商技术组)
随 着需求的变化和技术的发展,互联网企业对数据的分析越来越深入,尤其是自然语言处理处理领域,近几年,在搜索引擎、数据挖掘、推荐系统等应用方面,都向前 迈出了坚实的步伐。自然语言处理领域涉及的技术非常多,为了让对此领域感兴趣的同学能够快速入门,在这里介绍一下中文信息处理的基本技术:中文分词。
说分词是中文处理的基本技术,是由汉语的特点决定的。汉语的有些单字没有意义,多字合起来才有意义,比如烟囱的“囱”,“尬尴”;有些是单字虽然有意义,但组合之后,意思发生改变,比如“白菜”,“李世民”。有些系统虽然可以直接使用单字,比如检索系统中基于字的检索按单字建立索引,虽然可以满足基本功能,但存在运算量大、检索准确率低的问题;而基于词的检索按词建立索引,检索时直接命中,检索速度快、准确率高,目前的中文检索系统多数都支持基于词的检索。
中文分词的任务是把一连串的单字按词分开,比如,这是一个原始句子:
李明是一名优秀的学生。
经过分词处理的结果为:
李明 是 一 名 优秀 的 学生 。
在这里,分词面临的第一个问题是如何定义一个词。比如“自然语言处理”,可以作为一个词,也可以切分为:
(1) 自然 语言 处理
(2) 自然语言 处理
关于中文词的定义并没有统一的标准,语言学家从不同的角度对词进行定义,而这些定义往往彼此并不完全兼容。实际项目中的分词主要关注于切分出的词单元是否能服务于上层的信息处理,比如在检索系统中,一般倾向于把分词切分成粒度较小的单元,即按照第一种方式进行切分,这样无论用“自然语言”还是“语言处理”都能够检索到“自然语言处理”。
分 词系统的词主要由词表来确定,词表是分词系统自带的通用词表,里面的词汇与领域无关。如果文本中的词语在词表中出现,则按照词表进行切分,如果未在词表中 出现,则属于未登录词,需要进行未登录词识别。值得注意的是,分词中的词语划分不是从语言学的角度,而完全是从应用的角度考虑,例如,“毛泽东”这个词在词表中已存在,则它属于通用词汇,不属于未登录词中的中国人名。
中文分词涉及的问题较多,下面对各方面的问题做一个简单的介绍。
1 最大匹配法
最大匹配法的分词实现很简单,并且可以满足一些对分词准确率要求不高的应用系统,该方法在早期的分词系统中被广泛使用。其基本思想是,选取一定长度(中文词的最大长度一般为6-8个字)的汉字串作为最大字符串,将其同词表中的词语进行匹配,如果匹配不成功,则删掉一个汉字继续匹配,如果匹配成功,当前字符串即为一个词。按照匹配的方向,最大匹配法分为:
(1)正向最大匹配法(Forward Maximum Matching, FMM)
(2)逆向最大匹配法(Reverser Maximum Matching, RMM)
(3)双向最大匹配法(Bi-directional Maximum Matching, BMM)
设S'为句子S的一个子串,词表中最长词的字数为m,正向最大匹配法的过程描述如下:
初始化:指针p1指向句子的首位置
算法执行:
(1) 如果p1到达句子末尾,分词结束;
(2) p2 = p1 + m;
(3) 如果p1和p2之间的字符串S'在词表中不存在,p2--,重复(3);
(4) 如果p1和p2之间的字符串S'在词表中存在,则S'是一个词,p1 = p2+1,转(1);
逆向最大匹配法从句尾开始对句子进行扫描,算法的过程描述如下:
初始化:指针p1指向句子的末尾位置
算法执行:
(1) 如果p1到达句子首位置,分词结束;
(2) p2 = p1 - m;
(3) 如果p1和p2之间的字符串S'在词表中不存在,p2++,重复(3);
(4) 如果p1和p2之间的字符串S'在词表中存在,则S'是一个词,p1 = p2-1,转(1);
两种匹配方法只是对句子扫描的方向不同,如果句子中不存在歧义,则分词的结果是一致的。但如果存在歧义,则切分结果不完全相同。例如,设词典中最长词的字数为7,输入的句子为:他是研究生物化学的。两种方法的切分结果如下:
FMM切分结果:他 是 研究生 物化 学 的 。
RMM切分结果:他 是 研究 生物 化学 的 。
实验表明,在减少歧义方面,逆向最大匹配法比正向最大匹配法有效一些。梁南元的实验结果显示,在词典完备、没有任何其它知识的条件下,正向最大匹配法的错误切分率为1/169,逆向最大匹配法的错误切分率为1/245,这主要是因为汉语中心词多在词的右部的原因。
无论正向匹配还是逆向匹配,均无法发现句子中的歧义,实际的分词算法中,常使用双向最大匹配法来检测歧义:比较FMM和RMM的切分结果,其中不一致的地方即是存在歧义的字符串。如上例中,“研究生物化学”的切分结果不一致,则该字符串中存在歧义。分词算法中,常利用双向最大匹配法发现歧义,再进一步对歧义词进行切分。
2 歧义词切分
分词中的歧义有两类,组合型歧义和交集型歧义,两种歧义的详细定义这里不讨论。 一般性的定义可以表述为:
A、X、B分别为汉字串,如果其组成的汉字串AXB满足AX和XB同时为词,则汉字串AXB为交集型歧义字段。
例如:“研究生命的起源”可以切分为
研究 生命 的 起源
研究生 命 的 起源
“研究生命”为交集歧义字段。
汉字串AB满足A、B、AB同时为词,则该汉字串为组合型歧义字段。
例如: “他从马上下来”可以切分为
他 从 马 上 下来
他 从 马上 下来
“马上”为组合型歧义字段
在实际的分词中,大部分交集型歧义并不会构成负面的影响,因为其在整体的语料中出现的比例比较低。对组合型歧义字段,也存在着类似的问题,很多二字词在理论上都可能存在组合歧义,比如“位置”一词,一般不认为它存在歧义,但是在特殊的语境中,如“第7位置1”,确实出现了组合歧义。但由于这种情况在真实的语境中从不发生或很少发生,人们并不认为它是有歧义的,而主要关注那些切分难度大的歧义字段。
对那些经常发生组合型歧义的字段,可以先收集标注语料中的歧义字段,统计歧义字段的上下文信息,然后为每个歧义字段制定对应规则或训练出相应的分类器,在新的语言环境,根据给定的上下文进行预测。
很多实际的分词系统中,并不考虑句子中歧义字段的歧义类型,而是利用概率模型对句子做统一的处理。
3 未登录词识别
未登录词是指没有在词表中出现的词,也称作OOV(out of vocabulary)。一般来说,未登录词包括以下几类:
中国人名,如:韦小宝,赵一曼
外国人名,如:哈迪库斯,卡里姆·哈杰姆
地名,如:李家庄,热那亚
机构名,如:新华社,联合国
其他专有名词,如:白虎团,道—琼斯
数词,如:50%,300万
时间词,如:1992年,29日
词语的重叠形式,如:看看,看一看,打听打听,高高兴兴
专业术语,如:线性回归,韦特比算法
新词,如:非典,博客
上 述的未登录词类别较广,识别的难度相差很大,实际的工作往往倾向于聚焦在比较窄的范围内,以减少难度,提高性能。一般来说,复杂机构名通常由命名实体识别 来完成,新词通常由专门的新词发现工作负责,专业领域的术语通常由信息抽取工作负责。数词、时间词、词语的变形组合可以通过制定语法规则进行的处理。这里主要介绍人名、地名这两类未登录词的识别。
未登录词识别的困难主要有两类,一类是歧义问题,包括未登录词的内部歧义,以及未登录词同上下文发生的外部歧义,如下面的情况:
(1) 未登录词中含有词表中的词。例如人名“张朝阳”、“王国维”中的“朝阳”和“王国”分别是普通名词,未登录词识别容易将人名拆开。
(2) 未登录词同上下文形成交集歧义。例如,
现任主席为何鲁丽
邓颖超生前珍藏的书画作品。
另一类是未登录词的用字同正常用字发生混淆,包括两种情况:
(1) 未登录词中的字为常用字或含有表示动词成分,如
陈忠和率领的中国女排
成思危来到人民日报社
(2) 未登录词常用字作为句子中的正常用字,如
你到底是何居心?
贾思勰的《齐民要术》
未 登录词的识别主要有两种策略,基于规则的方法和基于统计的方法。基于规则的方法中,需要先分析统计各种未登录词的规律,将其存储在知识库中。分词时,根据 知识库直接对可能的汉字串进行未登录词判别。由于未登录词多由连续的单字构成,经过初始的词语切分之后,句子中的连续单字串即为可能的未登录词。未登录词 的规律主要包括以下几部分:
l 内部规律。很多未登录词在用字上有自己的特定规律,例如,对中国人名,主要形式为“姓+名”, 可以统计出常用的姓氏用字和名字用字,以及每个字作为姓氏或名字的概率,名字包括名字的中间字和末尾字。对外国人名,可以统计出常用的人名译名及其概率。 地名的结尾字有很强的规律性,通常包括各级行政区域的名称,如省、市、县等;居民聚落名称,如村、屯、庄等;以及山、河、湖、海、岛屿、高原等自然地理实 体名称。
l 外部规律。未登录词的上下文经常会有一些特定的词语出现,例如,人名的上下文常出现如“先生、同志、女士、教授、经理、总理”等称谓词。人名前面常出现“说,表示,批评”等动作词。地名的上下文通常会有一些介词,如“在”,以及方位词,如“里,上”等。外部上下文对对未登录词的识别非常重要,有时候会起着决定性的作用,比如“华盛顿”一词,如果不借助上下文,就无法判断这个词是人名还是地名。
l 重复出现规律。一般来说,有些实体的名称在篇章中会多次出现,这为未登录词的识 别提供了一个判断依据。如果一篇文章中多次出现相同的单字片段,并且这些单字作为单字词的概率并不高,这样的单字片段很可能属于未登录词。
另外,也可以尽可能多地收集人名、地名等专有词语,制作一个专有词汇表,既能提高未登录词识别的准确率,又能提高处理的速度。
规则方法的优点是,建成的知识库具有通用性,可以通用于不同的未登录词识别模块中,不必再借助于训练数据。但是在总结规则时,以及计算未登录词不同部分的构词概率方面,需要较大的工作量。所以,只依靠训练语料,不需要人工干预的统计方法受到了人们的重视。
4 语料及评测
1.语料标注
目前实用的中文分词系统,多数都是通过统计学习的方法构建的。其过程是先利用一个已标注好的语料库作为训练数据,对这些数据进行统计学习,将统计的概率信息作为分词器的参数。
作为知识的来源,标注的语料对分词的性能起着至关重要的作用。衡量一个语料的好坏主要有这几个指标:
(1) 标注规范
标注规范解决的是词的定义问题,比如什么样的单元算一个词,有些词应该分开还是合并,如何处理语法变形词语等等。一般来说,制定一个好的分词规范除了要对分词问题有比较深刻的理解,还需要有较强的语言学知识。
(2) 标注的一致性
一个大规模的语料通常是由多个人共同标注,由于不同标注者对规范的理解存在差异(即使同一个人在不同的时间对规范的理解也可能不一致),常会导致标注不一致的现象发生。比如字符串“紧跟”,有时被标注为一个词,有时会将其分开。这种不一致将影响训练参数,进而在分词时发生错误。
(3) 错误率
人工校对时仍难免发生疏忽,一个大型的语料库很难百分之百标注正确。如果将标注的错误率控制在一个较小范围内,并不会对分词的训练造成太大的影响。
(4) 语料的规模和平衡
语 料规模是指语料的大小,一般来说,语料的规模越大,包含的信息越多,训练的效果也越好。但这并不是绝对的,还有一个重要的因素是语料是否平衡。一个平衡的 语料,应该包含尽量广泛的题材。如果一个语料只包含政治类内容,即使规模再大,对体育类的文本进行分析时也会存在困难。
语料标注的过程通常先利用一个已有的分词程序对原始文本进行自动分词,然后由人工进行校对。目前最著名的、分词系统使用最多的简体中文语料是北京大学计算语言学研究所加工的“人民日报标注语料库”。该语料库把文章中的语句按词切开,并对每个词标上词性标记。标注后的形式为:
美国/ns 马里兰州/ns 的/u 盖茨堡镇/ns 近日/t 举办/v 新年/t 灯展/n 。/w
每个词的后面是词性标记,词与词之间用空格分开。语料库的规范以及词性标记的说明可参考北大制定的标注规范和加工手册。
2. 评测方法
为了能够客观准确地评价分词系统的效果,需要制定一些指标来对分词的结果进行评测,常用的评测指标包括准确率P(Precision)、召回率R(Recall)和F值(F Score),它们的计算形式如公式(4-1)所示:
对于分词,通常来说以F值做为分词效果的一个总体评价,准确率和召回率在某种程度上是矛盾的,刻意地追求准确率势必会造成召回率的下降,同样,刻意地追求召回率也会造成准确率的下降。F值作为准确率和召回率的调和平均数,可以有效地在二者之间作出一个平衡。
为了评价分词方法的优势,比较分词系统的性能,国际计算语言联合会(Association for Computational Linguistics, ACL )下设的汉语特别兴趣研究组(the ACL Special Interest Group on Chinese Language Processing, SIGHAN) 举 办了数届国际汉语分词评测大赛。组委会事先为参赛者提供一个较大规模的标注语料,供参赛者训练自己的分词程序。评测时,组委会发放测试数据,参赛者在三天 之内将分词结果提交,组委会根据参赛者的结果进行综合打分,排出名次。评测的语料分为简体中文和繁体中文,对每种语料的评测又分为封闭测试和开放测试。下表列出了第二次分词评测中基于北大语料(简体中文)的部分结果。
第二届国际分词评测中北大语料前10名分词系统的F值
Ranking | Open track | Closed track |
1 | 0.969 | 0.950 |
2 | 0.967 | 0.950 |
3 | 0.967 | 0.949 |
4 | 0.965 | 0.946 |
5 | 0.965 | 0.944 |
6 | 0.964 | 0.942 |
7 | 0.962 | 0.941 |
8 | 0.962 | 0.941 |
9 | 0.957 | 0.940 |
10 | 0.952 | 0.934 |
表中依次列出了F值最高的前10个参赛系统,从表中能够看出,分词系统已经达到了较高的性能,并且各个系统之间,尤其是前3名的系统之间相差无几,说明分词技术已经基本成熟。但也应该注意到,这种评测的训练集和测试集均为同一类数据,如果分析和训练数据不是同一类型的文本时,其性能将会受到影响。
SIGHAN的分词评测已经在去年关闭了,这种竞赛形式的评测有效地促进了中文分词的研究进展,每次评测都有十多家单位参赛,并不断有新的方法应用于分词之中。
-------------------------------------------------------------------------------------
黑夜路人,一个关注开源技术、乐于学习、喜欢分享的程序员
博客:http://blog.csdn.net/heiyeshuwu
微博:http://weibo.com/heiyeluren
微信:heiyeluren2012