面向机器学习的自然语言标注.-阿里云开发者社区

开发者社区> 华章出版社> 正文

面向机器学习的自然语言标注.

简介:

41ac367e30554bd106cc8a4e05cff118a8528660

面向机器学习的自然语言标注


James Pustejovsky & Amber Stubbs 著

邱立坤 金澎 王萌 译




图书在版编目(CIP)数据

面向机器学习的自然语言标注 / (美) 詹姆斯·普斯特若夫斯基(James Pustejovsky),安伯·斯塔布斯(Amber Stubbs)著;邱立坤,金澎,王萌译. -北京:机械工业出版社, 2017.1

(O’Reilly精品图书系列)

书名原文:Natural Language Annotation for Machine Learning

ISBN 978-7-111-55515-5

I. ①面…   II. ①詹… ②安… ③邱… ④金… ⑤王…   III. ①自然语言处理 Ⅳ. ①TP391 

中国版本图书馆CIP数据核字(2016)第298782号


北京市版权局著作权合同登记

图字:01-2013-3071号


?2013  James Pustejovsky and Amber Stubbs. All rights reserved.

Simpli?ed Chinese Edition, jointly published by O’Reilly Media, Inc. and China Machine Press, 2017. Authorized translation of the English edition, 2013 O’Reilly Media, Inc., the owner of all rights to publish and sell the same.

All rights reserved including the rights of reproduction in whole or in part in any form.

英文原版由O’Reilly Media, Inc. 出版2013。

简体中文版由机械工业出版社出版 2017。英文原版的翻译得到O’Reilly Media, Inc.的授权。此简体中文版的出版和销售得到出版权和销售权的所有者 —— O’Reilly Media, Inc.的许可。

版权所有,未得书面许可,本书的任何部分和全部不得以任何形式重制。


封底无防伪标均为盗版

本书法律顾问

北京大成律师事务所 韩光/邹晓东


书 名/ 面向机器学习的自然语言标注

书 号/ ISBN 978-7-111-55515-5

责任编辑/ 盛思源

封面设计/ Randy Comer,张健

出版发行/ 机械工业出版社

地 址/ 北京市西城区百万庄大街22号(邮政编码 100037)

印 刷/ 

开 本/ 178毫米×233毫米    16开本  19.25印张    

版 次/ 2017年2月第1版    2017年2月第1次印刷

定 价/ 79.00元(册)

凡购本书,如有缺页、倒页、脱页,由本社发行部调换

客服热线:(010)88379426;88361066

购书热线:(010)68326294;88379649;68995259

投稿热线:(010)88379604

读者信箱:hzit@hzbook.com



O’Reilly Media, Inc.介绍


O’Reilly Media通过图书、杂志、在线服务、调查研究和会议等方式传播创新知识。自1978年开始,O’Reilly一直都是前沿发展的见证者和推动者。超级极客们正在开创着未来,而我们关注真正重要的技术趋势——通过放大那些“细微的信号”来刺激社会对新科技的应用。作为技术社区中活跃的参与者,O’Reilly的发展充满了对创新的倡导、创造和发扬光大。

O’Reilly为软件开发人员带来革命性的“动物书”;创建第一个商业网站(GNN);组织了影响深远的开放源代码峰会,以至于开源软件运动以此命名;创立了Make杂志,从而成为DIY革命的主要先锋;公司一如既往地通过多种形式缔结信息与人的纽带。O’Reilly的会议和峰会集聚了众多超级极客和高瞻远瞩的商业领袖,共同描绘出开创新产业的革命性思想。作为技术人士获取信息的选择,O’Reilly现在还将先锋专家的知识传递给普通的计算机用户。无论是通过书籍出版,在线服务或者面授课程,每一项O’Reilly的产品都反映了公司不可动摇的理念——信息是激发创新的力量。


业界评论

“O’Reilly Radar博客有口皆碑。”

——Wired

“O’Reilly凭借一系列(真希望当初我也想到了)非凡想法建立了数百万美元的业务。”

——Business 2.0

“O’Reilly Conference是聚集关键思想领袖的绝对典范。”

——CRN

“一本O’Reilly的书就代表一个有用、有前途、需要学习的主题。”

——Irish Times

“Tim是位特立独行的商人,他不光放眼于最长远、最广阔的视野并且切实地按照Yogi Berra的建议去做了:‘如果你在路上遇到岔路口,走小路(岔路)。’回顾过去Tim似乎每一次都选择了小路,而且有几次都是一闪即逝的机会,尽管大路也不错。”

——Linux Journal






译者序

自然语言标注与我们国内一般所说的语料库建设大致是同一个意思,面向机器学习的自然语言标注则在此基础上更进一步,对其所服务的目标做出明确限制。显然,自然语言标注除了可以服务于机器学习外,还可以服务于语言研究、语言教学、词典编纂等。但是,相比之下,面向机器学习的自然语言标注无论在深度上还是在广度上都更具有生机和活力,影响也更为深远。

本书是由著名计算语言学家Pustejovsky教授与Stubbs博士合作编写的。它是第一本系统论述自然语言标注的著作。我们都是计算语言学工作者,具有一定的自然语言标注经验。但是本书几乎彻底颠覆了我们对于自然语言标注(或者说,语料库建设)的理解,使我们明白:原来自然语言标注还可以这么做,而且应该这么做。

本书内容全面、结构严谨、示例丰富,除了自然语言标注本身之外,还涉及语料库分析、机器学习等方面的知识。这里,我们不打算详细介绍本书的内容,只是简单地谈一谈我们印象最深的几个方面。

首先,本书提出了自然语言标注过程的方法论,即MATTER循环,包括建模(Model)、标注(Annotate)、训练(Train)、测试(Test)、评价(Evaluation)、修改(Revise)6个步骤。在一个完整的标注项目中,这6个步骤要经过多次迭代才能取得最佳效果。如果能够完整地执行这6个步骤,并根据评价结果和错误分析进行多次迭代,那么标注项目的质量就自然可以得到保证。

其次,作者一直强调修改的重要性,包括修改模型、规格说明、指南、机器学习算法等。其中特别需要强调的是,根据机器学习算法来修改模型、规格说明和指南。现有许多标注项目都没能做到这一点,也就是说,在其语料库建模和标注阶段根本就没有考虑机器学习算法的效果。这是中文自然语言标注项目应该予以关注和改进的地方。

再次,不得不说本书的MTTER循环对自然语言标注工作提出了极高的要求,比如要求双盲甚至多盲标注再辅以审核环节,这样显然可以最大限度地保证标注的质量。但是,有些时候,由于时间、人力和物力所限,我们很难做到这一点。此时退而求其次的做法是以这种高标准的方式完成一个中等规模的黄金标准语料库。

最后,本书不仅具有系统性,还具有实践性,并且提供了丰富的资源列表。本书涉及电影题材分类、情感分类、命名实体标注和语义角色标注,还有时间信息标注,基本覆盖了各种类型的语言标注。我们在从事语言标注时,完全可以参照相应类型的标注任务,借鉴其模型和标注格式,并从本书的资源列表中找到更多的相关研究、资源和工具。

本书的翻译工作由3位作者分工完成,其中邱立坤负责第2、4、6、7、8、9章,金澎负责前言及第1、3、5章,王萌负责第10、11、12章及附录。全书统稿由邱立坤完成。参与本书翻译工作的还有谢婧、张藜奕、荆礼楠、曹永红、危一安、徐榕、何保荣、张典、王笑、王磊等,感谢他们的积极参与和贡献。

非常感谢华章公司给予我们翻译并出版这本书的机会,也非常感谢姚蕾编辑在整个过程中给予我们的理解、支持和帮助,希望以后有机会能继续合作。

由于时间和水平所限,本书的翻译难免存在一些疏漏之处,恳请读者批评指正,并欢迎随时就书中的任何问题联系作者(qiulikun@gmail.com)或机械工业出版社。我们将及时更新本书的勘误表。


译者




前言

本书的读者是那些使用计算机来处理自然语言的人。自然语言是指人类所说的任何一种语言,可以是当代语言(如英语、汉语、西班牙语),也可以指过去曾经使用过的语言(如拉丁语、古希腊语、梵语)。标注(annotation)是一个过程,它通过向文本中加入元数据来增强计算机执行自然语言处理(Natural Language Processing, NLP)的能力。特别地,我们考察如何通过标注将信息加入自然语言文本中以便改善机器学习(Machine Learning,ML)算法(一组设计好的计算机程序,它从文本提供的信息中推出规则,目的是将这些规则用于将来未标注的文本中)的性能。

面向机器学习的自然语言标注

本书详细介绍创建自己的自然语言标注数据集(称为语料库)所需的各个阶段和过程,以便为基于语言的数据和知识发现训练机器学习算法。本书的总体目标是为读者展示如何创建自己的语料库。从选择一个标注任务开始,然后创建标注规格说明(annotation specification)、设计标注指南(annotation guideline)、创建一个“黄金标准”语料库(corpus),最后采用这个标注过程开始创建实际的数据。

标注过程并不是线性的,因此需要多次迭代来定义任务、标注和评价,以便得到最佳结果。这一过程可以概括为MATTER标注开发过程:建模(Model)、标注(Annotate)、训练(Train)、测试(Test)、评价(Evaluate)、修改(Revise)。本书引导读者遍历整个循环,提供详细的例子并完整地讨论几种不同类型的标注任务。详细地研究这些任务,使读者清楚地了解其中的来龙去脉,并为他们自己的机器学习任务奠定基础。

此外,本书列出了用于标注文本和评审标注的常用软件的访问和使用指南。尽管有许多标注工具可用,但本书采用的多用途标注环境(Multipurpose Annotation Environment, MAE)特别易于安装和使用(读者可以免费下载),读者不会因为令人困惑的文档而分心。经常与MAE一起使用的是多文档审核接口(Multidocument Adjudication Interface, MAI),它用于在标注的文档之间进行比对。

读者

本书写给所有对用计算机研究自然语言所传递的信息内容感兴趣的人。阅读本书,并不要求具有编程或语言学背景,但若对脚本语言(如Python)有基本的理解将更易于理解MATTER循环,因为书中的一些示例代码是用Python写的。如果你从未用过Python,强烈地向你推荐由Steven Bird、Ewan Klein和Edward Loper所著的《Natural Language Processing with Python》(Python自然语言处理)一书(O扲eilly)。该书是一本优秀的关于Python和自然语言处理的入门教材,本书并未涉及这些知识。

如果读者已具备XML(或者HTML)等标记语言的基础知识,将能够更好地理解和掌握本书。你不需要成为深入了解XML原理的专家,但是由于绝大多数标注项目都使用某种形式的XML对标签进行编码,因此我们在本书中将使用XML标准来提供标注样例。不是一定得成为网页设计师才能理解本书,但是具有关于标签和属性的知识对于理解标注项目是如何实现的将会有较大的帮助。

内容安排 

第1章简单回顾了语言标注和机器学习的历史,简要介绍了将标注任务用于不同层次语言学研究的多种方法。本书的其余部分带领读者遍历整个MATTER循环,从第2章介绍如何创建一个合理的标注目标开始,历经每个阶段,直到评价标注和机器学习阶段的结果,第9章讨论修改项目并汇报工作。最后两章完整地介绍了一个标注项目,以及如何用机器学习和基于规则的算法重新创建标注。读者可以在书后的附录中找到对自己的标注任务有用的资源列表。

软件需求

虽然不运行书中给出的任何示例代码也可以学习本书,但我们强烈推荐至少安装自然语言工具包(Natural Language ToolKit, NLTK)以便理解涉及的机器学习技术。NLTK当前支持Python 2.4~2.7(Python 3.0直到本书完成时尚未被支持)。想了解更多信息,请参考http://www.nltk.org。

本书中的所有示例代码都在交互式Python shell编程环境中运行。关于如何使用这一环境,请参阅http://docs.python.org/tutorial/interpreter.html。如果没有特别说明,假设在所有的示例代码前使用命令import nltk。

本书约定

在本书中使用以下排版方式:

斜体(Italic)

此类字体表示新术语、网址(URL)、电子邮件地址,文件名和文件扩展名。

等宽字体(Constant width)

此类字体表示程序清单,以及在文档段内的各种程序元素(如变量名或函数名、数据库名、数据类型、环境变量、语句和关键字)。

注意: 表示一个提示、建议或一般性的注解。

警告: 表示一个警告或注意事项。

使用代码示例

本书在这里帮助你完成你的工作。总的来讲,你可以在你的程序和文档中使用本书中的代码。你不需要联系我们以征得许可,除非你正在复制代码中的重要部分。比如,使用书中的多段代码写一个程序并不需要获得许可。

若将O扲eilly公司出版的书中的例子制成光盘来销售或发行则需要获得许可。在回答问题时,引用本书和列举书中的例子代码并不需要许可。把本书中的代码作为你的产品文档的重要部分时需要获得许可。

我们希望但并不要求你在引用本书内容时说明引文的文献出处。引用通常包括题目、作者、出版社和ISBN号。例如:Natural Language Annotation for Machine Learning by James Pustejovsky and Amber Stubbs(O扲eilly). Copyright 2013 James Pustejovsky and Amber Stubbs,978-1-449-30666-3.

如果你感觉你对代码示例的使用超出合理使用以及上述的许可范围,请通过permissions@oreilly.com联系我们。

Safari际樵谙?

Safari图书在线(www.safaribooksonline.com)是一个按需数字图书馆,它采用图书和视频两种形式发布专业级的内容,作者都是来自技术和商业领域的世界顶尖专家。

技术专家、软件开发者、网站设计者和商业及创新专家都使用Safari图书在线作为他们研究、解决问题以及学习和职业资格培训的首要资源。

Safari图书在线为各种组织、政府机构和个人提供丰富的产品和定价程序。订购者可在一个全文可检索数据库中浏览数以千计的图书、培训视频和预出版手稿。它们来自O扲eilly Media、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett、Course Technology等众多出版社。关于Safari图书在线的更多信息,请在线访问我们。

联系方式

请通过出版社向我们提出宝贵的建议和意见:

美国:

O'Reilly Media,Inc.

1005 Gravenstein Highway North

Sebastopol,CA 95472

中国:

北京市西城区西直门南大街2号成铭大厦C座807室(100035)

奥莱利技术咨询(北京)有限公司

我们为本书配备有一个网页,上面列出了勘误表、例子和其他一些信息。网址为http://oreil.ly/nat-lang-annotation-ML。

评论或询问本书的技术问题,请发送电子邮件到bookquestions@oreilly.com。

更多关于我们的图书、课程、会议和新闻的信息,请访问我们的网站http://www.oreilly.com和http://www.oreilly.com.cn。

致谢

我们感谢O扲eilly所有帮助完成此书的朋友,特别感谢Meghan Blanchette、Julie Steele、Sarah Schneider、Kristen Borg、Audrey Doyle和其他全程帮助我们的人。我们也要感谢布兰迪斯大学(Brandeis University)COSI 216班的同学,他们参与了2011春季学期的课程,和我们一起完成了整个MATTER循环,他们是Karina Baeza Grossmann-Siegert、Elizabeth Baran、Bensiin Borukhov、Nicholas Botchan、Richard Brutti、Olga Cherenina、Russell Entrikin、Livnat Herzig、Sophie Kush kuley、Theodore Margolis、Alexandra Nunes、Lin Pan、Batia Snir、John Vogel和Yaqin Yang。

我们还要感谢技术评审人,他们给了我们优秀的反馈。他们是Arvind S. Gautam、Catherine Havasi、Anna Rumshisky和Ben Wellner,以及每一位阅读本书早期版本且让我们知道我们在正确的方向上前进的人们。

我们还要感谢ISO联盟的成员,他们和我们一起讨论了本书所采用的素材。他们是

Kiyong Lee、Harry Bunt、Nancy Ide、Nicoletta Calzolari、Bran Boguraev、Annie Zaenen和Laurent Romary。

另外,感谢布兰迪斯大学计算机科学和语言学系的同行,他们倾听了我们的头脑风暴,不断鼓励我们并确保在我们写作期间一切正常。特别感谢Marc Verhagen、Lotus Goldberg、Jessica Moszkowicz和Alex Plotnick。

没有语言学和计算语言学社区的人们所创建的语料库和标注,就不会有本书的出现。更重要的是,他们和大家分享他们的经验。

James的致谢

我要感谢我的妻子Cathie在写作此书期间的耐心和支持。我还要感谢我的孩子Zac和Sophie容忍我完成了此书。感谢Amber和我一起奋力拼搏!

Amber的致谢

我要感谢我的丈夫BJ鼓励我承担本书的写作且在整个过程中表现出足够的耐心。我还要感谢我的家人,特别是我的父母,他们对此非常热心。当然,还要感谢我的导师和联合作者James首先萌生了撰写此书的构想。






目录

前言 1

第1章 基础知识 7

1.1 语言标注的重要性 7

1.1.1 语言学描述的层次 8

1.1.2 什么是自然语言处理 9

1.2 语料库语言学简史 10

1.2.1 什么是语料库 13

1.2.2 语料库的早期应用 15

1.2.3 当今的语料库 17

1.2.4 标注类型 18

1.3 语言数据和机器学习 24

1.3.1 分类 25

1.3.2 聚类 25

1.3.3 结构化模式归纳 26

1.4 标注开发循环 26

1.4.1 现象建模 27

1.4.2 按照规格说明进行标注 30

1.4.3 在语料库上训练和测试算法 31

1.4.4 对结果进行评价 32

1.4.5 修改模型和算法 33

总结 34

第2章 确定目标与选择数据 36

2.1 定义目标 36

2.1.1 目标陈述 37

2.1.2 提炼目标:信息量与正确性 38

2.2 背景研究 43

2.2.1 语言资源 44

2.2.2 机构与会议 44

2.2.3 自然语言处理竞赛 45

2.3 整合数据集 46

2.3.1 理想的语料库:代表性与平衡性 47

2.3.2 从因特网上收集数据 47

2.3.3 从人群中获取数据 48

2.4 语料库的规模 49

2.4.1 现有语料库 50

2.4.2 语料库内部的分布 51

总结 53

第3章 语料库分析 54

3.1 语料库分析中的基本概率知识 55

3.1.1 联合概率分布 56

3.1.2 贝叶斯定理 58

3.2 计算出现次数 58

3.2.1 齐普夫定律(Zip's Law) 61

3.2.2  n元语法 62

3.3 语言模型 63

总结 65

第4章 建立模型与规格说明 66

4.1 模型和规格说明示例 66

4.1.1 电影题材分类 69

4.1.2 添加命名实体 70

4.1.3 语义角色 71

4.2 采用(或不采用)现有模型 73

4.2.1 创建模型和规格说明:一般性与特殊性 74

4.2.2 使用现有模型和规格说明 76

4.2.3 使用没有规格说明的模型 78

4.3 各种标准 78

4.3.1 ISO标准 78

4.3.2 社区驱动型标准 81

4.3.3 影响标注的其他标准 81

总结 82

第5章 选择并应用标注标准 84

5.1 元数据标注:文档分类 85

5.1.1 单标签标注:电影评论 85

5.1.2 多标签标注:电影题材 87

5.2 文本范围标注:命名实体 90

5.2.1 内嵌式标注 90

5.2.2 基于词例的分离式标注 92

5.2.3 基于字符位置的分离式标注 95

5.3 链接范围标注:语义角色 96

5.4 ISO标准和你 97

总结 97

第6章 标注与审核 99

6.1 标注项目的基本结构 99

6.2 标注规格说明与标注指南 101

6.3 准备修改 102

6.4 准备用于标注的数据 103

6.4.1 元数据 103

6.4.2 数据预处理 104

6.4.3 为标注工作分割文件 104

6.5 撰写标注指南 105

6.5.1 例1:单标签标注——电影评论 106

6.5.2 例2:多标签标注——电影题材 108

6.5.3 例3:范围标注——命名实体 111

6.5.4 例4:链接范围标注——语义角色 112

6.6 标注人员 114

6.7 选择标注环境 116

6.8 评价标注结果 117

6.8.1 Cohen的Kappa(κ)算法 118

6.8.2 Fleiss的Kappa(κ)算法 119

6.8.3 解释Kappa系数 122

6.8.4 在其他上下文中计算κ值 123

6.9 创建黄金标准(审核) 125

总结 126

第7章 训练:机器学习 129

7.1 何谓学习 130

7.2 定义学习任务 132

7.3 分类算法 133

7.3.1 决策树学习 135

7.3.2 朴素贝叶斯学习 140

7.3.3 最大熵分类器 145

7.3.4 其他需要了解的分类器 147

7.4 序列归纳算法 148

7.5 聚类和无监督学习 150

7.6 半监督学习 150

7.7 匹配标注与算法 153

总结 154

第8章 测试与评价 156

8.1 测试算法 157

8.2 评价算法 157

8.2.1 混淆矩阵 157

8.2.2 计算评价得分 159

8.2.3 解释评价得分 163

8.3 可能影响算法评价的问题 164

8.3.1 数据集太小 164

8.3.2 算法过于适合开发数据 166

8.3.3 标注中的信息过多 166

8.4  最后测试得分 167

总结 167

第9章 修改与报告 169

9.1 修改项目 170

9.1.1 语料库分布和内容 170

9.1.2 模型和规格说明 170

9.1.3 标注 171

9.1.4 训练和测试 172

9.2 报告工作 173

9.2.1 关于语料库 174

9.2.2 关于模型和规格说明 175

9.2.3 关于标注任务和标注人员 175

9.2.4 关于ML算法 176

9.2.5 关于修改 177

总结 177

第10章 标注:TimeML 179

10.1 TimeML的设计目标 180

10.2 相关研究 181

10.3 建设语料库 182

10.4 模型:初步的标注规格说明 183

10.4.1 时间 183

10.4.2 信号 184

10.4.3 事件 184

10.4.4 链接 184

10.5 标注:最初的尝试 185

10.6 模型:TimeBank中的TimeML标注规格说明 185

10.6.1 时间表达式 185

10.6.2 事件 186

10.6.3 信号 187

10.6.4 链接 187

10.6.5 可信度 189

10.7 标注:TimeBank的产生 189

10.8 TimeML成为ISO-TimeML 192

10.9 对未来建模:TimeML的发展方向 193

10.9.1 叙事容器 194

10.9.2 将TimeML扩展到其他领域 195

10.9.3 事件结构 196

总结 197

第11章 自动标注:生成TimeML 199

11.1 TARSQI组件 200

11.1.1 GUTime:时间标志识别 201

11.1.2 EVITA:事件识别及分类 201

11.1.3 GUTenLINK 202

11.1.4 Slinket 204

11.1.5 SputLink 204

11.1.6 TARSQI组件中的机器学习 205

11.2 TTK的改进 206

11.2.1 结构变化 206

11.2.2 时间实体识别改进:BTime 207

11.2.3 时间关系识别 207

11.2.4 时间关系验证 208

11.2.5时间关系可视化 209

11.3 TimeML竞赛:TempEval-2 209

11.3.1 TempEval-2:系统概述 210

11.3.2 成果综述 213

11.4 TTK的未来 213

11.4.1 新的输入格式 213

11.4.2 叙事容器/叙事时间 214

11.4.3 医学文档 215

11.4.4 跨文档分析 216

总结 216

第12章 后记:标注的未来发展趋势 217

12.1 众包标注 217

12.1.1 亚马逊土耳其机器人 218

12.1.2 有目的的游戏 219

12.1.3 用户生成内容 220

12.2 处理大数据 220

12.2.1 Boosting算法 221

12.2.2 主动学习 221

12.2.3 半监督学习 223

12.3 NLP在线和在云端 223

12.3.1 分布式计算 223

12.3.2 语言资源共享 224

12.3.3 语言应用共享 224

结语 225

附录A 可利用的语料库与标注规格说明列表 227

附录B 软件资源列表 249

附录C MAE用户指南 269

附录D MAI用户指南 276

附录E 参考文献 282

第1章  

基础知识

人们几乎每天都会教计算机去解决一些新的激动人心的问题,这些问题包括如何在国际象棋比赛或“危险边缘”节目译注1中取胜,以及驾驶车辆时的最短路径选择。但仍有大量的问题是计算机不能完成的,特别是在理解人类语言方面。已经证明统计方法是解决这一问题的有效途径,但当可以为机器学习(Machine Learning, ML)算法提供关于数据集所包含信息的数据线索提示而不仅仅是数量巨大的数据时,ML通常可以产生更好的效果。讨论自然语言时,这些提示通常以标注的形式呈现——提供关于文本额外信息的元数据。但是,为了有效地指导计算机,让它从正确和足够的数据中学习是非常重要的。本书的目的是为你提供创建良好数据的工具以便服务于你自己的机器学习任务。本章主要内容包括:

为什么标注对语言学家和计算机科学家而言是同样重要的工具。

语料库语言学(corpus linguistics)是怎么样发展成今天这样的。

语言学的不同领域以及它们与标注和机器学习任务之间的关系。

什么是语料库,如何使之具有平衡性。

如何用标注表示一些经典的机器学习问题。

标注开发循环(annotation development cycle)的基础知识。

1.1 语言标注的重要性 

众所周知,因特网是一个信息宝库,它可以教你做任何事情:玩杂技、编程序、弹奏乐器等。然而,因特网上还有另一层信息:所有这些课程(以及博客、论坛、推特等)中是如何交流的。网络上的信息以多种媒体的形式存在(文本、图片、视频和声音),语言是让人们理解这些内容的沟通媒介,它把内容和其他媒体连接起来。但是,尽管计算机善于把这些信息传递给感兴趣的用户,但它却非常不擅长理解语言本身。

理论和计算语言学(Computational Linguistics, CL)集中研究语言更深层次的本质并获取语言结构的可计算特性。人类语言技术(Human Language Technology, HLT)试图使用这些原理和算法并将之实现为可用的高性能程序来影响我们使用语言和计算机的交互方式。随着使用因特网的人数的日益增加,可供研究使用的语言数据也急剧增长,这样可以将语言学建模问题看作机器学习任务,而不是局限于相对小规模的个人手工处理的数据。

但是,仅仅给计算机输入大量的数据就期望它能够学会说话是不够的——这些数据应该以计算机更易于发现模式和推理的方式准备好。通常通过给数据集增加相关元数据来实现这一目标。用于标记数据集元素的元数据标签(tag)称为在输入上的标注。然而,为了使算法更有效地学习,数据上的标注必须准确并与要执行的任务相关。所以,语言标注是开发智能人类语言技术的关键环节。

注意: 给机器学习算法过多的信息会拖慢它且导致不准确的结果,或导致算法和训练数据过于一致而产生“过拟合”(overfit),在新的数据上可能产生更不准确的结果。认真思考什么是你要完成的东西,什么信息与你的目标最相关,这一点非常重要。本书的后续章节将介绍如何找到这些信息,以及如何确定你的算法在完成你所设定的任务上的表现。

自然语言形成的数据集称为语料库(corpus),基于同一个标注规格说明标注的数据集合称为标注语料库(annotated corpus)。标注的语料库可用于训练ML算法。本章将讨论什么是语料库,解释标注的含义,并且描述用标注来充实面向机器学习的语言数据集合的方法。

1.1.1 语言学描述的层次

我们将列举许多类型的标注任务的例子,虽然创建一个标注语料库不要求必须经受过正规的语言学培训,但如果你对标注涉及的语言学方面有基本的了解,本书对你的帮助会更大一些。一般来说,语法是语言中负责产生良好结构的机制。大多数语言学家认为语法本身是由多个通过认知设计或者用于描述性便利的模块或系统构成的。它们通常包括句法、语义、形态学、音系学(和语音学)以及词汇。除了语法外,关于如何将语言嵌入人类活动的领域包括话语、语用学和篇章结构分析。详解如下:

句法学

研究单词如何组成句子。它包括对词性的研究以及它们是如何组合成更大结构的。

语义学

研究语言中的意义。包括单词间的相互关系以及它们所表达的内容。

形态学

研究语言中有意义的单元。语素是具有意义或功能的最小单元,包括单词、前缀、后缀和其他能够表示意义的单词结构。

音系学

研究某种语言的发音模式。它包括哪些音素是重要且有意义的(即音位);音节是如何构成的;需要哪些特征来描写语言中的离散单元(音段)以及如何解释它们。

语音学

研究人说话的声音以及它们是如何产生和被感知的。音位是个人声音的术语,本质上是人类语音中的最小单位。

词汇

研究语言中所使用的单词和短语,即一种语言的词汇。

话语分析

研究那些通常以对话方式出现的信息交换,特指跨句的信息流。

语用学

研究语境对语言表达的影响,以及哪些方式有助于理解隐含的或预设的含义。

篇章结构分析

研究叙述文或其他文本体裁如何形成更大的篇章结构。

本书通篇将给出多个标注项目的实例,它们将涉及上述列表中不同概念的各种组合。

1.1.2 什么是自然语言处理

自然语言处理(Nature Language Processing,NLP)是计算机科学和工程的一个领域,源自人工智能领域中的语言和计算语言学研究。自然语言处理的目标是设计和创建各种应用系统,这些应用系统使得人和计算机可以直接通过自然语言完成各种交互。自然语言处理的主要应用领域包括:

问答系统

设想,假如你能直接问你的计算机或者手机:在纽约你最喜欢的那家餐厅在周五的晚上何时打烊。提问不是通过键盘笨拙地将文字输入搜索框中,而是用你自己平常的自然语言,无论是英语、汉语或西班牙语,进行提问。(iPhone中的Siri就是此类系统的一个好的尝试,但Siri并不能完全地理解自然语言,它只能理解某些关键短语的子集。)

文档摘要

这个领域包括收集文档或电子邮件并根据其内容生成一个连贯的摘要。也可以用于对较长的文本给出系列快照,甚至直接做成幻灯片。

机器翻译

这是NLP应用的圣杯!它也是该领域中最重要的研究和工程领域。尽管谷歌翻译变得越来越好,但真正有杀伤力的应用软件是一个叫作BabelFish的手机应用软件。当你查找一趟合适的发往北京的火车时,它可以进行实时翻译。

语音识别

这是NLP中最难的问题之一。不断涌现出新的改进模型,可以在智能手机或者计算机上识别口语提问或指令。尽管这些自动语音识别(Automatic Speech Recognition, ASR)系统是通用的,但它们只是在特定领域中工作得很好,并且不允许说话人偏离设定的内容(“请现在说出或输入你的卡号”)。

文档分类

这是NLP最成功的应用之一,该任务的目的是把文档归入合适的类别。在垃圾邮件过滤、新闻分类以及电影评论分类等方面的应用都很成功,原因之一是学习一个用于分类的训练算法的模型相对容易。

如前言所述,在O扲eilly公司出版的另一本书《Natural Language Processing with Python》中描述的自然语言工具包(NLTK)是一个不错的软件包,它提供了上述应用中的许多系统的具体实现。本书的目的之一是提供构建具体语料库(即训练和测试数据)所需要的知识,这些语料库对于开发上述应用系统是必不可少的。

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.

1.3 语言数据和机器学习

我们已经介绍了语言标注方法及其语言数据标注格式的例子,接下来将描述基于这些标注语料库的计算框架,即机器学习。机器学习是人工智能的一个分支,研究如何根据经验和已有数据学习和改善性能的算法。它们学习(或生成)一个函数,将具体的输入数据映射为想要的输出。就我们的目标而言,机器学习算法处理的“数据”是自然语言,最常见的格式是文本,更典型的是标注突显具体特征的标签,这些特征与学习任务相关。正如我们将要看到的,前面所讨论的标注为机器学习流程(训练阶段)提供了丰富的输入数据。

当在自然语言处理中使用标注数据集进行工作时,通常有3种类型的ML算法:

监督学习

监督学习是指任何通过生成一个函数将输入映射到一个预先设定的标签集合(想要的输出)的技术。标签通常是元数据标签,由人通过标注语料库的方式提供,其目的是用于机器学习中的训练过程。

无监督学习

无监督学习是指任何尝试从未标注数据输入集合中发现结构的技术。

半监督学习

半监督学习是指任何通过生成一个函数从已标注数据和未标注数据的输入进行映射的技术,是监督学习和无监督学习的结合。

表1-4列出了机器学习算法的概览以及经常使用这些机器学习算法的一些标注任务。我们将在第7章详细讨论为什么要用这些算法处理不同的任务。

表1-4:标注任务和与之相伴的机器学习算法

算法 任务

聚类 题材分类、垃圾邮件标注

决策树 语义类型或本体类别标注、指代消解

朴素贝叶斯 情感分类、语义类型或本体类别标注

最大熵(MaxEnt) 情感分类、语义类型或本体类别标注

结构化模式归纳(HMM、CRF等) 词性标注、情感分类、词义消歧

你可能会注意到有些任务可以使用多种算法。这是因为不同方法已经成功地用于多个标注任务,而且不同的算法可能会更加有效或效果更差,这取决于你自己语料库中可以使用的相关特征。为了对表中所列的算法有一个初步的认识,本节下面将对主要类别的机器学习方法予以概要介绍。

1.3.1 分类

分类(classification)是为数据集中的单个实体指派类别标签。例如,为了区分电子邮箱中的邮件是垃圾邮件还是非垃圾邮件,一个称为分类器的算法将在一组已标注数据上进行训练。在该已标注数据中,每一个邮件被赋予[+spam]或[-spam]的标签。某些特定(已知)单词或短语的出现有助于识别一个垃圾邮件。本质上,这些词将被视为特征,分类器将用它们来对垃圾邮件的正例以及非垃圾邮件的正例进行对比并建模。另一个分类的例子是根据已知症状和其他属性对疾病进行诊断。此时我们将根据来自病历或其他文档的具体特征,识别病人是否罹患特定的疾病A,并在该病历上标注[+disease-A]或[-disease-A]。这些特征可能包括血压、体重、性别、年龄、症状等。用于解决这些分类任务的最常用算法是最大熵(Maximum Entropy,MaxEnt)、朴素贝叶斯、决策树和支持向量机(Support Vector Machine,SVM)。

1.3.2 聚类

聚类是指无需任何标注或训练从输入数据中寻找自然分组和模式的机器学习算法。该类问题通常被视为无监督学习任务,要么数据集合没有标签,要么标签在聚类过程中被忽略。形成的每个类的成员“在某些方面相似”,而不同类的成员“不相似”。常用的聚类算法包括k均值(k-mean)、层次聚类(hierarchical clustering)、核主成分分析(Kernel Principle Component Analysis)和模糊C均值(Fuzzy C-Means, FCM)。

1.3.3 结构化模式归纳

结构化模式归纳不仅要学习单个实体的标签或类别,还要学习标签序列或标签项之间的其他结构化依存关系。例如,在语音信号中标签序列可能是音素流(在语音识别中);对应于句法单元(短语)的句子中的词性序列;电话交谈中的对话序列;或者诸如句法分析、指代消解或语法归纳之类的任务中的步骤。用于这些问题的算法包括隐马尔科夫模型(HMM)、条件随机场(Conditional Random Field, CRF)和最大熵马尔科夫模型(Maximum Entropy Markov Model, MEMM)。

我们将在第7章中更加深入地详细讨论这些机器学习方法。

1.4 标注开发循环

对具体语言学现象进行编码的特征必须足够丰富,以便捕获训练算法中的预期行为。这些语言学描述通常来自对语言现象的理论建模。这些描述反过来形成了具体语言标注的基础,其自身可以作为特征用于训练和测试文本识别或标注算法的开发循环中。最后,基于对系统性能的分析和评价,语言现象的模型可能需要修改,进而可以重新训练和测试。

我们把这个开发循环称为MATTER方法,如图1-10所示(Pustejovsky 2006)。


图1-10: MATTER循环

建模

结构化描述提供了有理论依据的属性,这些属性来自对数据的经验观察值。

标注

标注方案采用对输入数据的具体结构描述和性质进行编码的特征集合。

训练

使用经过目标特征集标注的语料库对算法进行训练。

测试

在剩余数据上测试算法。

评价

对结果进行标准化的评价。

修改

修改模型和标注规格说明,使标注在算法中使用时具有更好的鲁棒性和可靠性。

假设某个具体问题或现象已经激发了你的兴趣,为此你需要为机器学习的训练标注一些自然语言数据。可以考虑两类问题。首先设想有一个直接的文档分类任务。你可能对根据其内容或某个具体爱好把电子邮件区分为垃圾邮件或非垃圾邮件感兴趣。或者你可能想根据所表达情感的程度对收到的邮件进行排序。

现在让我们思考一个更深入的任务,在这个电子邮件语料库上识别命名实体(Named Entity, NE)。这些与我们现实世界中的日常生活息息相关,包括各种专有名词,如人、国家、产品、节日、公司、体育和宗教等。

最后,设想一个更加复杂的任务,识别邮件中提到的所有不同事件(生日、聚会、音乐会、课程、机票预订和将要召开的会议等)。一旦完成上述工作,你需要为它们“盖时间戳”并进行排序,即标识它们发生的时间、它们实际上是否发生。这类问题称为时间识别问题,是该领域最难的问题之一。

这些不同的任务将贯穿本节以便帮助我们清晰地区分标注开发周期中的不同步骤所涉及的内容。

1.4.1 现象建模

在MATTER开发循环中,第一步是“现象建模”(model the phenomenon)。但是,建模过程所包含的步骤变化范围很大,取决于你自己任务的特性。本节将介绍建模所涉及的方方面面,以及你如何知道你已经形成针对你的任务的相对精确的近似模型。

与创建模型相关联的参数有许多种,很难让不同群体的人就什么是模型达成一致。本节将务实地讨论许多建模方法,展示它们如何为我们提供创建标注数据集的基础。简言之,一个模型是对某些特定现象的抽象描述,它比所要建模的领域中的元素更抽象。为了便于讨论,定义一个包含术语词汇表T、术语之间关系R及其解释I的模型。因此,一个模型M可以视为一个三元组,即M=<T,R,I>。为更好地理解这一概念,让我们回顾之前所介绍的场景。对于垃圾邮件检测,可将它看作一个二元文本分类任务,需要一个最简单的包含两个类别(术语)(即垃圾和非垃圾)的模型,这些类别与整个电子邮件文档相关联。所以,我们的模型很简单:

T={文档类型,垃圾,非垃圾}

R={文档类型::=垃圾|非垃圾}

I={垃圾=“我们不想要的!”,非垃圾=“我们想要的!”}

每个文档本身标注为这些类别中的一个。这就是文档标注(document annotation),而且可能是最简单(且最粗粒度的)的标注。现在,当我们说模型仅仅包含类别(如体育、金融、新闻、社论、时尚等)的标签名时,就意味着不再涉及其他标注。但是,这并不意味着我们不会进一步观察这些文件的内容。例如,将一篇文档标注为类别A,这个文档实际上被视为一个含有大量特征的向量,该向量至少包含该文档中的单词。对同一个任务而言,一个更细粒度的标注可能会标识出文档中的具体单词或短语,并把它们与类别直接关联。第4章将回过来考察这一策略。本质上,对某一现象(任务)设计出好模型的目的在于,这是你开始设计将要在学习算法中使用的特征的地方。特征越好,机器学习算法的性能就会越好!

如前所述,准备一个带有命名实体标注的语料库需要一个比刚才讨论的垃圾邮件过滤器更复杂的模型。前一节曾经介绍了一个带有4种类别的本体,这里我们将它作为从文本中识别命名实体的模型的基础。该模型如下所示:

T={命名实体,组织名,人名,地名,时间}

R={命名实体::=组织名|人名|地名|时间}

I={组织名=“数据库中的组织名列表”,人名=“数据库中的人名列表”,地名=“国家、地理位置名称等”,时间=“日历中所有可能的日期”}

该模型必须更详细,因为实际上我们正在标注一段自然语言文本而不只是简单地标识文档(如电子邮件)为垃圾还是非垃圾。即在一篇文档内我们要识别出被提及的公司、演员、国家和日期。

最后,更复杂的识别文档中所有时间信息(temporal information)的任务将包含哪些内容呢?如下所示的问题:

会议什么时候开始?

约翰休假多久?

Jill升职是在她休产假之前还是之后?

我们不会针对该领域进行完整建模,只是想了解一下为理解这些问题而创建的标注特征,其最低要求是什么。首先,需要区分时间表示(“昨天”、“1月27日”、“星期一”),事件(“升职”、“开会”、“休假”)和时间关系(“之前”、“之后”、“期间”)。由于该模型比较复杂,所以让我们按领域分别叙述:

时间表示::=时间|日期|时间段|集合

时间:上午10:15,3点钟等

日期:星期一,2011年4月

时间段:30分钟,2年,4天

集合:每1小时,每隔1个月

事件:开会,休假,升职,休产假等

时间关系::=之前|之后|期间|等于|重叠|…

在后续章节中,当我们讨论初始模型对你尝试在已标注数据上进行训练的算法的性能产生的影响时,我们将重新回到这个问题。

警告: 在后续章节中,我们将发现实际上可能有多个模型适合描述同一个现象,每个模型都为我们提供了不同的视角。我们称之为现象的多模型标注(multimodel annotation)。多模型标注的一个常见情形涉及拥有领域专家知识(如生物医学知识)的标注者。要求这些标注者根据他们的知识和对某个具体领域的理解,识别文档中的具体实体、事件、属性或事实。基于这种标注,可以让非专业人员标注这些现象的结构化(句法)信息,从而能够获得领域专家知识而又不必强迫领域专家学习语言学理论。

一旦你有了对正在尝试解决问题或与任务相关现象的初始模型,事实上你就拥有了第一个可用于标注工作的标签规格说明(tag specification)。根据规格说明,你可以就如何在语料库中对模型中所定义的特征进行标注制定详细计划。这个计划就是标注指南(annotation guideline),我们将在下文中予以介绍。

1.4.2 按照规格说明进行标注

你对语言现象的建模已编码为规格说明文档,接下来就需要训练标注人员,采用对你有价值的标签对数据集进行标注。但是知易行难,实际工作中经常需要对建模和标注做多次迭代,如图1-11所示。这个过程称为MAMA(建模-标注-建模-标注)循环,或者MATTER循环的“牙牙学语”阶段。标注指南有助于引导标注人1员识别元素,然后当元素识别后将它们与适当的特征相关联。

在标注自然语言数据时,可能涉及两类标签:消耗型(consuming)和非消耗型(nonconsuming)。消耗型标签(consuming tag)指数据集中有实际内容与之相关联(即它消耗某些文本)的元数据标签;相反,非消耗型标签(nonconsuming tag)虽然被插入文件中,但实际上并没有任何文本与之关联。举个例子来说明两者的不同。假设我们要标注文本中的时间信息,即我们想要标注3种标签:时间(称为Timex标签)、时间关系(TempRels)和事件(Event)。在下面例子的第一个句子中,每个标签均直接表示为实际的文本。即它们都是消耗型标签(“升职”标注为Event,“之前”标注为TempRel,“夏天”标注为Timex)。但请注意,在第二个句子中,文本中没有显式的时间关系,虽然我们知道有类似“在”这种关系存在于其中。所以,我们实际上在语料库中插入了一个“在”,并赋之以TempRel标签,但是该标签标识为“非消耗型”标签。

约翰[暑期]Timex[之前]TempRel被[提职]Event。

约翰[星期一]Timex被[提职]Event。

当然,在建立文本标注语料库时一个重要的因素是确保标注人员在使用不同标签进行标注时标注方式应保持一致。一个看起来微不足道的问题在对比标注结果时就会显现出来,即范围或标签跨度。请对比下面3个标注。在第一个标注中,Organization(组织)标签跨越“QBC制造”,漏掉公司标识 “公司”和地理位置“东英格兰”,而这些包含在接下来的两个标注的标注跨度中。

东英格兰[QBC制造]Organization公司

东英格兰[QBC制造公司] Organization

[东英格兰QBC制造公司] Organization

对标注人员而言,这3种标注好像都是对的,但事实上在标注指南中只有一个是正确的。应该如何比较和解决这一问题呢?



图1-11:MATTER循环中MAMA部分的内在工作流程

注意: 为了评价对一个标注任务的定义,我们使用标注人员间标注一致性(Inter-Annotator Agreement, IAA)得分来显示标注人员之间的标注差异。若IAA得分较高,说明任务定义得比较好,而且其他标注人员可以继续进行类似的标注工作。通常使用称为Kappa 统计(Kappa Statistic)的统计度量方法来定义这种标注差异。若在两个标注人员之间进行比较,则通常使用Cohen Kappa;当在多个标注人员间进行比较时,则一般使用Fleiss  Kappa。我们将在第8章给出其定义。

注意,IAA得分高并不必然意味着标注结果是正确的;它只能简单地表明标注人员以相同的方式解释了你的指令。即使IAA得分很高,标注任务也仍然可能需要修改。第9章将继续讨论这个问题。

一旦至少两个人(越多越好,但要求更多的人员通常不可行)对你的语料库进行了标注,就到了创建黄金标准语料库(gold standard corpus)的时候了。黄金标准是标注数据的最终版本。它使用你在标注过程中创建的最新规格说明,根据最新指南正确地完成每一项标注。它也是你将要用于机器学习的语料库,而且它应该已经经过了审核(adjudication)环节的处理。在审核环节中,你(或与你一样对所有任务都很熟悉的人)比对标注结果并决定哪个标签是正确的,然后将它放入黄金标准语料库中。

1.4.3 在语料库上训练和测试算法

既然已经完成了对语料库的审核,接下来可以使用刚刚创建的黄金标准语料库进行机器学习。最常见的做法是把语料库分为两部分:开发语料库(development corpus)和测试语料库(test corpus)。开发语料库又进一步分为两个部分:训练集(training set)和开发-测试集(development-test set)。尽管不同任务的划分比例不相同,但图1-12给出了一种标准的划分方式。文件通常随机地分配到这些集合中。



图1-12:机器学习的语料库划分

训练集用于训练任务中使用的算法,开发-测试集(dev-test)用于错误分析。一旦算法训练结束,它就可以在开发-测试集上运行。如果算法没有正确地对语料库进行标注,就会产生一系列错误。发现错误后,可以调整并重新训练算法,然后再在开发-测试集上测试。不停地重复上述过程直到获得满意的结果。

训练完成后,算法将在预留的测试语料上运行,这些语料库在训练和开发测试中从未使用过。通过使用预留的数据,我们可以知道算法在新数据上的表现,这也是我们对在其他人创建的数据上运行我们算法的期望。图1-13显示了MATTER循环中的“TTER”部分,使用不同的语料库划分和步骤。


图1-13:训练-评价循环

1.4.4 对结果进行评价

 最常用的性能评价方法是计算数据集上标签标注结果的准确率,可使用一个标准的“相关性判断”技术来计算标注正确的数据相对于所有标注数据的比例。该技术称为准确率(precision)和召回率(recall)度量。

接下来介绍它是如何工作的。任给一个用于标识数据元素的标签,可以将数据集合划分为两个子集:一个标注为“相关的”,而另一个标注为“不相关的”。准确率可以计算为算法标注为相关的子集中的正确样本的比例。召回率则可以计算为在实际相关的子集中正确标注的样本的比例。下面给出的混淆矩阵(confusion matrix)可有助于解释这一计算过程:                            

      预测结果   标注结果

                                    正例                     负例

黄金标准 正例(positive) 真正的正例(tp)       错误的负例(fn)

标注结果 负例(negative) 错误的正例(fp)        真正的负例(tn)

有了这个矩阵,我们就能定义准确率和召回率,以及传统定义上的准确率(accuracy),如图1-14所示。


图1-14:准确率和召回率公式

P和R的值经常被合并成一个单一标准,称为F-measure,它是P和R两者的调和平均。


F值在假定准确率和召回率同等重要的前提下给出了一个整体评价结果,但实际使用时取决于语料库和算法的目标。该评价方法的一个变化要点在于,在有些情况下可以认为准确率比召回率更重要,而另一些情况下则反之。第8章将会详细讨论这些公式。

1.4.5 修改模型和算法

在数据上对算法的训练和测试结果进行评价,你还需要对测试结果进行错误分析,判断算法在哪些地方效果良好、在哪些地方表现不佳。第8章将讨论完成这些工作的各种程序包或者公式,包括创建混淆矩阵。这些工作可以帮助你回溯到模型设计阶段,目的是建立更好的标签和特征以便改善之后的黄金标准数据,进而改善学习算法的性能。

在此给出一个简单的模型修改示例。回忆前一节中提到的命名实体抽取模型,我们区分了4种不同类型的实体:组织名、地名、时间和人名。根据你采集的语料库,你可能忽略了一个大的类别或者还应该在某个现有标签下添加一些子类标签。比如,你可能发现标注人员很难区分一些时间或事件,如复活节、9·11或感恩节。这些实体不是简单地表示时间,也许你应该在模型中增加一个新的类别:事件。此外,还有一种情况有必要区分地理地名和非地理地名。伴随“建模-标注”和“训练-测试”循环,一旦在模型上进行了这些增加和修改,MATTER循环将从头开始重来一遍,这种修正通常会带来性能的提升。

总结

本章对语料库和计算语言学的历史以及建立标注语料库的总体方法进行了概述。具体地,包括以下几点:

自然语言标注是训练计算机进行自动问答、机器翻译和自动摘要等人类语言理解任务过程中的重要一步。

从语音到语义再到篇章分析的语言学研究的所有层次,在不同的机器学习任务中以不同的方式组合起来。

为了使标注工作能够提供统计意义上有用的结果,必须对足够大的数据集进行标注,这个数据集称为语料库。使用语料库对语言进行的研究称为语料库语言学。

语料库语言学始于20世纪40年代,但直到数十年之后,当技术能够满足理论上的要求时,才真正成为研究语言的可行方法。

语料库是人类自然语言表示的机器可读文本的集合。好的语料库对它试图代表的语言或题材具有代表性和平衡性。

计算机语料库技术已经发展了许多年,从简单的上下文关键词索引(KWIC)和允许全文本文档检索的对齐到基于统计的机器学习技术。

标注是将更高层次信息充实到语料库的过程,这些信息包括词性标注、句法标注、指代消解和词义标注。通过在语料库中添加这些信息,使计算机可找到合适的特征,从而使已定义任务可以被更容易和更精确地处理。

一旦完成语料库标注,就可以使用机器学习算法进行分类、聚类和模式归纳等任务。

对于依赖于纯文本之外的标注数据的机器学习,好的标注方案和准确的标注非常关键。开发标注语料库常常是一个循环过程,随着对数据的深入分析可能需要对标签集和任务进行多次修改。

标注开发循环称为MATTER循环——建模、标注、训练、测试、评价和修改。

在进入测试循环之前,标注方案(annotation scheme)很可能已经经历了多次建模和标注阶段的修改。

本书将告诉你如何为已选择的任务创建一个正确而有效的标注方案,将该方案应用于你的语料库,然后使用机器学习技术训练计算机来执行你设计的任务。





第2章 

确定目标与选择数据

对标注目标进行清晰的定义对于任何一个以应用于机器学习为目的的工程来说都是至关重要的。在设计标签集、撰写指南、与标注人员一起工作以及训练算法时,很容易因为细节而迷失方向以至于忘记最终想要实现的目标是什么。有一个清晰的目标用于引导方向有助于标注工作,本章将讨论为目标创建一个好的定义需要做些什么,以及目标会以怎样的方式影响数据集。具体地,我们将考察:

好的标注目标是什么

 哪里可以找到相关研究

数据集如何反映标注目标

为标注人员准备数据

应该为标注人员准备多少数据

本章中你需要对以下问题给出清晰的答案:“我正在尝试做什么?”、“我正在尝试以怎样的方式去完成它?”以及“哪些资源最适合我的需要?”在沿着MATTER循环前进时,对这些问题的答案很可能会改变(语料库建设是一个迭代过程),但是拥有明确的目标将有助于防止偏离轨道。

2.1 定义目标

依据MATTER循环,当前我们正处于“M”的起点——清晰地说明你希望在语料库中进行哪些标注是建立模型的第一个步骤。对于将要进行的标注,你可能已经有好的想法,就如何形成一个好的目标定位以便帮助你在MATTER循环的后续阶段中持续聚焦,本节将给出一些线索。

我们发现可以将目标定位分成两个步骤:第一,对目标进行陈述,以便覆盖标注任务的基本要素;第二,使用这个陈述在关于目标的“怎么样”问题上进一步展开。本节的剩余部分,我们将就如何确定每一部分是否有助于标注任务给出答案。

2.1.1 目标陈述

在此假定你已经有一些想要探索的关于自然语言的问题。(如果你的头脑中还没有一个现成的计划,你可以到附录中查看现有语料库的列表,阅读相关会议的论文集以便寻找你所感兴趣的题目,或者考虑参加自然语言处理竞赛,后者我们将在本章的稍后部分

讨论。)

你能够清晰地阐述你想要做什么吗?如果你不能想出包含一两个句子的概述来描述你的研究目标,在标注任务的剩余部分你将面临许多困难。请注意我们不是在谈论“题材是有趣的”之类的句子——这是一个意见,不能作为标注任务的起点。尝试给出一个类似如下句子的陈述:

 我想用关键词来识别报纸的题材以便建立分类文本数据库。

在形成标注模型之前,这个陈述仍然需要进一步改进,但是它已经对基本问题做出了回答。具体地,它阐述了如下问题:

这个标注工作将用作何种用途(数据库)

标注工作的最终结果是什么(题材分类)

语料库的来源是什么(报纸)

通过何种途径产生标注结果(关键词)

请注意你想要进行的任务可能需要大量的标注工作。例如,假定你对研究幽默感兴趣。即使你拥有时间、金钱和人力来对幽默的各个方面进行综合研究,你仍然需要将任务分解成可以控制的多个部分以便为不同类型的幽默分别进行标注。如果你想了解讽刺和双关语的作用,你可以为每个任务使用不同的词汇表,或者愿意花时间创建一个覆盖所有标注内容的总体标注规格说明,但是我们建议,如果可能,先从小的标注任务开始,再将多个小的标注任务合并起来。

如果你的确有一个宽泛的标注任务需要分解成多个子任务,那么应该在你的概述中清楚地表述:“我想创建一个计划来生成文本和语音形式的笑话,包括双关语、讽刺和夸张。”列表中的每一项都形成一个独立的标注任务和机器学习任务。至少,在开始时将它们组合在一起将使任务变得过于复杂,以至于难以完成标注,更不用说从标注结果中进行机器学习了。

为提供更多上下文,表2-1中给出了更多的仅包含一个句子的概述,用于说明标注工程和已有语料库的多样性。

表 2-1:部分语料库及其用途

语料库 概述

命题库(PropBank) 用于标注动词性命题和命题中的论元及论元所充当的语义角色

手工标注子语料库 用于标注句子边界、词例、词自,词性,名词以及动词语块以及命名实

(Manually Annotated 体。它是美国国家开放语料库(Open American National Corpus, Sub-Corpus, MASC) OANC)的一个子集

宾州话语树库 用于标注新闻文本中事件与命题之间的话语关系,为了学习自然语言 (Penn Discourse TreeBank) 中的话语服务

MPQA意义语料库 用于标注意见,服务于语言的情感分析

(MPQA Opinion Corpus)

时间库(TimeBank) 用于标注新闻文本中的时间、事件以及两者之间的关系,服务于时间 推理

I2b2 2008 竞赛, 任务1C 从医疗记录中判断病人抽烟状态,以便用于医疗研究

(i2b2 2008 Challenge,

 Task 1C)

2012语义评价任务7—— 提供对问题的可选答案;标注工作集中于基于推理寻找最可能的答案

COPA:合理替代的选择

(2012 SemEval Task 7—

COPA: Choice of Plausible 

Alternatives)

自然,这并不是一个完整的语料库列表,但是它的确覆盖了不同类型的标注任务。这里没有提供对语料库内容的详细描述,仅回答了推进标注任务所必须面对的一些基本问题。在下一节中,我们将讨论如何将一句话转变为一个标注模型。

2.1.2 提炼目标:信息量与正确性

既然你已经有了语料库的目标陈述,你需要将它转变为任务描述,以便用于创建模型,即标注方案和指南。

在标注语料库时,需要把握好两种情况的界线,一种是进行对任务最有用的标注(信息量高度丰富),另一种是使标注工作对于标注人员来说不会太困难(使标注结果正确性更高)。

一个需要在两者之间权衡的例子是时间信息标注(temporal annotation)。假定你想将这个简单陈述中的所有时间与事件之间的关系都表示出来。

On Tuesday, Pat jogged after work, then went home and made dinner.

图2-1显示了标注所有可能关系时显示出来的样子,从中可以发现为表示时间和事件之间的所有关系需要添加大量的链接。在这些任务中,关系的数量几乎是时间和事件数量之和的二次方(这里有10个关系,因为链接是单向的——如果考虑两个方向,那么将得到20个链接:x * (x ?1),其中x是句子中时间和事件数量之和)。要求标注人员手工完成所有这些标注工作是不切实际的,这样的任务需要耗费难以想象长的时间,如此复杂的标注工作也必然存在大量的错误和遗漏——换言之,低正确率。但是,要求标注有限集合的关系则会导致较低水平的信息量,特别是如果标注指南没有非常认真撰写。我们将在第6章中进一步讨论标注指南。


图 2-1:事件和时间之间的所有时间关系

注意: 你可能已经意识到,在这个具体例子中没有必要由人来创建所有的链接——如果A发生在B之前,且B发生在C之前,那么计算机可以依据封闭规则(closure rule)判断出A发生在C之前这个信息,因此标注人员没有必要手工标注该信息。观察任务的哪些部分可以自动完成是一个好主意,尤其是当这样做可以使标注人员的工作变得更简单而没有必要在准确率方面做出任何牺牲时。

围绕信息量与正确性的思考与一个影响标注任务的最大因素密切相关,这个因素就是标注项目的范围。对于标注项目来说有两个角度的范围需要考虑:(1)目标多么深远(标注工作的范围);(2)计划覆盖多少领域(语料库的范围)。我们已经在前一节中稍微谈讨论了(2),并且在以后将会就此做更多的讨论,因此现在将主要考虑(1)。

标注任务的范围

现在你已经通过回答前一节中的4个问题开始处理任务范围这个问题——至少已经将问题缩小为将使用哪些类型的特征(通过回答“达到目标的途径”)和标注的整体目标是什么。但是,将标注任务归入一个一般类后,仍然有大量因素需要考虑。

注意: 一如既往,请谨记MATTER循环实际上是一个循环,因此在循环中前进时,可能会发现导致范围扩大或收缩的新的信息。

使用一般术语来讨论范围是比较困难的,所以让我们来考察一些具体的例子以便了解这些原理如何能够应用于其他的标注项目。在前面讨论的时间信息标注任务中,标注项目的范围与哪些关系对标注工作更重要密切相关。每个句子中的主要事件及其关系更重要吗?只描写句子内部的关系,还是同时描写句子之间的关系?或许你仅仅对具有清晰时间点的事件感兴趣,例如“Jay ran on Sunday”。你认为有必要区分不同类型的链接呢?

在报纸题材分类这个例子中,同样存在类似的问题。在这个任务中,相关的问题是“你希望类型具体到何种程度?”将文章分到较宽的类型(比如“新闻”、“体育”)够吗,还是需要更细致的分类系统,具体到“新闻:全球”和“体育:垒球”(或者甚至“体育:垒球:扬基队”)这样的类型?

注意: 如果这是你首次从事标注和语料库构建工作,你可以从更宽泛的类或者更简单的任务开始——当你熟悉了数据集的复杂细节和标签集时,能够以更有意义和有用的方式对标注项目做进一步的提炼。

如你所见,关于这两个例子的问题现在本质上都变成了关于分类的问题——在报纸分类这个例子中这种相关关系更为明显,但即使在时间关系这个例子中也触及这一主题。通过定义不同的可能关系类型(句间和句内、主动词和其他动词),更容易识别哪些部分与标注任务更相关。

本书是关于标注的,因此如果你有一个标注项目,那么分类就是它的一个部分。这可能涉及文档级的标签,如报纸分类;或者给每个词(或者部分词语)关联一个标签,如词性标注任务;或者在已有的标签之间标注关系。如果你能够将标注任务作为一个分类任务来思考,那么你已经有一个稳固的框架来开始考虑标注任务的范围。在确定哪些特征与数据和标注任务相关时,你可能已经有一些直觉,因此使用这些(起码在初始时)来决定标注任务的范围。这种直觉也能帮助你决定哪个层次的信息量是好的分类结果所需要的,以及你期望标注人员达到何种准确率。

警告: 在开始思考一个主题时,语言直觉是一个特别有效的方式,但它也可能造成误导甚至错误。当你已经开始收集文本并进行一些标注时,如果你发现这些数据并不能契合你的预期,请毫不犹豫地重新评估你的方法。

让我们重新回到前一节的4个问题,看看信息量和正确性如何对在详细说明标注任务的这些方面产生影响。既然你对标注任务的范围已经有了更好的想法,那么就更容易明白在回答这些问题时应该考虑哪些事情。(请注意我们并没有说这些问题易于回答——在信息量和正确性之间权衡是所有层面都需要考虑的问题,在标注工作中往往很难判断到底如何进行取舍。)

标注工作的用途

基于目前已经进行的讨论,这一问题的回答并没有真正地改变过——标注、训练和测试的最终产品是你进行这项标注任务最重要的原因,也是最终对其余问题给出回答的关键。但是,在开始为其他问题给出答案前,时刻提醒自己正在尽力做什么将会对整个工作有所帮助。

如果你对将要使用的机器学习技术有所了解,那么此时也可以将它考虑进来,但这并不是必需的,特别是当你正处在MATTER循环的第一轮中时。

标注工作的最终结果是什么

从分类问题的角度来思考标注工作的范围,现在可以开始描述最终结果所涉及的具体类型。我们不说“将报纸文章分为不同的题材”,而是尝试决定覆盖你感兴趣的所有文章类型需要的题材数量。

警告: 标注任务使用的类型越多,训练高准确度的机器学习算法就可能会越困难。这并不一定意味着一开始就需要对标注工作进行限制,但是在以后的MATTER循环的迭代中,你可能发现需要将某些类型合并。

由于前述原因(可参考图2-1来了解这个任务可能复杂到什么程度),精度与信息量的平衡对于时序关系标注来说是一个需要考虑的重要问题。在这个例子,以及其他相同复杂度的任务中,标注方案的详细程度可能需要经过多轮标注和评价的迭代才能最终得出结论。

对于这两个任务,考虑期望实现的标注结果将有助于回答这个问题。在题材标注任务中,数据库的使用是主要的考虑要点——谁会使用它,为什么使用它?时间标注可用于许多场合,例如文本摘要、时间线(timeline)创建、自动问答等。任务粒度(granularity of the task)也会告诉我们在标注中应该揭示哪些信息。例如,如果你对文本中的主要事件的自动摘要感兴趣,那么你只标注句子中的主要事件之间的关系可能就足够了。

语料库的来源是哪里

既然你已经考虑了标注任务的范围,那么关于语料库范围的具体问题就容易回答了。具体地,可以开始思考来源的分布。换言之,你的数据将来自哪里,怎样对不同的方面进行平衡。

回到报纸分类的例子,考虑是否不同的新闻发表媒介风格差异足够大,使得我们需要训练一个算法来对它们进行区分,或者如果某个来源与其他来源足够相似,那么我们的算法可以将它们识别为一类。《纽约时报》的文章和主题与《华尔街日报》的足够相似,使得我们不需要分别从中选择例子。报纸与那些在线出版的杂志之间呢?你将博客视为新闻来源吗?你将只收录书面文章,还是同时考虑广播录音文本?

对于时间标注,我们的经验是不同的出版物类型和题材对时间在文本中的使用有巨大的影响。如果把儿童故事与报纸文章进行比较,两者中的叙事将表现出什么样的差异?如果你想让你的最终产品覆盖所有类型的来源,这可能是你任务的又一个分裂点——对于不同的叙事题材,你可能需要不同的标注指南,所以应该考虑到底希望使标注任务覆盖多大的范围。

显而易见,这些考虑与任务范围密切相联——范围越大,为使信息量最大化就需要将越多的来源包括到标注任务中。然而,所包括的来源差异越大,就越有可能需要为每个来源设置略有不同的标注任务,如果没有仔细地为每个类型设定任务,就可能导致正确性降低。

查看可能适合你的标注任务的现有语料库的文本也是一个好主意。使用已整理好的语料库(或者一个子集)的明显好处是可以减少你自己需要进行的工作,但是也意味着你还需要使用已经在这些文件上进行的其他类型的标注。参看2.2节中关于语言资源的更多信息。

警告: 不要在一开始就陷入建立完美语料库的理想之中——请记住标注过程是循环的,如果你发现遗漏了一些信息,可以在以后再返回到前面的步骤中时将这些信息补充上。

通过何种途径产生标注结果

在第1章中,我们讨论了语言学层次(音系学、句法学、语义学等),并且为每个层次给出了一些标注任务作为例子。此时,可以开始考虑标注任务应该归入哪个层次,如果你还没有这么做。但是,不要试图使标注任务仅仅处理单一的语言学层次。标注工作与语料库并不总是能够很好地归入一个或者另一个层次,你自己的标注任务很可能也是

如此。

例如,我们在前面用作例子的时间信息标注任务可以很好地归入话语和文本结构层次,但是它还需要依赖于已经标注好的事件和时间。但什么是事件呢?事件通常是动词(“He ran down the street.”),但也可以是名词(“The election was fiercely contested”),或者甚至是形容词,取决于它们是否能表现变化的状态(“The volcano was dormant for centuries before the eruption”)。但是标注事件不是一个纯粹的句法任务,因为(1)不是所有的名词、动词和形容词都是事件,而且(2)单词的上下文决定它是否表示事件。考虑“The party lasted until 10”和“The political party solicited funds for the campaign”这两个句子。这些例子向事件标注中增加了语义成分。

很可能,你自己的标注任务也会受益于融合不同层次的语言学信息。词性标注是一个明显的可以作为附加信息在自然语言处理算法中带来巨大影响的例子:已知单词的词性能帮助进行词义消歧(“call the police”与“police the neighborhood”),判断词语如何发音(思考动词“present”和名词“present”的发音差异——这是美式英语的常见模式),等等。

当然,通常能找到一种折中方案:标注任务所包含的层次(或者层次的一部分——没有必要为所有数据添加词性标签,只需在对判断其他信息有用时加上即可)越多,它所能提供的信息就越丰富。另一方面,任务越复杂,标注人员就越可能感到困惑,进而导致准确率降低。此外,请谨记MATTER是一个循环,因此需要通过试验来判断哪种方案最适合你的标注任务。

2.2 背景研究

既然你已经考虑了哪些语言学层次适合标注任务,那么可以对相关研究工作进行了解。虽然建立标注语料库要花费许多工夫,完全由自己单独地完成一个好的标注任务也是可能的,但是首先了解业界的相关研究与发展现状将可以节省大量的时间和精力。很可能已有的一些研究与你正在进行的工作有关,从而使你不必一切从头做起。

例如,如果对时间标注感兴趣,现在ISO-TimeML已成为时间与事件标注方面(包括时间关系)的国际标准化组织标准。这一事实并不要求所有的时间标注都必须原样不动地使用ISO-TimeML的标注方案。在诸如医学和生物医学文本分析的领域中,TimeML可作为有用的起点,但是在有些情况下它给标注人员提供了太多的选项,在另一些情况下则没有覆盖与所在领域相关的一些特殊用例。了解其他人在已有的标注方案中进行的工作,特别是与你的标注计划直接相关的工作,可使你自己的标注任务的规划变得更加

容易。

图书馆和谷歌经常能够提供好的信息来源,但可能并没有提供关于标注项目的最新信息,主要因为计算语言学领域最主要的论文发表途径是会议及其相关的研讨会。在下面的几节中我们将给出一些比较有价值的组织与研讨会的相关信息。

2.2.1 语言资源

目前有一些来源可以提供预装的语料库。例如,语言数据联盟(Linguistic Data Consortium, LDC)有一个包含成百上千个语料库的集合,覆盖文本和语音数据,涉及多种语言。其中的大部分语料库非会员均可获取(有时需要支付一定费用),但有一部分必须是LDC会员才能使用。语言数据联盟由宾夕法尼亚大学负责维护运行,涉及会员资源和语料库价格的细节问题在其网站上均有详细解答。

欧洲语言资源协会(European Language Resources Association, ELRA)是另一个重要的语料库来源,它同样包含来自多种语言的口语和书面语语料库。与LDC一样,申请成为ELRA会员后,即可获取整个资源库的访问权,当然也可以仅仅使用其中某个语料库。更多信息可从ELRA网站上获取。

另一个有用的来源是语言资源与评价(Linguistic Resources and Evaluation, LRE)地图,它可以提供过去若干年中提交给语言资源与评价会议(Linguistic Resources and Evaluation Conference, LREC)的论文中所使用的全部资源。但是,这一列表未经确认,因此并不是所有入口都是有效的。关于这一映像的语料库和标注资源的缩减版可从本书的附录中找到。

获得一个最新版本的语料库往往需要支付一定的费用,但是借助LDC和ELRA,有可能免费下载该语料库的一个更早版本。所以,在研究资金匮乏时寻求替代性获取方式是有价值的。无论从何处获取,均应对将要使用的语料库进行许可检查,以保证可以合法地使用。

2.2.2 机构与会议

许多面向公众开放使用的标注工作都是在大学里完成的,这使得会议论文集成为获取相关标注任务信息的最佳起点。下面列举了一些研究语料标注与语料库的较大会议及对这些主题感兴趣的学术组织。

计算语言学协会(Association for Computational Linguistics, ACL)

电气和电子工程师学会(Institute of Electrical and Electronics Engineer, IEEE)

语言资源与评价会议(Language Resources and Evaluation Conference, LREC)

欧洲语言资源协会(European Language Resources Association, ELRA)

国际计算语言学会议(Conference on Computational Linguistics, COLING)

美国医学信息学协会(American Medical Informatics Association, AMIA)

LINGUIST目录并不是发起会议与研讨会的组织,但它持续提供相关会议的最新征稿与日期信息,也提供可根据语言学层次排序的语言学组织列表。

2.2.3 自然语言处理竞赛

在过去的多年中,由研讨会主办的自然语言处理竞赛越来越常见。这些竞赛通常给出一个语言学问题、一个训练和测试数据集,并要求参赛队或个体参赛者在一个有限的时间内开发出算法或规则集以便在测试集上取得尽可能好的结果。

这些竞赛主题范围广泛,从词性标注到词义消歧和生物医学文本分析,并且不局限于英语。主要的相关研讨会包括:

SemEval

该研讨会作为ACL年会的一个组成部分每3年举办一次。它涉及词义消歧、时间与空间推理和机器翻译在内的多种竞赛。

自然语言学习会议(Conference on Natural Language Learning, CoNLL)共享任务

这是由国际计算语言学协会自然语言学习特别兴趣组主办的自然语言处理竞赛,每年一次。每年,它选择一个新的自然语言处理任务举办竞赛。已进行的竞赛包括不确定性检测、句法和语义依存分析和多语言处理等。

i2b2自然语言处理共享任务

i2b2组关注医学领域中的自然语言处理,每年举办关于病人档案信息推理方面的竞赛。过去的竞赛集中于疾病、吸烟状态和药物信息识别方面。

还有其他一些可供参加的共享任务和竞赛:NIST TREC Tracks每年举办一次,BioNLP研讨会也经常举办共享任务,还有更多的其他任务。如果你想进行某项机器学习任务,但并不希望亲自构造一个标注数据集,签约参加一个此类竞赛是融入自然语言处理社区的一个好方式。自然语言处理竞赛的用处还在于在缺乏时间和资金支持的情况下可以为某些任务提供较好的参考。然而,需要注意的是,自然语言处理竞赛面临的时间限制意味着所得到的结果就整体而言可能并不是最好的,而仅仅是在给定时间和数据前提下的最佳。

2.3 整合数据集

我们已经讨论整合数据集时需要考虑的一些问题:标注任务的范围、已有语料库是否含有对你有用的文档与标注信息、数据来源的多样化。

如果你计划将你的数据集公开,请确定你已经拥有对所标注信息向第三方重新发布的许可。有时可以仅发布独立的标注信息和从网站上收集数据的代码段,但最佳且最简单的方式是直接向内容提供者申请许可,尤其是当语料库和标注信息将用于商业而不是纯粹的教育目的时。

语料库构建指南

语料库语言学家John Sinclair(约翰·辛克莱尔)就构建语言学语料库提出了一些指南。尽管这些指南主要针对设计以语言现象研究为目的的语料库,但它们对任何构建语料库感兴趣的人都会有所帮助。论文全文可从http://www.ahds.ac.uk/creating/guides/linguistic-corpora/chapter1.htm下载,为方便起见,在此列出其中的指南:

1. 选择语料库的内容时不应该取决于它们所包含的语言,而主要依据其在社区中的交流功能。

2. 语料库创建者应该努力使他们的语料库尽可能代表它所来自的语言或语言

场景。

3. 只有那些已经设计成可独立比较的语料库的组成部分才应该是可比较的。

4. 决定语料库结构的准则在数量上应该比较少,彼此可以清晰地区分开,并且作为一个整体时能够有效地描写能够代表某种语言或语言变体的语料库。

5. 除了构成文本的词语和标点外,其他任何与文本有关的信息均应与纯文本分开存储,而且在需要时能够将两者合并起来。

6. 在可能的情况下,语料库中的语言样本应该由完整的文章、完整言语事件的转写文本或者尽可能接近于这一目标的其他形式组成。这意味着样本在长度上可能有较大的差别。

7. 语料库的设计与构成应该与那些形成这些决定过程中的讨论内容与论据一起完整地归档。

8. 语料库创建者应该将保持代表性与平衡性作为目标。尽管这些不是可精确定义和可实现的目标,但我们必须将它们用于指导语料库的设计和内容的选择。

9. 语料库题材方面的任何限制应该通过使用显式的而非隐含的准则予以明示。

10. 语料库的各个成分应该在保持足够覆盖范围的同时具有同质性,还应避免收录含有色情内容的文本。

2.3.1 理想的语料库:代表性与平衡性

在语料库语言学中,“代表性与平衡性”经常用于描述构建语料库时应该作为目标的那些特性。因为一个语料库永远只能是一种语言的选择性子集,而不可能包含某种语言所有可能使用的所有例子。因此,应该通过对某种语言的文本进行抽样的方式来建立语料库。由于任何一种抽样方法都不可避免地存在偏差,所以应尽力确保语料库能够代表总体样本更大范围内的变化性(Biber 1993)。用于抽样的“总体”取决于标注任务的目标和范围。例如,如果你想研究电影评论,就不需要考虑收录其他方面的评论和作品。然而,你的确需要确定在你的数据集中对不同类型的评论都提供了相应的例子。McEnery等(2006:19-22)就语言抽样问题提供了极好的论述。

创建语料库过程中另一个重要的概念是平衡性。Sinclair(2005)以这样的方式描述语料库的平衡性:它包含的不同类型文本的比例应该与有依据的和基于直觉的判断相一致。这一点主要适用于从不同类型文本进行采样的语料库。例如,用于反映美式英语的语料库必须包括所有类型的书面和口语文本,从报纸文章到聊天室讨论再到电视录音文本、图书样本等。预先确定仅收录较少样本的语料库比较易于达到平衡的目标,因为在这种前提下语料库需要考虑的文本类型范围比较少,但是相应地该语料库在普通研究中的可用性也会减少。

无可否认地,代表性与平衡性的概念难以定义,语料库语言学家已经就任何语料库是否真正具有代表性的问题进行了多年的争论。考虑语料库和世界的哪些方面可能对数据集是否可以认为具有“代表性和平衡性”产生影响,是一个可以衡量它对于其他标注工作和机器学习任务是否有用的好方法,也有助于确保得到的结果最大限度地适用于其他数据集。

注意: 需要考虑的一个重要问题是,语料库是否与任务目标相匹配。如果目标是能够处理任何电影评论,那么需要让语料库充分地反映电影评论在现实世界中的分布。这将有助于训练出能够更准确地对以后给出的评论进行自动标注的算法。

2.3.2 从因特网上收集数据

如果你正在进行文本标注,你或许将从因特网上收集语料库。有许多优秀的书籍可以提供如何从网站以及推特、论坛和其他因特网资源上收集网址、超文本标记语(HTML)标签的具体方法。这里我们将就其中一些方法稍做介绍。

Steven Bird、Ewan Klein和Edward Loper所著的《Natural Language Processing with Python》(Python自然语言处理)一书(O扲eilly出版社)提供了一些用于直接从因特网导入文本和网络数据的基本指令。例如,如果你想从古滕贝格工程图书馆(Project Gutenberg library)中的某一本书中收集文本,那么过程是非常简单的(如该书所述):

>>> from urllib import urlopen

>>> url = "http://www.gutenberg.org/files/2554/2554.txt"

>>> raw = urlopen(url).read()

但是,你应该知道一些网站禁止这样的程序下载其内容,因此你需要找到其他一些可以下载数据的方法。

如果你想从HTML页面中提取未加工的文本,NLTK已经为你提供了一个可以用于清除HTML的程序包。

>>> url = "http://www.bbc.co.uk/news/world-us-canada-18963939"

>>> html = urlopen(url).read()

>>> raw = nltk.clean_html(html)

《Natural Language Processing with Python》(Python自然语言处理)一书的第11章提供了从其他来源(比如Word文件、数据库和电子表格)收集数据的信息与资源。

在从推特和博客之类的其他网络数据源中获取信息方面,Matthew A. Russell所著的《Ming the Social Web》(社会网络挖掘)一书提供了较详细的信息,包括使用推特API的方法以及从电子邮件、LinkedIn和博客等挖掘信息的资源。

2.3.3 从人群中获取数据

迄今为止,我们一直假定你将要标注的文本或记录已经存在。但是在某些任务中,数据并不是原本就有的,或者至少没有以一种可以为我们所用的形式存在着。

我们认为,这种情况通常发生在那些要求对口语或视觉现象进行标注的场景中,而较少发生在书面语场景中——就文本来说,除非你要寻找一些很特别的东西,要求人们为你专门撰写某类文章的情况极为罕见。但是,需要口语样本、言语或者运动识别类行为记录的情况却很常见。

警告: 如果你的确需要从人们身上获取一些数据,并且你工作在大学或者企业中,你或许将不得不从律师甚至是内部审查委员会那里寻求许可。即使你正在进行自己的研究项目,你也必须让参与的志愿者清楚地知晓他们将要做什么以及为什么要求他们做这些工作。

当获取数据时(而不只是收集数据),有一些事情需要考虑:尤其是,你需要数据以自然的方式产生,或者以诵读的方式产生?要求每个人说相同的东西?让我们看看这些方式的不同之处是什么,以及将怎样影响数据。

朗读语言

朗读语言指的是在收集数据时,要求每个人朗读相同的句子或者单词的集合。例如,如果你想比较不同的方言或者口音,或者你想训练一个语音识别程序来检测什么时候人们在说同样的东西,那么这可能就是你使用朗读语言这种模式的合适场景。

VoxForge语料库使用这种方式——它提供了一系列提示使说话者可以自己录音,然后提交结果,每个说话者都提供一个用户描述来说明其语言背景。

注意: 如果你决定让人们来朗读提词器上的文本,那么一定要弄清楚文本呈现的形式(字体、黑体、斜体)怎样影响文本朗读的方式。你可能需要进行一些测试来确定你的朗读者给你的录音是有效的。

新闻广播的录音也能视为“朗读语言”,但是请注意——新闻主播的韵律与常规语音往往有较大的不同,因此这些录音可能并不有效,具体如何要取决于你的目标。

关于WSJCAM0语料库数据收集过程的详细说明可从http://www.ldc.upenn.edu/Catalog/readme_files/wsjcam0/wsjcam0.html上获取。

自发语言

自然地,自发语音是在事先不告诉说话者说话内容的情况下收集的语言内容。收集时可以问说话人一些可自由发挥的问题,并且记录他们的应答,或者简单地记录会话内容(当然,是在得到许可的前提下)。

2.4 语料库的规模

既然你已经知道想要寻找何种类型的数据以及如何表现它,那么你还需要决定实际需要收集与标注多少数据。如果你计划使用一个已有的语料库,那么语料库的总规模已经确定,但是你可能仍然需要决定对语料库的多少内容进行标注。

一般而言,无论标注目标是什么,收集与标注的数据越多,就离达成目标越近。然而,在多数情况下,在讨论语言标注任务时“越大越好”并不是切实可行的——时间、金钱、有限的资源以及精力都可能是限制你和你的标注人员能完成标注规模的因素。

注意: 如果这是你收集数据工作的第一轮,那么最重要的事情是产生一个包含与任务有关的所有现象例子的样本语料库。

也就是说,我们建议在第一次进行文档标注时从较小的规模开始——首先为标注人员选择少量的文档,看看标注任务与标注指南是否合适(标注指南将在第6章中讨论)。一旦你已经解决了一些问题,就可以返回到前面的步骤中并在需要时增加语料库。

不幸的是,我们无法给你一个具体的数字来决定语料库需要达到多大规模才能取得好的结果,这种魔幻数字并不存在。语料库规模的大小很大程度上取决于标注任务的复杂程度,但是即使有办法量化标注方案中的“复杂度”也不能解决所有问题。然而,已在使用中的语料库可以为我们提供一些经验法则帮助判断应该计划构建多大的语

料库。

2.4.1 现有语料库

在决定语料库规模时一个简单的经验法则是考察正在类似任务中使用的现有语料库。表2-2显示了到现在为止我们已经讨论的一些语料库的规模。如你所见,它们并没有全部使用相同的标准来衡量语料库规模。这在很大程度上取决于语料库的目标——用于文档级评价的语料库(比如自然语言处理工具箱(Natural Language Toolkit, NLTK)中的电影评论)一般提供文档数作为参考,而以单词或者短语为基本单位的标注任务则通常将报告单词或短语的数量作为衡量标准。

表2-2:依据估计的大小排序的现有语料库

语料库 估计的大小

ClueWeb09 1 040 809 705个网页

英国国家语料库 1亿个单词

美国国家语料库 2200万个单词(截至本书写作时)

TempEval2(SemEval2010的一部分) 每种语言数据集包含1万~6万个词例

宾州话语树库 100万个单词

i2b2 2008竞赛——吸烟状态 502份医院治疗报告

TimeBank 1.2 183份文档;61 000个词例

情感歧义形容词消歧(中文数据,SemEval 2010 4 000个句子

的一个部分)

你可能已注意到,后面3个语料库的规模比其他语料库小——这是因为这3个语料库主要用于自然语言处理竞赛中,竞赛的内容是在有限时间内执行某个自然语言处理机器学习任务。这个限制也包括用于构建训练和测试数据集的时间。为保证标注工作的可行性,语料库的规模就不可能太大,而且有时候标注方案也可能会简化。但是,这些竞赛的结果常常没有将更多时间用于构建规模更大、标注质量更高语料库情况下的结果好。

2.4.2 语料库内部的分布

前面我们曾经提到过,为了增加信息量应将多种类型的数据收入语料库中。这里我们将展示一些例子来说明已有语料库中不同来源数据的分布。

例如,TimeBank是一个包含183篇新闻文章的集合,所有文章均标注了时间和事件信息。然而,TimeBank中的所有文章并不是以同样的方式产生的:有些是广播转写文本,有些是日报文章,还有一些是为新闻专线广播而写的文章。类型分布的情况如图2-2所示。

如你所见,虽然语料库大量收录了日报文章,但也体现了其他数据来源。包含这些不同来源的数据可以帮助我们了解在类似但并不相同的媒介中如何表示时间和事件。


图2-2:TimeBank数据来源分布

英国国家语料库(BNC)是另一个包含多源数据的语料库——数据来源的差异比TimeBank还要大。图2-3显示了BNC中的文本类型的分布,与BNC的参考指南中所描述的一样。


图2-3:BNC中的文本类型的分布

自然地,在评价一个语料库的平衡性时还可以考虑其他的分布角度。BNC还提供了基于出版日期、领域、媒介以及包括作者信息和预期听众在内的子类分析的语料库分析(如图2-4所示)。


图2-4:BNC中的出版日期

对于语料库来说,不太可能考虑覆盖所有这些可能类型的代表样本。换言之,使可能带来差异的影响降至最低是一个好的策略,尤其是当你刚刚开始从事标注工作时。比如,确定所有文本均来自同一时期,或者核实所有的说话者均是你要求他们所说语言的母语者都是你可能需要考虑的事情,即使你最终决定在你的语料库中不包括这种差异。

总结

本章讨论了创建好的目标定义时需要考虑的关键因素,以及目标怎样影响数据集。具体地,我们考察了以下要点:

对标注任务的目标给出清晰的定义有助于使你在开始创建任务定义和撰写标注指南时行驶在正确的轨道上。

在标注任务中往往需要在信息量与正确性之间寻求平衡——请注意,一定不能为了迎合某一方面而过多地牺牲另一方面。

清晰地定义标注任务的范围将使语料库来源的选择变得更加容易,在以后还将使确定标签集和撰写标注指南变得更加容易。

进行一些背景研究能帮助你在进行自己的标注任务时避免重复已有的工作。

利用现有语料库作为数据集会使其他必要的分析变得更加简单。

如果现有语料库不能适应你的需要,那么可以自行构建一个新的语料库,但请仔细考虑到底需要什么样的数据以及哪些因素可能使任务变得复杂?

现有的各种工具和编程语言能帮助你从因特网上收集数据。

你打算呈现给标注人员的信息将是影响标注的一个重要因素,尤其是在那些比较依赖标注人员的主观意见或者是对文本的主观解读而非客观事实的任务中。





第3章 

语料库分析

既然你已经成功地为自己定义的目标建立了一个语料库,那么接下来的一个重要工作就是探究这个语料库包含了哪些信息。本章的目的是为你介绍一些可用于分析语料库的语言学内容的工具。因此,我们将为你介绍各种可用于在语料库上完成各种统计分析的技术和工具。

为此,我们将从语言学的角度介绍一些统计和概率知识。我们称这个领域为语料库分析(corpus analytics)。具体包括以下内容:

如何计算单词出现的基本频率,分别根据词型和词例(token)。

如何把要分析的数据标准化。

如何测量语料库中单词与短语之间的相关性(即分布)。

了解语料库中所包含的信息能帮助你创建模型来自动识别标签(它们将在下一章创建)。我们将尽可能使用语言学方面的例子引入这些概念。在本章中,我们将使用一个电影评论语料库,它是从IMDb.com(IMDb)上收集的。这个语料库将为我们介绍本章中的概念和方法带来便利。

统计之所以重要有多方面的原因,但最重要的是能给我们以下两种能力:

数据分析

发现数据集合中的潜在性质。

推断统计的重要性

允许我们根据语料库的内容做出判断并获得信息。

本章的确会提供用于分析语料库的统计知识的概要介绍,但不会给出完整的统计或概率教程。如果你想了解更多的相关知识,尤其是语料库语言学方面的知识,我们为你推荐下列书籍和论文:

Probability for Linguists. John Goldsmith. Math. & Sci. hum. / Mathematics and Social Sciences (45e année, no. 180, 2007(4)). http://hum.uchicago.edu/~jagoldsm/Papers/probabilityProofs.pdf

Analyzing Linguistic Data: A Practical Introduction to Statistics using R. R.H. Baayen. Cambridge University Press; 1st edition, 2008.

Statistics for Linguistics with R: A Practical Introduction. Stefan Th. Gries. De Gruyter Mouton; 1st edition, 2010.

3.1 语料库分析中的基本概率知识

首先,让我们来了解几个概率的基本原理。

状态/样本空间

当我们进行一项试验或考虑可以赋予某个属性的可能值(比如将电子邮件标注为垃圾或非垃圾)时,我们所指的就是属性的状态空间,即{垃圾,非垃圾}。同样,掷硬币的可能结果是正面或反面,对应的状态空间为{正面,反面}。

随机变量

这是一个不指向固定值的变量,可以是来自定义域中的任何可能值。例如,上面所提到的状态空间中的值。

概率

来自状态空间的一个具体取值x的概率,用函数P(x)表示。我们说P(x)是“x的概率”,这里x是随机变量X的某个具体取值,x蝀。

概率有两个重要性质:

其取值一定在0~1之间,表示为:

       x:0 ≤ p(x) ≤ 1

所有可能事件的概率之和必须为1:


假设你对电影评论感兴趣。也许你的目的是收集语料库并训练一个算法去识别电影题材,例如语料库主要是基于IMDb.com上类似的剧情摘要。为了训练算法来进行文本分类和标注,你需要了解语料库的一些性质。

假设有500个电影的简介,共涉及5种题材,每种题材的电影数量相等,即,

Action(动作):100个文档。

Comedy(喜剧):100个文档。

Drama(戏剧):100个文档。

Sci-fi(科幻):100个文档。

Family(家庭):100个文档。

给定该语料库,我们可以定义随机变量G(题材),上述列表中的题材值构成G的状态空间(样本空间)。这是一个平衡语料库,任意g蜧都有相等的概率。例如,P(Drama)=0.20,P(Action)=0.20等。

注意: 如果你想用Python来查找语料库中的某一个具体变量的概率,你可以很容易地使用列表得到它。如果你有一个存有所有评论的列表以及一个存有喜剧类评论的列表,那么你就可以使用对应列表的长度来计算随机选择某种题材的概率值。假设all是所有评论的文件名列表,comedy是喜剧类评论的文件名列表:

>>> p_com = float(len(comedy))/float(len(all))

由于函数len()返回一个整数,所以为了得到概率,需要把整数转化为浮点数;否则,得到的概率为0。

3.1.1 联合概率分布

我们经常想问的关于语料库的问题不仅仅涉及一个随机变量,而且可能同时涉及多个随机变量。回到IMDb语料库,我们注意到有两种类型的剧情介绍:短的(short)和长的(long)。我们可以在样本空间{short,long}上定义随机变量S(摘要)。如果每种题材有50个短的和长的摘要,那么P(short)=0.5,P(long)=0.5。

现在,我们有两个随机变量:G(题材)和S(摘要)。我们用P(G,S)表示这些变量的联合概率分布(joint probability distribution)。如果G和S是独立变量,则可将P(G,S)定义为:

P(G ?S)=P(G) ?P(S)

假设两个变量彼此独立,则随机选择“短的喜剧类”评论的概率是:

P(comedy ?short)=P(comedy) ?P(short)

       = 0.20?.50

       = 0.10

但是这两个随机变量真的相互独立吗?直觉上,如果一个事件的发生不会改变另一个事件发生的可能性,那么这两个事件是相互独立的。

因此,我们可以假设先把短评论分离出来,然后再从中选择一个喜剧类评论,或者反之。一共有250个短影评,包含5种题材,每种题材有50条评论。或者,喜剧类共涉及100条,其中50条短的,50条长的。这种看问题的方式等同于计算条件概率。这个概率是已知B发生的条件下A发生的概率(读作“给定B后A的概率”),定义如下:


这是B发生且A也发生的部分。对于我们的例子,在已知评论为短类型的条件下选择一个喜剧类评论的概率为:


很快就可以知道返回值为0.20,这与P(comedy)相等。事实上,独立性意味着,如果G和S是独立的,那么:

  

类似地,因为P(S | G)=P(S),所以P(short | comedy)=P(short),其值为0.50。

请注意,从上式可以推出下面的等价公式,这称为概率的乘法法则(multiplication rule):


当需要计算多于两个的随机变量的联合概率分布时,这个等式可以泛化为所谓的链式法则(chain rule):


当我们在自己的标注语料库上建立第一个语言模型时,这个法则将变得尤为重要。

上述条件概率的计算方法对于我们将在第7章中介绍的机器学习算法也非常重要。特别地,朴素贝叶斯分类器依赖于语料库的条件概率计算。

注意: 理解语料库中不同属性之间的关系有助于判断数据集的哪些方面应该包含到标注任务中。如果事实表明短评论出现的概率与某一个或多个电影题材有关,那么将这个信息加入标注任务(或者在之后为机器学习算法构造特征集时)将会非常有用。

与此同时,评论的长度与题材之间的关联也可能纯属巧合,或者恰好是因为语料库在某些方面是不平衡的。因此,从联合概率分布的角度审视语料库也能确保语料库更准确地代表你正在使用的数据。

3.1.2 贝叶斯定理

对条件概率的计算做出说明后,我们就能给出一个与之等价的公式,称为贝叶斯定理(Bayes Theorem),如下所述:


该定理允许我们在事件之间变换依赖关系的顺序。它将条件概率P(A|B)转换为另外3个概率,后者的估值一般来说更易于获取。当我们想要设计一个机器学习算法来对语料库中的各种实体进行自动分类时,这一点非常重要,而且还能容易地获取与算法中正在使用的不同判断相关联的概率的统计。第7章将再次讨论这个问题。

3.2 计算出现次数

当我们将语言学文本放在一起形成语料库时,在检查语料库前,我们很可能不知道一个具体语言现象的概率分布。例如,如果没有统计每个题材的评论数量,我们不可能知道在IMDb语料库中出现动作类电影评论的概率。在现实中,没有一个语料库会如此平衡。通过对数据集(这里,数据集包含动作类、喜剧类等类型的电影评论)中相关对象出现次数的计数,构成对语料库的统计。类似地,在检查语料库的语言学内容时,我们事先不可能知道语料库中不同单词的频率分布。

在把任何一种机器学习算法应用于语料库前,应该知道的最重要的一件事是语料库所包含的单词的基本统计信息。语料库本质上就像一本教科书,学习算法将用它作为样本(正样例)进行训练。如果你不知道单词的分布(或任何感兴趣的东西),那么你就不知道教科书提供了哪些可以学习的内容。语料库中词型(word type)的分布通常是不均衡的,如图3-1所示。Madnani(2012)提供了如何为语料库生成这种图表的指南。


图3-1:NLTK Gutenburg语料库中的频率分布

首先澄清一点。当我们说正在计算语料库中的“单词”时,我们需要明白其中的含义。词频指的是词例(即词型或词干的实例)的个数。所以,我们应该正确地说明下面这句话中有8个单词还是11个单词。这取决于“单词”的含义。

“The cat chased the mouse down the street in the dark.”

可以直接用NLTK对语料库进行词频计算。图3-2显示了IMDb语料库的一些例子。弄清楚数据集中哪些单词或短语最常用,有助于深入理解你正在使用的语料库。这里,我们给出可用于查找文本文件中50个最常见单词的源代码。


图3-2 :IMDb语料库中的频率分布


关于NLTK搭配函数的使用说明可参见http://nltk.googlecode.com/svn/trunk/doc/howto/collocations.html.

这里给出在语料库上进行词法统计时需要用到的两个基本概念:

语料库大小(N)

语料库中词例的个数。

词汇表大小(V)

语料库中词型的个数。

对任一个经过分词的语料库,都可以将每一个词例映射为一个词型,例如the出现的次数(词型the的词例个数)等。获得语料库词频分布后,可以计算两个指标:排序/频率分布(rank/frequency profile)和词频的频谱(frequency spectrum)。

为得到排序/频率分布,需要从词频列表中取出词型并用其排序替换它,最常见的词型排序是1,以此类推。为生成频谱,简单地计算具有某一频率的词型的个数即可。在这两个指标的计算结果中最明显的一点是,最高频率的排序总是被功能词(function word)(即the、a和and之类的词以及介词等)占据。在布朗语料库中,位列前10的单词占语料库大小的23%(Baroni 2009)。另一个发现是排序较低的单词在频率上呈现出许多联系。例如,在IMDb语料库的频率表中,罕用语(语料库中仅出现一次的单词)数量超过8000。在布朗语料库中,大约一半的单词只出现一次。均值或平均频率的背后隐藏着巨大的差异。在布朗语料库中,词型的平均频率是每个词型出现19次,但该均值之所以如此之大是因为少量极高频词导致的。

我们也注意到语料库中的大部分单词的词频都远低于均值,所以均值比中位数高得多,尽管众数(mode)通常为1。所以,均值对“集中趋势”并不是一个很有意义的指标,对更大规模的语料库来说更是如此。

注意:回忆下面几个统计学概念之间的区别:

·均值(平均数):值的和除以值的个数       


·众数:总体(或数据集)中最常见的值。

·中位数:总体(或样本)的中间数,它将样本集分为比它大的一半和比它小的一半。

3.2.1 齐普夫定律(Zip's Law)

上节提到词型的不均衡分布是乔治·齐普夫(George Zipf)根据对各种数据集的观察在1949年首次提出的。他注意到,语料库中一个词的频率f(w)是这个词的排序r(w)的非线性递减函数,可以表示为下面这两个变量之间的函数关系:


C是一个常数,由语料库的具体情况决定,但现在我们可以认为它是语料库中最高频单词的频率。假设a是1,那么我们很快就可以看到频率是如何随排序递减的。注意,该规律是一个幂次定律(power law):频率是排序的负次幂(-a)的函数。所以,排在第一位的词出现的次数通常是排在第二位的词出现次数的两倍以及第三位的三倍,以此类推。

3.2.2  n元语法

本节介绍n元语法的概念。n元语法对自然语言处理(NLP)的许多应用都很重要,因为可以通过它们构造非常直观的语言模型(language model),用于语音识别与合成、机器翻译、索引、信息检索(IR)以及接下来我们将要看到的分类。

设想我们有一个词例(token)字符串W,由元素w1, w2, ? wn组成。现在考虑W上的滑动窗口。如果滑动窗口由一元子串(wi)组成,则这些一元子串的集合称为字符串的一元(unigram)表示;字符串中元素的个数与一元表示的个数相同。现在考虑所有的二元子串,有w1w2、w2w3等,直到最后的wn-1wn,这些称为二元(bigram)表示,对于一个长度为n的字符串,我们有n-1个二元表示。

根据之前提到的条件概率的定义,可以将已知前一个词例的条件下出现当前词例的概率定义为二元概率(bigram probability)。因此,已知前一个元素wi-1,元素wi的条件概率为:


将滑动窗口进一步扩大,已知前n-1个元素,可以定义n元概率为该元素的条件概率。即,


在任何语料库中最常见的二元子串很可能不是你所感兴趣的。它们涉及词对中频次最高的那些。这通常是烦人的功能词词对,例如,

of the

in the

on the

in a

如果你想得到更有意义的二元(和三元)子串集合,可以在语料库上运行词性(POS)标注器,比如通过NLTK提供的某个词性标注器。这样能够过滤一些二元子串得到更多的实义词词对,例如,形容词和名词:

Star Trek

Bull Run

Sidekick Brainiac

这是从结果中过滤无意义的n元子串的有效方式。但更好的解决方法是利用n元子串中词语之间的“自然亲和力”。这个方法涉及所谓的搭配(collocation)。搭配是语言中两个或以上单词远超偶然共现的频繁共现。在语料库中寻找搭配的一种有效方法是计算点互信息(Pointwise Mutual Information,PMI)。大体而言,PMI背后的直觉如下:对两个单词X和Y,我们想知道一个单词能告诉我们另一个单词多少信息。例如,给定X的一次出现x和Y的一次出现y,它们的联合概率与假设它们彼此独立时的期望值之间有多大差异?这可以表示为:

pmi

实际上,NLTK所提供的搭配函数也是利用该关系构造二元搭配。将该函数应用于IMDb语料库的二元子串,可看到如下的结果:

>>> bigram_measures = nltk.collocations.BigramAssocMeasures()

>>> finder1 = BigramCollocationFinder.from_words(imdbcorpus.words())

>>> finder1.nbest(bigram_measures.pmi, 10)

[('".(', 'Check'), ('10th', 'Sarajevo'), ('16100', 'Patranis'),

('1st', 'Avenue'), ('317', 'Riverside'), ('5000', 'Reward'),

('6310', 'Willoughby'), ('750hp', 'tire'), ('ALEX', 'MILLER'),

('Aasoo', 'Bane')]

>>> finder1.apply_freq_filter(10) #look only at collocations that occur 10 times or more

>>> finder1.nbest(bigram_measures.pmi, 10)

[('United', 'States'), ('Los', 'Angeles'), ('Bhagwan', 'Shri'),

('martial', 'arts'), ('Lan', 'Yu'), ('Devi', 'Maa'),

('New', 'York'), ('qv', ')),'), ('qv', '))'), ('I', ")'")]

>>> finder1.apply_freq_filter(15)

>>> finder1.nbest(bigram_measures.pmi, 10)

[('Bhagwan', 'Shri'), ('Devi', 'Maa'), ('New', 'York'),

('qv', ')),'), ('qv', '))'), ('I', ")'"), ('no', 'longer'),

('years', 'ago'), ('none', 'other'), ('each', 'other')]

然而,使用这个简单公式将涉及数据稀疏问题。即,过高估计了观测到的罕见事件的概率,而过低估计了未观测到的事件的概率。计算语言学的研究人员已经找到许多可以在一定程度上缓解该问题的方法,我们将在第7章讨论机器学习算法时再来详细讨论该问题。

3.3 语言模型

n元语法的好处是什么呢?多年来自然语言处理已经利用n元语法开发了预测序列行为的统计语言模型(language model)。序列行为涉及在包含多个X的序列中识别下一个X。例如,语音识别、机器翻译等。在给定前一个元素的前提下语言模型预测序列中的下一个元素。

让我们更仔细地看看它是如何工作的,以及如何使用前几章讨论的工具。假设有一个单词序列,w1,w2,?wn。预测序列中的任意“下一个单词”wi可以表示为下面的概率函数:


等价于:


请注意,这里涉及两个联合概率分布的计算。我们假定用语料库中的单词序列的频率来估计它的概率。即,

P(w1,?wi-1) = Count(w1,?wi-1)

P(w1,?wi) = Count(w1,?wi)

以下比率称为相对频率(relative frequency):


注意: 正如我们所看到的,n元语法例子中的联合概率可以使用序列行为的链式法则表示为条件概率(conditional probability),如下:


它进一步可表示为:


原则上,如果计算整个词序列的联合概率,即便我们能够估计构造预测模型所需要的概率,我们也没有机会拥有足够的数据来进行这个工作。也就是说,有些词序列可能从未在我们的语料库中出现过,但我们仍想能够预测其中所包含的这些元素的相关行为。为解决这个问题,我们可以对序列中元素的贡献做一些简化的假设。即,如果我们近似地认为序列中某个单词的行为只与它前面的一个单词相关,则我们可以将n元概率

P(wi | w1     )

简化为二元概率:


这就是马尔科夫假设(Markov assumption),使用它,我们就能得到语料库中二元子串的一些合理统计结果。使用更早之前提到的相对频率的概念,可以估计二元概率。如前所述,我们用语料库中二元子串的出现次数除以语料库中其前缀(这里指的是一个单词)出现的次数:


这个过程就是最大似然估计(Maximum Likelihood Estimation,MLE),它提供了用于创建语言模型的一个相当直接的方式。第7章将继续讨论该话题。

总结

本章介绍了分析语料库语言学内容的工具以及执行统计分析需要的各种技术和工具。具体地,我们讨论了如下内容:

语料库分析包含统计和概率工具,执行推理统计时,这些工具可对语料库和信息进行数据分析。这对你进行语料库标注以及在语料库上训练机器学习算法而言是必不可少的信息。

有必要区分语料库中单词的出现(词例)和单词本身(词型)。

语料库中词例的总数是语料库的大小。

语料库中词型的总数是词汇表的大小。

语料库中单词的排序/频率分布是根据单词的词例数给出的词语排序。

单词的频谱是具有给定频次的单词的个数。

齐普夫定律是一个幂次定律,它说明任何单词的频率与它的排序成反比。

对于许多自然语言处理应用,构造语料库中词语的n元子串是建立语言模型的第一步。

点互信息是对文本中的一个词与另一个词之间依赖关系的度量。它可以用来判断语料库中的二元子串是否是真正的搭配。

可以基于马尔科夫假设对预测序列行为的语言模型进行简化,即在预测一个单词时只关注其前面的一个单词。


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

华章出版社

官方博客
官网链接