做者 | 达观数据创始人 陈运文web
文章大纲
人类通过漫长的历史发展,在世界各地造成了不少不一样的语言分支,其中汉藏语系和印欧语系是使用人数最多的两支。英语是印欧语系的表明,而汉语则是汉藏语系的表明。中英文语言的差别十分鲜明,英语以表音(字音)构成,汉语以表义(字形)构成,印欧和汉藏两大语系有很大的区别。算法
尽管全世界语言多达5600种,但大部数人类使用的语言集中在图中的前15种(覆盖全球90%以上人群)。其中英语为母语和第二语的人数最多,近14亿人,是事实上的世界通用语。其次是汉语,约占世界人口的23%。英语和汉语相加的人数占世界总人数的近一半,所以处理中英文两种语言很是关键。编程
人工智能时代,让计算机自动化进行文字语义理解很是重要,普遍应用于社会的方方面面,而语言自己的复杂性又给计算机技术带来了很大的挑战,攻克文本语义对实现AI全面应用有相当重要的意义。相应的天然语言处理(Natural Language Processing,NLP)技术于是被称为是“人工智能皇冠上的明珠”。网络
中国和美国做为AI应用的两个世界大国,在各自语言的自动化处理方面有一些独特之处。接下来笔者对中文和英文语言特色的角度出发,结合本身的从业经验来概括下两种语言下NLP的异同点。ide
1、中英文分词方式不一样
分词是中英文NLP差别最广为人知的一点。咱们都知道英文的单词之间自然存在空格来分隔,所以在进行英文文本处理时,能够很是容易的经过空格来切分单词。例如英文句子:svg
DataGrand is a Chinese company性能
可轻松切分为DataGrand / is / a / Chinese / company (文本用/表示词汇分隔符)。学习
中文在每句话中间是不存在分隔符的,而是由一串连续的汉字顺序链接构成了句子。现代汉语里表达意思的基本语素是词而不是字。例如“天然”,拆为“自”和“然”都不能单独表意,两个字合并组成的词才能有准确的意义,对应英文单词是Nature。所以在咱们使用计算机技术对中文进行自动语义分析时,一般首要操做就是中文分词(Chinese Word Segmentation)。中文分词是指按人理解汉语的方式,将连续的汉字串切分为能单独表义的词汇。例如中文句子:测试
“达观数据是一家中国公司。”字体
让计算机来处理,第一步须要切分为“达观数据/是/一家/中国/公司”这样的词串的形式,而后再进行后续的理解和处理。
如何正确的根据语义完成中文切分是一个挑战性的任务,一旦切词发生失误,会致使后续的文本处理产生连锁问题,给正确理解语义带来障碍。为了快速准确的切分好中文,学术界迄今有超过50年的研究,提出了不少方法。中文切词常见方法里既有经典的机械切分法(如正向/逆向最大匹配,双向最大匹配等),也有效果更好一些的统计切分方法(如隐马尔可夫HMM,条件随机场CRF),以及近年来兴起的采用深度神经网络的RNN,LSTM等方法。
因为汉语语法自己极为灵活,致使歧义语义时常发生,给正确完成中文分词带来了不少障碍。如例句“严守一把手机关了”所示,按照语义理解,正确切分方式为“严守一/把/手机/关了”,而算法有误时容易切分为“严守/一把/手机/关了”。
更困难的是,有些时候两种切词方法意思都对,例如“乒乓球拍卖了”,切分为“乒乓/球拍/卖了”和“乒乓球/拍卖/了”自己均可行,必需要依赖更多上下文来选择当前正确的切分方法。相似的还有“南京市长江大桥”、“吉林省长春药店”等等。若是把“市长”“省长”等切出来,整句话的理解就误差不少了。常见歧义类型包括交叉歧义(Cross Ambiguity)和组合歧义(Combination Ambiguity)等,在语义消岐方面近年不断有国内外学者提出新的解决思路,来解决汉藏语系的这个特定问题。
此处顺便一提,和中文相似,日文句子内部一样缺少自然的分隔符,所以日文也一样存在分词需求。日文受汉语语法的影响很深,但同时又受表音语法的影响,明治时代还曾兴起过废汉字兴拼音的运动,行文上汉字和假名混杂,比如中英文混血儿。业内比较知名的日文分词器有MeCab,其算法内核是条件随机场CRF。事实上,若是将MeCab的内部训练语料由日文更换为中文后,也一样能够用于切分中文。
随着深度学习技术近年来在NLP领域成功的应用,一些seq2seq学习过程能够再也不使用分词,而是直接将字做为输入序列,让神经网络自动学习其中的特征,这在一些端到端的应用中(如自动摘要、机器翻译、文本分类等)确实省略了中文分词这一步骤,可是一方面还有不少的NLP应用离不开分词的结果,如关键词提取、命名实体识别、搜索引擎等;另外一方面切分所得的词汇也能够和单字一块儿做为特征输入,用以加强效果。所以分词仍然是工程界进行中文处理时的一项重要技术。
2、英文语素和中文偏旁的使用
英文单词的提取虽然比中文简单的多,经过空格就能完整的获取单词,但英文特有的现象是单词存在丰富的变形变换。为了应对这些复杂的变换,英文NLP相比中文存在一些独特的处理步骤,咱们称为词形还原(Lemmatization)和词干提取(Stemming)。
词形还原是由于英文单词有丰富的单复数、主被动、时态变换(共16种)等状况,在语义理解时须要将单词“恢复”到原始的形态从而让计算机更方便的进行后续处理。例如“does,done,doing,do,did”这些单词,须要经过词性还原统一恢复为“do”这个词,方便后续计算机进行语义分析。相似的:“potatoes,cities,children,teeth”这些名词,须要经过Lemmatization转为“potato,city,child,tooth”这些基本形态;一样“were,beginning,driven”等要转为“are,begin,drive”。
请注意词形还原一般还须要配合词性标注(pos-tag)一块儿来进行,以确保还原准确度,避免歧义发生。由于英文中存在一些多义词的状况,例如calves就是个多义词,便可以做为calf(名词,牛犊)的复数形式,也能够是calve(动词,生育小牛)的第三人称单数。因此词形还原也有两种选择,须要按实际所表示的词性来挑选合适的还原方法。
词干提取(Stemming)是英文中另外一项独有的处理技术。英文单词虽然是句子中的基础表义单元,但并不是是不可再分的。英文单词内部都是由若干个词素构成的。词素又分为词根(roots)和词缀(前缀prefix或后缀suffix),而词根的原形称为词干(stems)。例如单词disability,dis-就是表示否认意思的经常使用前缀,-lity是名词经常使用后缀,able是表示“能力”的词干,这些词素合并在一块儿就构成了单词的含义。
英文的词素种类很是多(最经常使用的有300多个),不少源自拉丁语和希腊文。提取词素对理解英文单词的含义起着很是重要的做用,例如semiannually这个单词,可能有的朋友并不认识,若是经过词素来看:前缀semi-表示“一半”的意思,词干annul表示年,-ly是副词后缀,semiannually这个单词的含义是“每半年进行一次的”。
Ambidextrous,heterophobia,interplanetary,extraterritorial等这些看着很复杂的词汇,经过拆解词干的方法能很方便的把握单词含义,对人类和对计算机来讲都是如此。常见Stemming方法包括Porter Stemming Algorithm, Lovins Algorithm和Lancaster(Paice/Husk) Algorithm。目前大部分英文NLP系统都包括词形还原(Lemmatization)和词干提取(Stemming)模块。(陈运文)
相比英文,中文里是没有词干的概念的,也无需进行词干提取,这是中文NLP中相对简便的一块。但在中文里有一个相近的概念是偏旁部首。和英文中“单词不懂看词干”相似,中文里“汉字不识看偏旁”。例如“猴、狗、猪、猫、狼”这些汉字,显然都是动物名词。当出现汉字“狁”时,即便不认识也能经过部首“犭”猜出这是一个动物名称,且发音相似“允”字。再好比“木,林,森”这些字都和树木相关,数量还递增。“锁、锡、银、镜、铁、锹”都和金属有关。“采”字和手抓植物有关。“囚”字和“孕”字就更直观形象了。
借鉴英文中词干提取的方法,不少人天然会马上想到:是否咱们拆分中文汉字的偏旁部首,做为特征输入,也能更好的帮助计算机理解中文语义呢?学术界确实也有人作过此类尝试,可是总体收益都不像英文词干分析那么明显,这背后的缘由是什么呢?
笔者认为,其缘由首先是经常使用汉字的数量远比英文单词要少,相比英文单词数量动辄数万计,加上各类先后缀和词形变换数量更多,中文汉字最经常使用的才过千个。由于字少,每一个汉字的意思多,这些汉字的含义经过上下文来获取的语义描述信息足够充分,拆分偏旁后额外再能添补的信息做用很是小。即使对罕见字来讲偏旁确实能额外补充特征,但由于它们在平常文本中出现频次太少,对总体文本语义理解的做用颇有限,只有在一些专业性文书的应用上可能起少许帮助。
其次是汉字通过数千年的演化,再加上简化字的使用,不少字形和含义已经发生了巨大变化,偏旁未必能准确表达字的意思,甚至使用偏旁可能还会引入一些噪声特征。第三是现代汉语里表义的基本单元是多个汉字构成的词,而不是单字。这和英文中表义单元是单词彻底不一样。所以对单个汉字的偏旁处理对整个中文NLP起到的做用很是轻微,并未成为中文NLP里经常使用的作法。
3、词性标注方法的差别
词性是语言学的一个概念,根据上下文将每一个词根据性质划归为特定的类型,例如n.名词 v.动词 adj.形容词 adv.副词等就是最多见的几类词性。中英文的词性尽管总体类似,例如表达一个物品(如苹果Apple,火车Train)一般是名词,而描述一个动做(如跑步Run,打开Open)通常是动词,但在不少细节上存在差别。若是计算机可以对每一个词汇的词性进行正确的识别,无疑对加强语义分析的效果有帮助(注:一样在seq2seq里词性并没必要须,可是对词性的正确理解仍然有其特订价值)。
在NLP里有技术分支称为词性标注(Part-Of-Speech tagging, POS tagging),中英文各自有其特色。
其一是英文中有一些中文所没有的词性。这些词性大量存在,给语义理解带来了很好的指引做用。其中最典型的就是英文特有的两个词性:一是冠词,二是助动词。中文里没有冠词一说,在英文中冠词(Article,通常简称art.)也是词性最小的一类,只有三个:不定冠词(Indefinite art.)、定冠词(Definite art.)和零冠词(Zero art.)。如英文中无处不在的单词“the”就是定冠词,the后面一般会紧跟着出现句子的关键名词+介词短语。例如“Show me the photo of your company”,经过定冠词the的指示,很容易的定位本句话的关键实词是photo。
相似的,前面例句“DataGrand is a Chinese company”里“a”这样的不定冠词也能够很好的指示出宾语“company”。这些大量出现的冠词虽然是虚词,自己并无明确含义,但在NLP中用于定位句子中的关键实词,判断实词种类(是否可数,是否专有名词等),进而识别出句法结构(后面还会详细介绍)等,起到了很大的指示做用,也下降了计算机进行语义理解的难度,于是这方面英文比中文有先天优点。
助动词(Auxiliary Verb)也是英文特有的现象,助动词的做用是协助主要动词构成谓语词组,如am, is, have, do, are, will, shall, would,should, be going to等都是常见助动词,在英文句子中也大量存在,和冠词用于指示主语宾语相似,助动词对识别主要动词(Main Verb)和谓语会起帮助。
其次,英文在词性方面的划分和使用更严谨,词汇在变换词性的时候会在词尾造成丰富的变化。例如-ing、-able、-ful、-ment、-ness等都对确认词性给出具体的提示。名词中还会进一步区分可数名词、不可数名词,在词尾用-s、-es来区分。动词也一样会存在发生时态的指示,过去式,如今时,将来时等很是明确,所以在英文语法中几乎没有词性混淆不清的状况发生。
而中文的词性则缺少相似英文这样的明确规范。中国著名的语言学家沈家煊先生在著做《语法六讲》中就曾提出“汉语动词和名词不分立”的观点,将确认汉语词性的问题描述为“词有定类”则“类无定职”,而“类有定职”则“词无定类”。和英文中名词、动词、形容词三大类词汇相互独立的“分立模式”不一样,中文更相似“包含模式”,即形容词做为一个次类包含在动词中,动词自己又做为次类被名词包含,并且这个词性的转换过程很是微妙,缺少表音语言中的先后缀指示。
例如“他吃饭去了”中“吃饭”是动词,只须要句式稍加变换为“他吃饭很差”,此时“吃饭”就摇身一变成名词了。“热爱编程”、“挖掘数据”中,“编程”、“挖掘”等词,既能够是名词也能够是动词。形容词也有相似的状况,如“活跃”是个常见的形容词,经常使用句为“他表现很是活跃”。但有时也能够变身为动词“他去活跃气氛”,还能变为名词“活跃是一种行为习惯”。可见汉语语境的变化给词性带来很是微妙的变化。
汉语没有英文的屈折变化的特色,不像英语能经过灵活的词尾变化来指示词性变化,汉语这种一词多性且缺少指示的特色,给计算机词性标注带来了很大的困难,业界对词性的标准以及标准测试集也很不完善。不少具体词汇的词性甚至让人工来研读都模棱两可,让算法自动来识别就更难了。
例如:“他很开心”、“他逗她开心”、“他开心不起来”、“他开心的很”、“开心是他很重要的特色”,这里“开心”的词性让人来判断都很难搞明白,甚至存在争议。而反观英语里一个词被标为动词仍是名词几乎不存在争议。对这些模糊的状况,一些中文语料标注库里干脆用“动名词vn”、“形名词an”等来标记,搁置争议,模糊处理。
在目前中文NLP词性标注中,“名动形”糊在一块儿的特色仍然没有找到特别好的处理手段,也给后面的句法结构分析,词汇重要性判断,核心关键词提取等语义理解课题带来了干扰。
4、标点符号和字体特征
在天然语言处理应用中,很容易被忽略的是标点和字体等信息的利用。尤为学术界研究核心算法时通常都会忽略这些“次要”信息,大部分学术测试集合干脆是没有字体信息的,标点也不讲究。可是在实际工程应用中,这些信息能起不小的做用。而英汉语在其使用方面也存在一些差别。标点(如?!:——。等)和字体(字母大小写,斜体,粗体等)虽然自己没有具体语义,但在辨识内容时起重要的引导做用。不妨让咱们想像一下,若是把我这篇文章里全部标点、分段、标题字体等都去掉,让人来阅读理解本文内容,难度是否是马上会加大不少?如果换成计算机来读那就更麻烦了。
在英语中(尤为是书面语中),逗号和句号的使用有明确规范,一句话结尾要求必须用句号符“.”,而且下一句话的第一个单词的首字母要求大写。英文中从句很是多,从句之间要求用逗号“,”链接,以表示语义贯通。不只如此,当一句话的主谓宾完整出现后,若是下一句话也一样是一个完整句子,则两句话中间或者须要用连词(如and, or, therefore, but, so, yet, for, either等)链接,或者必须用句号“.”分割,若是中间用“,”且没有链接词,则属于正式文书中的用法错误。如:
The algorithms and programs,which used on the website, are owned by the company called DataGrand, and are well known in China.
这里出现的标点和大小写字体是良好的句子语义指示符,既分割不一样句子,也在句子内部分割不一样语义,这些规范给英文NLP处理创造了较好的环境。
中文标点的使用则没有这么强的规范。事实上中文标点在中国古代官方文书中一直不被采用,仅扮演民间阅读中的停顿辅助符的角色。直到1919年中华民国教育部在借鉴了西方各国标点规范后才第一次制定了汉语的12中符号和使用方法,建国后在1951年和1990年两次修订后逐步成型。由于历史沿革的缘由,这些对标点的使用规范更多偏向于指导意见,而不是一套强制标准。
例如对逗号和句号什么时候使用,并不像英语中有特别严格的界定。汉语的分句较为模糊,意思表达完之后虽一般用句号,但用逗号继续承接后面的句子也并不算错,只要整篇文章不是极端的“一逗到底”,即便语文老师在批阅做文时也都不会过度对标点较真,而平常文章中标点的使用更是为所欲为了。
与此同时,英文里专有名词用大写或者斜体字体来区分,首字母大写等用法,在中文中也不存在。NLP处理中,中文标点和字体使用的相对随意给句法分析也带来了巨大的挑战,尤为在句子级别的计算机语义理解方面中文比英文要困难不少。
除了上述不利因素,中文也有一些独特的标点带来有利的因素。例如书名号《》就是中文所独有的符号,感谢这个符号!书名号能很是方便的让计算机程序来自动识别专有名词(如书名、电影名、电视剧、表演节目名等),这些名词每每都是未登陆词,若是没有书名号的指引,让计算机程序自动识别这些中文专名的难度将加大不少,而这些专名词汇偏偏都体现了文章的关键语义。
例以下面这段新闻若是让计算机来阅读:“因为流浪地球的内容很接近好莱坞大片,所以影评人比较后认为不只达到了2012的水平,并且对比星际穿越也绝不逊色。”要求计算机自动提取上面这句话的关键词会很是困难,由于里面有不少未登陆词,对“2012”的理解也会有歧义(时间词?or电影名?)
而正由于咱们中文有书名号,迎刃而解:“因为《流浪地球》的内容很接近好莱坞大片,所以影评人比较后认为不只达到了《2012》的水平,并且对比《星际穿越》也绝不逊色。”。除了书名号,汉语的顿号(、)也能很好的指示并列关系的内容,“达观天天下午的水果餐很丰富,有桃子、葡萄、西瓜和梨”,这些并列的内容能够很方便的被计算机解读。
英文则没有书名号和顿号等,而是采用特殊字体(例如加粗、斜体、大写,各不相同,没有强制约定)等形式来标识出这些专有名词。所以在处理英文时,这些字体信息起很重要的做用,一旦丢失会带来麻烦。
值得一提的是,在平常聊天文字中,标点符号和字母使用的含义产生了不少新的变化。例如对话文本中“。。。。。”每每表达出“无语”的情绪。“?”和“???”前者是疑问,后者更多表达震惊。还有 ? ^o^/ ORZ等各种的符号的变换使用,给开发对话机器人的工程师们带来了不少新的挑战。
5、词汇粒度的处理方法差别
词汇粒度问题虽然在NLP学界被讨论的很少,但的的确确NLP实战应用中的一个关键要点,尤为在搜索引擎进行结果召回和排序时,词汇粒度在其中扮演关键角色,若是对其处理不恰当,很容易致使搜索质量低下的问题。
咱们先看中文,词汇粒度和分词机制有很大关系,先看个例子:“中华人民共和国”这样一个词,按不一样粒度来切,既可大粒度切为:“中华人民,人民共和国”,也可进一步切出“中华,人民,共和国”,而“共和国”还能够进一步切为“共和,国”。通常咱们把按最小粒度切分所得的词称为“基本粒度词”。在这个例子中,基本粒度词为“中华,人民,共和,国”4个词。甚至“中华”还能继续切出“中/华”也有表义能力(这个后面还会详细分析)。
为何分词须要有不一样的粒度呢?由于各有做用。大粒度词的表义能力更强,例如“中华人民共和国”这样的大粒度词,能完整准确的表达一个概念,适合做为文章关键词或标签提取出来。在搜索引擎中直接用大粒度词去构建倒排索引并搜索,通常可获得相关性(准确率)更好的结果。
但从事过信息检索的朋友们想必清楚召回率(Recall)和准确率(Precision)永远是天平两端互相牵制的两个因素。大粒度词在搜索时会带来召回不足的问题。例如一篇写有“人民共和国在中华大地上诞生了起来”的文章,若是用“中华人民共和国”这个词去倒排索引中搜索,是没法匹配召回的,但拆分为“中华人民 共和国”三个词进行搜索就能找出来。
因此一个成熟的分词器,须要因地制宜的设置不一样粒度的分词策略,而且最好还能确保在检索词处理(Query Analysis)和索引构建(Index Building)两端的切分策略保持一致(陈运文)。目前学术界公开的分词测试集合,每每都是只有一种粒度,并且粒度划分标准也并不一致,致使不少评测结果的高低离实际使用效果好坏有必定距离。
在中文分词粒度里,有一个很是使人头疼的问题是“基本粒度词”是否可继续拆分的问题。就比如在化学中,一般约定原子(atom)是不可再分的基本微粒,由原子来构成各种化学物质。但若是进一步考虑原子可分,那么整个化学的根基就会动摇。一样在中文NLP领域,虽然学术界一般都默认基本粒度词再也不可分,但在实际工程界,基本词不可再分会致使不少召回不足的问题,引入难以解决的bad case。不要小看这个问题,这是目前限制中文语义理解的一个特别常见的难题。要解释清楚前因后果,笔者还得从汉语的发展历程提及。
中国古代汉语的表义基本单位是字而不是词。我从《论语》中拿一句话来举例:“己所不欲,勿施于人”。古代汉语一字一词,这句话拿来分词的话结果应该是“己/所/不/欲,勿/施/于/人”,可见所有切散为单字了。若是用现代白话文把这句话翻译过来,则意思是“本身都不肯意的方式,不要拿来对待别人”。现代汉语的特色是通常喜欢把单字都双音节化,“己–>本身,欲–>愿意,勿–>不要,施–>对待,人–>别人”。
能够看出这些双音节(或多音节)词汇中部分蕴含着来源单字的意义。这种现象在现代汉语词汇中比比皆是,例如“狮子”,“老虎”,“花儿”,“图钉”,“水果”,“红色”等,对应“狮,虎,花,钉,果,红”等有意义的单字。而若是把这些双音节词做为不可再切分的基本粒度词的话,当用户搜“狮”的时候,即便文章中出现了词汇“狮子”,也是没法被搜到的。
那么若是将这些基本粒度词再进一步切分呢?会切出“子,老,儿,图,水,色”这样存在转义风险的词汇(即这些单字对应的含义并未体如今原文中),带来不少“反作用”。例如用户搜“老”的时候,固然不但愿把介绍“老虎”的文章给找出来。
与此同时,还有另外一类的状况是有一些词汇切为单字后,两个单字都分别有表义能力,如“北欧”切为“北/欧”,对应“北部,欧洲”两方面的意思。“俄语”切为“俄/语”,对应“俄国,语言”,“苦笑”,切为“苦/笑”,对应“痛苦,笑容”,以及“海洋”,“图书”,“亲友”,“时空”等都是可细分的。
还有第三类状况是,词汇切分后单字都不能体现原词含义,例如“天然”,若是切分为“自/然”,两个字都没有意义。相似的还有“萝卜”,“点心”,“巧克力”等,外来语为多。
之因此前面提到现在中文语义分析时,基本粒度问题是一个关键难题,缘由是在现代汉语写做时,既有现代双音节/多音节词汇,也夹杂不少源于古代汉语的单字,半文半白的现象很常见,这就一下给语义理解带来很大的挑战。无论是切分粒度的选择,仍是单字和词汇间关联关系的提取,标题和正文语义的匹配,当面临文白间杂时都会遇到难关。
常见的状况为:新闻标题为了精炼,常常喜欢采用源自古汉语习惯的单字简称或缩略语。例如“中美援非模式差别带来效果截然不同”,是选择“中美/援非”这样的基本切分粒度,仍是按单字表义切分为“中/美/援/非”,对应“中国美国援助非洲”这样的内容,是存在各自的利弊的。计算机提取文章关键词时,还须要把“援—>援助,非–>非洲”还原为词并创建关联才能很好的解读处理。
目前业界并无一个公认的粒度标准,常见的几个评测语料集合,如北大pku-test,微软亚洲研究院msr-test,人民日报标注语料等,切分标准都有所不一样。虽然通常广泛采用的双音节词为主的基本粒度标准,可是在应用于搜索引擎、问答对话时都会出现大量召回不足的问题。而大量采用单字做为基本粒度词又会引入有转义风险的无效单字,而且还会出现运算性能等隐患。
为了解决基本粒度词的问题,笔者曾在百度设计开发了亚粒度词(subterm)补足的策略,缓解了召回不足的问题,工业界还有一些其余的同义词关联等方法来应对,但到目前为止词汇粒度问题仍然是困扰中文NLP的一个“慢性病”。近年来兴起的BERT模型,利用大量文本进行Transform预训练,填补各类粒度词汇的语义信息,也是是一种缓解问题的办法。
英文由于不存在切分问题,因此粒度问题只须要考虑词组(Phrase)切分的问题。例如Harvard University,两个单词能够切为Phrase来表达一个具体机构。相比中文的从细到粗的多粒度切分要简单不少。
6、句法结构分析方法异同
天然语言处理在词汇级别之上是语句级别,由于语句是由一系列的词汇排列组合后生成的。经过学习语法咱们知道句子结构是由“主谓宾定状补”这样的句法元素构成的。例句“陈运文去达观数据上班,”主语是“陈运文”,谓语“上班”,“达观数据”是状语,说明动做发生的地点。
在句子结构方面,“英语重形合,汉语重义合”的特色体现的很是明显。英语为了充分体现句子中的各类承接、转折、从属、并列等关系,不厌其烦的准备了大量的连词、助词、介词、冠词等做为填充剂,来补充实词之间的缝隙,构成了不少从句、引导句。这些包含各种结构的结构,让计算机来进行语义角色标注(SemanticRole Labeling, SRL)和语义依存分析(SemanticDependency Parsing, SDP)相对比较容易。
由于这些形式指示词的存在,一个你们能很直观发现的现象就是英文写出来的句子每每都特别长,整篇文章篇幅多。而一样的意思用中文写出来,篇幅每每只须要英文的一半甚至更少,汉语的句子很是精炼,尤为诗歌用短短几个字能描述出丰富的内涵——“孤帆远影碧空尽,惟见长江天际流”,多么洗练优美有意境。
从计算机的视角来看,偏偏由于汉语讲究意合而不重形式,句子结构都比较松散,并无英文中那么多的虚词做为实词间的语义粘合剂,而是依赖词汇先后顺序关系,隐含表达出句子结构,因此也给计算机处理带来了挑战。例如“中国人工智能创业企业获奖名单公布”这句话里,“中国,人工智能,创业,企业,获奖”这一连串的名词均是主语“名单”的定语,若是用英语来写这句话,必定会出现形如“the…of…that…which…”这样一系列的辅助词来把这些名词粘接到一块儿,而中文并无它们。因此当咱们训练算法去识别句子主语和定语的时候,必需要当心的判断哪一个名词才是句子的真正主语所在。汉语中句子的重心每每后移,相反英语中句子主要部分前移,因此一般生成句法依存树时中文都会自动选择靠后的名词。
除了句子内部的辅助词外,在句子间关系识别时,中英文都会经过特定标识词链接子句间关系,例如转折关系(虽然…可是…),假设关系(若是….就…),递进关系(不只…并且…),因果关系(由于….因此….),英文则是because…, Although…, If…, but also… 等。在中英文中这些标识词常常会被自动省略,例如“车站人流量大,你们要照看好本身的行李”。这里隐含的语义为“[由于]车站人流量大,[因此]你们要照看好本身的行李”,[-]内的词汇被自动省略了。区别在于英文通常会省略其中一个,例如“because…, so…,”这样的句子会省掉其中一个,中文则既能够全省掉,也能够全写出,实际进行语义理解时须要额外补充处理。
目前句法依存分析在实际工程应用中并无发挥很大做用,其缘由一方面是上述一些现象致使了很难抽取获得特别准确的句法关系结果,另外一方面是大部分NLP应用选择了直接从词汇或篇章级别来得到结果,省去了中间句子这层。目前业界针对长程的语义上下文关系,逐步放弃传统的RST方法,更多倾向于利用记忆网络(如bi-LSTM)等技术完成提炼。在聊天对话等应用方面,用句法结构来把握语义仍然是会有价值的。
7、中文英文指代消解处理
计算机进行文章内容解读时,常常碰到指代消解(ReferenceResolution)的问题。不管是在书面文本中进行长文章解读,仍是在对话文本中回溯前文问题,指代消解都起到很是关键的做用。计算机须要能像人类同样创建起上下文间这些词汇间的关联关系,作到把概念串联起来“读懂”文章的意思。例如这句话:
“达观数据顺利入驻浦东软件园,公司创始人陈运文表示,达观专一于为企业提供文本智能处理软件系统和技术服务。他说:‘文本理解任重道远’”
这句话里“公司”、“达观”、“他”这些都是指代词,“达观数据”、“陈运文”是真正的实体,称为先行语(antecedent),而“公司”、“达观”、“他”是回指语(或称为照应语,anaphor)。回指语有时是代词(如“He”、“that”、“该公司”、“上述条款”、“前者”、“被告人”等等),有时是简称或缩写(如“达观”、“CEO”、“NLP”、“WTO”),有时采用借代方法,如“白宫的态度很是坚定”,“范冰冰们的纳税状况逐步被公布”,“白宫”=“美国总统”,“范冰冰们”=“大陆影视演员”。
人类的阅读能力很是强,各种指代的状况人都能通畅理解,但对计算机来讲并不简单。在NLP领域为此专门存在技术分支称为指代消解。指代消解一般又细分为回指、预指、共指等情形,实践中一般称为共指消解(CoreferenceResolution)。
英文中常见指代语是专名首字母缩写,也是表音文字特别之处。英文中专有名词每每由多个单词构成,篇幅长,从中抽取字母构成各种缩写约定很是常见。缩写一部分是行业内通用的(例如计算机领域常见的CV,DNS,CPU,NLP等),另外一些则是在文中第一次出现专名时临时约定的。
例如一篇行业分析报告里的句子:“High Carbon Steel (HCS) is typically producedas low carbon steel. HCS export volume in YTD 2017 reached to 6.9 millionmetric tons(MMT).”。这里临时性缩写(HCS,YTD,MMT等)大量出现。这些回指语是一个新的独立单词(例如例子中的HCS),和原词汇的关联处理经过共指消解来完成。另外一类回指语是“it、which、where、there、that”等这样的指代词,要经过上下文依赖关系去寻找实体。
中文的缩写一般是从实体中抽取若干汉字新构成的词,例如北京大学简称北大,复旦大学简称复旦,XX银行,一般简写为X行,XX局长,简写为X局。(陈运文)由于汉字里单字的表义能力比英文中单独的字母要强的多。咱们知道经常使用汉字有5000多个,而英文字母只有26个,因此中文缩写词更容易能让人“望文生义”,读懂含义。例如“高碳钢”这个缩写即便是外行也能猜出意思,可是HCS怕是很难直接让人明白是啥,即汉语在缩略语的可读性上优于英文。
正由于英文缩略语可读性弱,且重复歧义多,因此为了让人能读懂,英文里一般都会清楚标出先行语和缩写规则。而汉语里除非严格的法律文书会前置术语表,通常文本里用缩略语时比较随意,不少时候约定俗成,并不“提早打招呼”。例如新闻:“北大学生在刚刚结束的奥数竞赛中成功摘得两枚金牌”。若是按缩略语习惯,应该写为:“北京大学(如下简称北大)学生在刚刚结束的国际奥林匹克数学邀请赛(如下简称奥数)中成功摘得两枚金牌。”
在共指消解中还会遇到的一类问题是由于语法结构致使的指向歧义的问题。例如“这张照片里有陈运文和高翔的同事”、“那边坐着三个公司的工程师”,这在前面句法结构解析时提到过,也一样会影响中英文在处理共指消解时的结果。
在实际工程应用中,共指消解最经常使用到的场景是对人名、机构名、地点、条款、具体事件、关系类型等要素的指代处理。在超长文书(如证券行业的上市公司重组公告、招股说明书等)处理方面该技术也起了很大做用。平常中文的共指消解存在必定的行文规律,经过预先挖掘简写和指代词表导入算法中可显著提高效果。业界常见的共指消解方法既有传统的规则启发法,也有经典的统计学习、聚类算法、几率图模型等,此外深度强化学习、长短时记忆网络等新的Meural Mention-ranking方法也有良好的效果。
8、英汉语词汇间关联关系挖掘
词汇间关系是构建语义网络的一项基础技术,咱们知道同义词、近义词、相关词是特别常见的词汇关系,此外词汇的上下位(例如在生物知识网络中Sparrow属于Bird,Shanghai属于China)和词向量等在NLP处理中都很重要。和英文单词相比,汉字的数量少得多,经常使用汉字数才2000-3000个,其中最经常使用的1000个汉字已经能覆盖92%的书面资料了。这1000个汉字中去掉偏旁部首相似的字,独立语素更是不到500个。在表述事物时汉语中采用字组合的方式,能够很是方便的理解词义而且研读出词汇之间的关联关系。
而英文单词动辄2万-3万个(美国成年人平均单词量),并且意思类似的词汇间的字母构成差别很大,因此不少状况下若是没见过某个单词,很难像中文同样大体能猜出词汇所指的意思。请你们不查词典猜猜limousine、roadster、saloon分别是什么意思,再看看对应的中文意思,就能理解为何会有这么多英文单词了。
咱们再用下面的这样一些例子给你们直观的展现英文在表述相近事物时的差别性:Chick, Rooster, Hen, Egg彼此之间从字母分布上来看很难看出有什么关联,可是换成中文,对应的是小鸡、公鸡、母鸡、鸡蛋,很容易就能发现其中的规律。中文词汇是由有意思的单字组合构成的,所以经过字就很容易观察和理解词汇间的关系。
相似的,小牛,公牛,母牛的英文单词为Calf,Ox,Cow,甚至公牛在英文中还区分阉割后的steer和没被阉割的bull。所以汉语NLP中只须要根据动物名“鸡”、“牛”、“猪”、“鸭”加上相应的形容词就能够知道意思了,而在英文中因为单词的差别没法直接经过单词的语素关系直接计算得到,因此为验证语义关系时略为复杂一些。
知识图谱(Knowledge Graph)是理解这些词汇间关系一种好办法。词汇(或称为实体Entity)间的关系经过挖掘大量文本、Wiki等来构建。英文词汇间的关系不像中文这样能让人能观察到,所以构建知识图谱对英文来讲很是有价值。例如spaghetti,penne,capellini,fusilli,lasagne,macaroni这些实体,经过构建出知识图谱,才能让计算机知道他们都属于Pasta(意大利面)下面的某个品类的名字。
近几年兴起的基于Skip-gram或CBOW模型的Word2Vec方法一经提出就获得了很是普遍的应用,在实践中好评如潮,就是由于embedding技术刚好弥补了英文中词汇之间关系不直观的问题,对提升计算机英文语义理解的能力起到了很好的帮助做用。相似的,中文词向量、预训练等技术构建好后,也带来了总体语义分析效果的大幅度进步。汉语和英语在词汇间关系挖掘这个方面,目前总体的算法都是相同的,区别在于汉语的词汇间关系能够更加显式的被人观察到。
毕竟,让人来判断hepatitis和pneumonia,Grape和Raisin,January和March,Monday和Thursday间的关系,相比分析肝炎和肺炎,葡萄和葡萄干,一月和三月,周一和周三之间的关系,仍是要困难不少的,对计算机来讲也是如此。
9、中英文省略和内容补足的处理
语境是一个微妙的概念,人类在进行文字阅读时,不仅是看到文字内容自己,而是不自觉的会将语境相关的词汇自动补充进入字里行间,辅助语义理解。反之,人类在文字写做时,会将一些重复内容省略掉,主语或宾语是最常被省略的对象。例如摘录自合同文书的一段文字“本协议中约定了大桥建设工程的具体内容,其中乙方负责承接,丙方负责监督,以确保顺利交付”。
若是让计算机来解读,须要把指代语补齐(用[-]表示)为:“本协议中约定了大桥建设工程的具体内容,乙方负责承接[该工程],丙方负责监督[乙方的工做],确保[该工程]顺利交付”。 书面文本还相对规范,若是是平常对话的口语文本,那么省略更加是无处不在,以一个电商客服问答为例:“这双卖多少?”,“58”。“少点?”,“最低了”。“行吗?”,“作不了哎”。若是补齐省略语,应该为:“这双[鞋子的价钱]卖多少?”“[价钱]少点[行吗]?”“[价钱少点]行吗?”
除了主谓语省略,一些很是重要的连词也常常被省略,例如“由于…因此…,虽然…可是…,尽管…然而…”,例如:“开车不注意,亲人泪两行”,“股市有风险,投资需谨慎”,补充逻辑连词后为“[若是]开车不注意,[那么]亲人泪两行”,“[由于]股市有风险,[因此]投资需谨慎”。
英文的省略习惯也存在(全世界人民都爱偷懒),例如省略主语it:“Looks as if it will snow”,省略谓语comes:“Who next?”,省略宾语thedishes:“Let ’ s do the dishes. I ’ ll wash and you ’ ll dry.”,省略连词that“It ’ s a pity[that] she ’ s leaving”。固然英文中还有一类约定俗成的独特简称(不少来自拉丁语)e.g., etc., al., i.e., viz.等。
区别在于英文书面文本中省略出现的较少,同时语义链接词的省略有固定规范,例如“because…so…”要求只省其中一个。英文行文时单词使用量比中文多,一样的内容英文篇幅一般是中文的200%左右,也即中文1页纸写完的内容,若是用英文写要2页甚至更多。若是对比惜字如金的文言文,就更浓缩了。如“民为贵,社稷次之,君为轻”,10个字若是改用英文写,没有几十个单词怕是说不清楚。那么放到省略环境下看时,汉语就比较吃亏了,由于原本就浓缩,再加上语法约束不严致使时不时省略,对信息的损失比较大。
从10个汉字的短句中省略2个字,和从一段20个单词的英文句子中省略2个单词,前者对计算机处理来讲要费力很多。达观在进行文本应用实践中,也在想办法主动“脑补”出这些省略语,加深对文字理解的深度(陈运文)。近年兴起的文本预训练(例如大名鼎鼎的BERT,MT-DNN等)技术经过海量文本的预训练,对文本进行表示学习,运用transform编码器等把这些词句中的隐语义信息嵌入(Embedding),结合Attention机制,填补省略内容,在天然语言理解(NLU)的不少应用(例如GLUE benchmark、斯坦福阅读推理SQuAD、SNLI、MultiNLI、SciTail)能大幅度提高效果。
10、歧义问题与子串转义处理
虽然大部分NLP的算法都具有语言无关性(Language independent),可是在具体工程任务中仍是有不少语言相关的问题。在汉语中常常发生的一类状况是文字子串局部转义的问题。这个问题由于是汉语所独有的,在英文中几乎未曾出现,因此在天然语言处理的学术界并不做为主流的课题被研究(由于学术界主流仍是倾向于研究语言无关性的课题和方法)。可是笔者在多年从事NLP以及搜索和推荐系统技术研发工做时,深深的感觉到子串转义是一个很是困难却也很是重要的汉语NLP课题。对这个课题处理水平的高低直接影响着大量的实际工程效果。下面具体阐述下该问题的定义。
前文我曾提到过汉语中单字很少(3000个汉字能够覆盖99%的中文文本了),因此汉语里的词汇大可能是由几个汉字顺序组合来造成的。这里潜伏着一个巨大的隐患是,由于字的排列组合形式不少,因此会致使局部出现的一些组合所构成的意思,和总体词的意思不一样,出现歧义;或者说一个词汇中的子串和整个词的意思会出现很大的差别,于是也称为子串转义问题。
这里我用数学形式化的方法再来表述下:假设A、B、C分别表示三个汉字,那么子串转义就是指词汇ABC的含义,和AB或者BC的含义彻底不相同。固然4个汉字或者更长的短串也相似。例如ABCD和ABC或BCD或AB、BC、CD的意思可能会彻底不一样,这种意思“突变”的状况称为子串转义。
例如:“周杰伦”和其中的前两个字构成的词“周杰”显然指的是彻底不一样的两我的,“荨麻疹”和“麻疹”是两种病,“亚健康”和“健康”的意思截然相反。这会给计算机处理带来不少困难,尤为在搜索引擎中,当用户搜“周杰”或“麻疹”或“健康”时,若是结果出“周杰伦上海粉丝见面会”、或“荨麻疹治疗方法”、“致使白领亚健康的主要缘由”都是不太好的结果。咱们在搜索引擎中遇到的大量结果不相关的问题,不少都是因为汉语中局部转义现象致使的。
一样,在进行关键词提取、文本类似度计算、相关文章推荐等场景的时候,这些局部转义的问题一样也会带来很大麻烦。例如“周杰伦上海粉丝见面会”和“周杰伦现身上海电影节”两篇文章的内容相关度,显然远大于“周杰上海粉丝见面会”。
不少朋友可能会以为这些均可以视为命名实体识别(NER)问题,将这些专名直接切为一个总体,就能解决上述局部转义的问题了。其实没这么简单,由于其实大量的中文词汇里,局部词组合成的意思和总体词汇是存在关联的,若是不切开会带来召回不足的问题。例如“消防队”和“消防”,“上班族”和“上班”,“315晚会”和“315”等,甚至前面例子里“周杰伦”和“杰伦”也有紧密的语义关联。当用户搜索词是“消防”、“杰伦”、“315”等query时,相应的总体词“周杰伦”、“315晚会”等所在的文章也理应被搜出来。由于明明文章里有这个词且意思相关,若是没被找出来是不能被用户接受的。经过这些例子可见正确处理汉语的字词组合的确是一件很棘手的课题。
再举个例子:“不能够”这个经常使用词,把“不可”单独做为子串提取出来是很是有必要的,由于和原词意思相同。可是把“能够”单独提取出来就很危险,由于和原词意思相反,单独进行搜索匹配会致使歧义。再如咱们能够把“阿里巴巴”里的子串“阿里”切出来,由于不少时候用户称呼“阿里”就是指“阿里巴巴”,可是把“里巴”或“巴巴”切出来则是不合适的。
究竟哪些子串词汇和原词意思相同相近?哪些又会发生转义?这须要计算机更智能的进行判断才行,目前咱们已经想了一些方法去解决,例如经过字的共现频率等进行处理,但离完全解决汉语里子串转义的问题还有距离。
除了子串转义外,汉语中其余歧义的状况也是比比皆是,例如“我去上课了”、“她看病去了”(主动和被动不明,致使没法区分老师仍是学生,病人仍是医生)、“要多少有多少”(没法区分核心语义是多仍是少)、“咬死了猎人的狗”、“喜欢山区的孩子”(没法区分狗或孩子是主语仍是宾语)。由于中文不是靠词汇的变形变换来体现修饰、主被动等关系,而是靠顺序组合来体现,所以在中文NLP的各个环节,从分词、词性、句法、指代,到局部子串处理等,都会带来歧义理解的问题。
英文中也存在歧义问题,最多见的状况是英文多义词致使的。例如“He went to the bank”既能够理解为“他去了银行”,也能够理解为“他去了河岸边”,“The doctor saw the Indian dance”,单词Indian既能够视为形容词“印第安人的舞蹈”,也能够是名词“印第安人+跳舞”,还有英文中不定式致使的歧义,如“Not many books filled the shelves”,能够理解为“书架上没有几本书”或者“要放满那些书架不用不少书”。
其实全部的人类语言都存在着各式各样的歧义的问题,咱们看到各个民族所流传的笑话里不少都是拿这些歧义语义来打趣的。不一样语言处理歧义的具体方法不一样,但总体思路都是将歧义句放到句子上下文里来解读,引入更多语境信息来正确得到意思。
能够说计算机进行语义理解的结果,某种程度上就是在和各类各样的歧义作斗争的过程。打个比方,天然语言处理的过程就像是让计算机拿着用上下文语境拼凑出的一张残缺的地图,拨开云遮雾绕的文字迷雾,越过歧义所埋下的一个个大坑,逐步接近语义真相的过程。
中英文NLP差别总结
中文和英文这两类全球使用人数最多,影响力最大的语言,有各自鲜明的语言特点,在计算机进行天然语言处理领域也有各自独树一帜的地方。本文从语言特色的角度出发,从10个方面分析了中英文在天然语言处理上的差别。随着全球化的发展,中英文在不断相互影响,相互渗透。例如中文中有大量的外来语来自英文,沙发、咖啡、巧克力、牛顿等这些频繁出现的词汇都源于英文,还有不少专业术语如NGO、WTO、CFO等,甚至NLP一词自己也是源自英文。英文也在受中文影响,每一年都有近千条外来词汇新收录入英文词典,如Kungfu(功夫),tofu(豆腐)等。
本文同步分享在 博客“shiter”(CSDN)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。