1.2 语料库语言学简史
20世纪中叶,语言学实际上主要作为一种描述手段,用来研究语言中的结构属性和语言之间的类型差异。这使得构成语言表达的不同信息成分的描写模型相当复杂。在其他社会科学领域中,收集和分析数据一直来自统计学的计量技术。20世纪40年代,语言学家(如Bloomfield)开始思考语言可以用概率和行为主义术语来解释。经验和统计方法在20世纪50年代开始流行,同时香农(Shannon)的信息论给语言分析提供了可靠的量化方法,可以对语言结构进行量化建模。
不幸的是,语言分析的统计和量化方法在20世纪50年代却遇到了困难。主要原因有两个:第一,数据可用性问题,当时采用的统计方法所使用的数据集合太小,以至于不可能从海量的语言学现象中得出有意义的结论;第二,也许是更重要的,整个社会科学的研究范式从面向数据的人类行为描述转向对人的认知功能的内省建模。
作为这种针对人类行为的新观点的一部分,语言学家Noam Chomsky(诺姆·乔姆斯基)对形式化方法和语言学理论都予以密切关注,一方面忽略定量的语言数据,另一方面还宣称定量语言数据会误导语言行为的形式化模型(Chomsky 1957)。
这一观点影响了整个20世纪六七十年代,主要因为通过使用内省(或自产生)数据,形式化方法能够发展出非常复杂的基于规则的语言模型。这对于当时仍然只能基于相对小规模的语料库创建统计语言模型来说是非常有吸引力的替代。实际上,形式化建模和基于规则的泛化一直都是必不可少的环节。在这方面,Chomsky(乔姆斯基)关于如何研究语言学的理论已经产生了丰富且精致的语言模型。
语料库语言学大事年表
以下是对该领域里程碑式事件的简单综述,一直到我们写作本书时。
20世纪50年代:描写语言学家汇集了多种语言的口语和书面语素材。文学研究者开始设计系统来收集不同作者的所有作品。上下文关键词索引(Key Word in Context,KWIC)方法作为一种建立文档索引和词语索引的技术被发明出来。
20世纪60年代:Kucera和Francis出版了当代美国英语标准语料库(A Standard Corpus of Present-Day American English)(布朗语料库),这是第一个涉及类别比较广泛的语料库。信息检索(Information Retrieval, IR)方面的工作发展出各种技术来统计文档内容的统计相似度(statistical similarity)。
20世纪70年代:从语音语料库中发展而来的随机模型(stochastic model)使语音识别系统成为可能。向量空间模型(vector space model)用于建立文档索引。伦敦-兰德语料库(London-Lund Corpus, LLC)通过英语用法调查(Survey of English Usage)而建立起来。
20世纪80年代:Lancaster-Oslo-Bergen(LOB)语料库建成,它在语料库大小和题材方面与布朗语料库一致。柯林斯伯明翰大学国际语言数据库(Collins Birmingham University International Language Database,COBUILD)词典出版,这是第一个根据大规模语料库(Bank of English)中的用法出版的词典。英语用法调查语料库(The Survey of English Usage Corpus)激发了创建基于语料库的综合性语法的工作,即《Grammar of English》(英语语法)。儿童语言数据交换系统(Child Language Data Exchange System, CHILDS)语料库作为第一语言习得数据的存储库发布。
20世纪90年代:宾州树库(Penn TreeBank)面世。这个语料库共有450万英语单词,全部都做了词性标注和句法分析。英国国家语料库(British National Corpus, BNC)是迄今为止规模最大的语料库(1亿个单词)。建立文本编码倡议(Text Encoding Initiative, TEI)作为开发和维护文本数字化的表示标准。
21世纪00年代:随着万维网(World Wide Web,WWW)的成长,越来越多的数据可以用于机器翻译和其他应用。美国国家语料库(American National Corpus, ANC)项目发布了一个2200万个单词的语料库,当代美国英语语料库(Corpus of Contemporary American English, COCA)(4亿个单词)也建设完成。谷歌发布了从公开的网页得到的含有1万亿个词例(word token)的谷歌n元语法语料库(Google N-gram Corpus)。该语料库保存了长度为1到5的n元语法的词例及其出现次数。
21世纪10年代:以ISO为代表的国际标准化组织开始承认并合作开发文本编码格式以用于语料标注工作。互联网继续产生足够的数据,可以对全新的语言现象建模。推特、脸书和博客之类的全新格式的文本语料库正在成为新的可以获取和利用的资源。
然而,理论建设也涉及对基于所观察到的语言现象做出的假设进行测试和评估。随着可用语言数据的增多,语言学家观测数据的方式也发生了重大变化。现在,在互联网上有着数以百万计的文档和数以十亿计的句子。毋庸置疑,定量分析技术可用于测试和创建与之相关的语言模型(language model)。这标志着语料库语言学新时代的到来。因此,语料库未来将成为所有语言分析工作的入口。
注意: 当定量分析脱离现有理论时,很可能仅仅生成一堆数字,数字的中立性使其只能被动地充当提供建议的一个来源。但是,与理论相背离的数字却拥有任何定性分析技术所不具备的权威性和精细度,而且这种背离往往足以促使我们开始一项新的研究。
将收集和整理的文本放入一个统一的数据集(coherent dataset)中,该数据集称为语料库(corpora),这类工作开始于20 世纪60年代。
表1-1列出了一些重要的语料库。
表1-1:一些重要的语料库
名称 时间 大小 内容
英国国家语料库(BNC) 1991—1994 1亿个单词 英式英语,包括口语和书面语
美国国家语料库(ANC) 2003 2200万个单词 口语和书面语文本
当代美国英语语料库(COCA) 2008 4.25亿个单词 口语、科幻、流行杂志和学术文章文本
1.2.1 什么是语料库
语料库是以自然交流的方式产生的机器可读文本的集合。文本采样将基于特定因素的代表性(representative)和平衡性(balanced)进行,比如根据报纸文章、文学小说、口语、博客、日记和法律文档等的题材进行采样。如果语料库可以概括为一种变体,则该语料库将视为“对一种语言变体具有代表性”(Leech 1991)。
听起来貌似有些循环。基本上,由所研究或考察的语言现象的规格所限定的语料库,在内容上反映了语言现象所在的总体,那么可以说它“代表了一种语言变体”。
语料库平衡性的概念是20世纪80年代提出来的,但到现在为止它仍然是一个非常模糊的概念,且难以给出严格的定义。Atkins和Ostler (1992)曾提出一个属性公式来定义文本类型,以建立平衡语料库(balanced corpus)。
我们可以比较两个著名的语料库在其文本内容的平衡性方面所做的努力。宾州树库(Marcus et al. 1993)共包含450万个单词,其文本有4个来源:《华尔街日报》、布朗语料库、ATIS和Switchboard语料库。相反,BNC有1亿个单词,它所包含的文本涉及更广泛的题材、领域和媒体。
宾州树库中最丰富的子语料库是布朗语料库,它包含100万个单词,来自500篇文章,每篇文章有大约2000个单词。它是由布朗大学(因此而得名)的Henry Kucera和W. Nelson Francis于1961年从当代美国英语中收集和整理而成的。1967年,他们发布了该语料库中单词词频和分布规律的统计,即Brown Corpus Manual(布朗语料库手册)(Francis and Kucera 1964),是同类出版物中的第一个。
注意: 毫无疑问,所有语言学分析必须立足于某个具体的数据集。最近一个正在被接受的观念是所有语言学家需要依靠一种或其他面向语料库的技术。语料库正在成为讨论语言现象、理论概括以及对基于统计和基于规则的应用系统进行评价的标准数据交换格式。
表1-2 比较了布朗语料库和其他几个在用的语料库。
表1-2:布朗语料库和其他语料库比较
语料库 大小 用途
布朗语料库 500篇英语文本样本;100万个单词 词性标注数据;80种词性
儿童语言数据交换系统 20种语言;数千篇文本 来自世界各地的儿童对话的转写文本
(CHILDES)
兰卡斯特-奥斯陆- 500篇英式英语文本样本,每篇 词性标注数据;布朗语料库的英式英 卑尔根语料库 大约2 000个单词 语版
布朗语料库对文档进行归类的方式告诉我们哪些类型的数据可以用来代表英语语言。两个最通用的数据类别属于信息型(informative)(含374个样本)和虚构型(imaginative)(含126个样本)。
这两个领域可以进一步细分为以下一些主题域:
信息型
出版物:新闻报道(44);出版物:社论(27);出版物:评论(17),宗教(17),技术和爱好(36),流行文学(48),纯文学、传记、回忆录(75),其他(30),自然科学(12),医学(5),数学(4),社会和行为科学(14),政治学、法律、教育(15),人类学(18),技术和工程(12)。
虚构型
通俗小说(29),神话和侦探小说(24),科幻小说(6),探险和西方小说(29),浪漫和爱情小说(29),幽默(9)
类似地,BNC也可以分为信息型和虚构型两大类,并且进一步细分为教育、政治、商业等诸多子领域。关于BNC进一步的细分可以参见2.4.2节。
从布朗语料库可知语料库中的每种类型并不是等量分布的,这貌似违背了前面所讨论的“代表性和平衡性”原则。但是,这些语料库并不是为了某个具体任务而设计的,其目的是将书面语和口语作为一个整体来表示。因此,它们努力包含现有文本的各方面,尽管它们能在多大程度上代表该语言的所有文本还存在争议(但这已经不太重要了)。
就你自己的语料库而言,你也许想收集一个较宽范围的文本,但你涉及的领域可能非常具体,所以你真正需要的语料库并不需要包含所有类别的文档。Switchboard语料库是一个关于具体领域(识别电话语音)的例子,它包含不同性别和美国不同地区的口音。
1.2.2 语料库的早期应用
早期语料库最常见的一个应用是构建词语索引(concordance)。这些是文章或文本集合中单词的字母列表,参考了它们在段落中出现的顺序。词语索引给出每个单词在上下文中的位置,所以更便于从句法和语义层面研究其在该语言中的使用。20世纪50和60年代,通过编程来自动生成词语索引,其结果称为“上下文关键词”(Key Word in Context, KWIC)索引。KWIC索引对文章中的关键词进行排序并按某种格式将它们对齐。在全文本文档搜索技术出现之前,这的确是一种相对有效的文献搜索方式。
KWIC索引的工作原理如下所示。KWIC系统的输入是一个文件或文档的集合,它们形成行的序列。输出也是一个行的序列,按照第一个单词的字典序循环移位出现。例如,考虑下面一个只有2个句子的文章,生成图1-1所示的KWIC索引。
图1-1:KWIC索引的示例
词语索引的另一个好处是,通过在其上下文中呈现关键词,你可以以可视化的方式观察该单词在给定句子中是如何使用的。看一个具体的例子,考虑英语动词treat的不同意义。特别地,让我们看看它在词典中的句子1中的前两个义项,如图1-2所示。
现在,让我们看看BNC语料库对这个动词的词语索引结果,因为这两个义项本身是有区别的。
注意: 这些词语索引使用单词语素描引擎(Word Sketch Engine),由词典编纂学家Patrick Hanks创建,它是使用称为语料库模式分析(Corpus Pattern Analysis)的技术创建的大型句子模式资源的一部分(Pustejovsky et al. 2004;Hanks and Pustejovsky 2005)。
令人震惊的是,当我们观察这些句子的每一个句子的词汇索引项时,我们发现其上下文是非常不同的。如图1-3和图1-4所示。
图1-2:单词“treat”的义项
图1-3:动词“treat”的义项(1a)
注意: NLTK提供了创建词语索引的功能。创建一个词语索引最容易的方式是把待处理的文本装入NLTK,然后使用词语索引函数:
>>> import NLTK
>>> from nltk.book import *
>>> text6.concordance(“Ni”)
如果你有自己用来创建词语索引的数据集,那么就需要再增加一步:使计算机读入你的文件,然后使用NLTK函数处理它们。这里有一段文本文件的样本代码(请使用你自己的文本文件的文件夹来替换这里的目录地址):
图1-4:动词“treat”的义项(1b)
>>> corpus_loc = ‘/home/me/corpus/’
>>> docs = nltk.corpus.PlaintextCorpusReader(corpus_loc, ‘.*\.txt’)
你可以通过显示的文件ID来判断文件是否准备好:
>>> print docs.fileids()
接下来,处理文件中的单词,然后使用词语索引函数来检查数据:
>>> docs_processed = nltk.Text(docs.words())
>>> docs_processed.concordance(“treat”)
1.2.3 当今的语料库
研究人员什么时候开始实际使用语料库对语言现象建模并训练算法?从20世纪80年代开始,语音识别方面的研究人员开始整理大量口语数据来创建语言模型,根据转写文本使用n元语法(n-gram)和隐马尔科夫模型(Hidden Markov Model, HMM),在非常窄的领域中可以很好地识别有限词汇表中的单词。20 世纪90年代,机器翻译开始受到越来越大的数据集的影响并产生了面向翻译的统计语言模型。
最后,内存和计算机硬件都变得足够强大,从而可以收集和分析日益增加的语言数据集。基于此而创建的统计语言模型在多项语言处理任务上都有良好表现。
作为日益增长数据的例子之一,谷歌最近发布了谷歌n元语法语料库。该数据集允许用户搜索单个词(1元语法)或最多5个单词(5元语法)组成的词串。该数据集可以通过语言数据联盟(Linguistic Data Consortium, LDC)获得或直接从谷歌下载。也可以通过谷歌n元语法浏览器在线使用。该数据集包含了超过1万亿个词例(单词、数字等),均来自公开的网站并按照年份排序,从中可以看到语言使用中的趋势。除了英语外,还为中文、法语、德语、希伯来语、俄语和西班牙语及英语语料库的子集(如美国英语和英语小说)提供相应的n元语料库。
注意: n元语法是一个个体项(通常是单词,但它们也可以是字母、音素等)组成的序列。通过观察这些项共现的次数,可以学习它们在语言中的用法并预测给定一个序列的下一项(将n元语法用于此目的时称为n元语法建模)。
n元语法每天以各种方式得到应用,比如将一些字母输入后网站提供搜索建议以及出现拼写错误后可能的建议。也可用于语音消歧,如果一个人吐字不清但说出一段不常见(或从未听过)的语音序列,则n元语法模型可以帮助解决该问题并判断说话人很可能要说的单词。
另一个当代语料库是ClueWeb09(http://lemurproject.org/clueweb09.php/),该数据集“支持在信息检索和相关人类语言技术方面的研究,它包括2009年1月和2月收集的10种语言的大约10亿个网页”。该语料库规模太大而无法进行标注(不压缩的情况下大约25T字节),但已经有一些语言工程采用其中的一部分(如英语网页)并使用它们开展研究(Pomikálek et al. 2012)。从因特网收集数据是语料库日益常见的创建方式,因为人类总在不断地创建新的和变化的内容。
1.2.4 标注类型
考虑可以标注的语法层面的不同部分,包括词性(Part of Speech, POS)、短语结构(phrase structure)和依存结构(dependency structure)。表1-3给出了这些词性标注的例子,有许多不同的词性标签集可供选择。
表1-3:不同语料库中词性标签的个数
标签集 大小 日期
布朗语料库 77 1964
LOB 132 20世纪80年代
伦敦-兰德语料库 197 1982
宾州树库 36 1992
图1-5中的标签集来自宾州树库,它是后来标注语料库的基础。
图1-5:宾州树库词性标签集
词性标注过程是给一个句子(或语料库)中所有单词分配一个正确的词性标签(marker)。这里给出一个简单的例子,“The waiter cleared the plates from the table.”(见图1-6)。
图1-6:词性标注示例
词性标注(POS tagging)是许多NLP应用中的关键一步,因为知道一个词的词性对后续分析非常重要,比如:
语音合成
一个词是名词还是动词?比如,object(反对)、overflow(溢出)、insult(侮辱)和suspect(怀疑)。如果没有具体的上下文,这些词既可以是名词也可以是动词。
句法分析
需要进行词性标注以得到更大的句法单元。比如,在下面的句子中,“clean dishes”(干净的盘子、把盘子洗干净)是一个名词短语还是一个祈使动词短语?
Clean dishes are in the cabinet.(干净的盘子在橱柜里。)
Clean dishes before going to work! (工作前先把盘子洗干净!)
机器翻译
有了词性标注和随后的句法分析,在把上述短语翻译成另一种语言时会有很大不同。比如法语:“Des assiettes propres”(干净的盘子)与“Fais la vaisselle!”(把盘子洗干净)。
考虑下面来自宾州树库的句子中这些标签的用法(Marcus et al. 1993):
“From the beginning, it took a man with extraordinary qualities to succeed in Mexico,” says Kimihide Takimura, president of Mitsui group抯 Kensetsu Engineering Inc. unit.
“/”From/IN the/DT beginning/NN ,/, it/PRP took/VBD a/DT man/NN with/IN extraordinary/JJ qualities/NNS to/TO succeed/VB in/IN Mexico/NNP ,/, “/” says/VBZ Kimihide/NNP Takimura/NNP ,/, president/NN of/IN Mitsui/NNS group/NN抯/POS Kensetsu/NNP Engineering/NNP Inc./NNP unit/NN ./.
识别句子中正确词性在许多自然语言处理应用中都是一个关键步骤,比如句法分析器、命名实体识别器(Named Entity Recognizer)、QAS和机器翻译系统。对识别更大的句法结构单元(如短语结构)来说也是一个重要步骤。
注意: 使用NLTK标注器对这里的例句进行词性标注,然后对可能具有歧义的更复杂的句子进行词性标注:
>>> from nltk import pos_tag, word_tokenize
>>> pos_tag(word_tokenize(“This is a test.”))
寻找标注器标注错误的地方,然后思考哪些规则可能产生这些错误。例如,当尝试分析“Clean dishes are in the cabinet.”和“Clean dishes before going to work!”时,会发生什么情况。
虽然单词都标注了标签(即上面提到的词性标签),但这些单词序列也有可与某些标签关联起来。我们称之为句法标注(syntactic bracketing),这些结构将我们听到的所有单词组织成连贯的短语。如前所述,这些与句子相关联的结构也就是所谓的句法结构。宾州树库是一个带有显式句法标注的标注语料库。图1-7给出了一个标注的例子。
图1-7:句法标注示例
这是一个句法树结构的括号表示,其树状表示如图1-8所示。
图1-8:句法树结构
请注意,句法标注引入一个句子中单词与单词之间的两种关系:顺序(优先)和层次(支配)。例如,图1-8中的树结构用树的特性来表示这些关系,并构成一个有向无环图(Directed Acyclic Graph, DAG)。树结构以一种非常紧凑的方式表示下面所列的优先关系(precedence relation)和支配关系(dominance relation):
{Dom(NNP1,John), Dom(VPZ,loves), Dom(NNP2,Mary), Dom(NP1,NNP1), Dom(NP2,NNP2), Dom(S,NP1), Dom(VP,VPZ), Dom(VP,NP2), Dom(S,VP), Prec(NP1,VP), Prec(VPZ,NP2)}
包括机器翻译在内的任何复杂自然语言处理应用都要求某种水平上的句法分析。如果完全分析(full parsing)(如前面所述)不可用,那么可以使用某种浅层分析(shallow parsing)。此时,将部分句法括号应用到词的序列中而不考虑每个短语内的结构细节。后面的章节将进一步讨论这个问题。
除了词性标注和句法标注外,对语料库中文本的语义(即句子中单词的意义)进行标注也是很有用的。我们可以区分一个句子中两种不同的语义标注:是什么和扮演什么角色。详解如下:
语义分类
句子中的单词或短语用一个标识符(来自一个已有的词汇表或本体)来标注,表明其代表的语义。
语义角色标注
将句子中的单词或短语标注为扮演与角色指派者相关的具体语义角色(如动词)。
让我们考虑采用这两个策略的标注是什么样子。先从语义类型开始,这些语义类型通常用1-9所示的本体(ontology)来定义。
注意: 本体这个词语是一个哲学术语,但在计算语言学中也有一席之地,这里它用来创建分类层次,把相似的概念或对象分为一类。通过使用本体中指定的单词的语义类型,可以在本体的不同分支之间建立关系,当把语言学规则用于某一个类别中的所有单词时,判断该规则是否有效。
图1-9:一个简单的本体
图1-9中的本体非常简单,只含有少量类别。但是,即使这个小的本体也能用来描述语言中某些有意义的特征。考虑下面例子中的语义类型标注:
从这个小例子中,我们能观察到这些对象之间如何交互。人可以访问地方,人与组织之间有“of”(所有)关系且午餐可以在星期六下午1:15发生。给定一个足够大的含有类似标注句子的语料库,我们可以发现用法模式,它们能告诉我们关于这些标签能或者不能搭配使用的知识。
这些例子的语料库还可以告诉我们有些类别可能需要扩展。句子中有两个“time”(时间):Saturday(星期六)和1:15 p.m(下午1:15)。可以看到事件发生在“on”星期六,但“at”下午1:15。一个大的语料库会显示该模式对一星期中的其他天和小时仍然适用——这些用法上的差别不能从语义类型中推测出来。但并不是所有的本体都应捕获所有的信息——本体的应用将决定捕获星期六和下午1:15之间的差别是否重要。
上面描述的标注策略标识出语言表达的内容。但如果我们想知道一个问答系统中的基本信息,即一个句子中的谁、什么、哪里和什么时候。这涉及与一个动词相关的语义角色标签。语义角色是什么?虽然人们对语言中的语义角色有完全不同的认识(对语言学家而言,这种现象并不罕见),下面列出与不同动词相关的各种语义角色标签:
施事
事件的参与者,其做某件事情或者导致某件事情发生。
客体/对象
事件的参与者,其经受位置或状态的变化。
经历者
事件的参与者,其经历或感知某件事物。
来源
动作开始的位置或地方;被给予接受者的客体的来源。
目标
动作指向或结束的位置或处所。
接受者
占有客体的人。
受事
事件的参与者,其被该事件所影响。
工具
事件的参与者,其被施事用于进行该事件或导致该事件。
位置/地点
与事件自身相关的位置或地方。
标注数据显式地标识实体的范围以及各个实体之间的关系:
[The man]agent painted [the wall]patient with [a paint brush]instrument.
[Mary]figure walked to [the cafe]goal from [her house]source.
[John]agent gave [his mother]recipient [a necklace]theme.
[My brother]theme lives in [Milwaukee]location.