数据的“不合理”有效性

数据的“不合理”有效性

The Unreasonable Effectiveness of Data

Alon Halevy、Peter Norvig、Fernando Pereira,Google

尤金·维格纳(Eugene Wigner)的文章《数学在自然科学中的不合理有效性》(“The Unreasonable Effectiveness of Mathematics in the Natural Sciences”)探讨了为什么如此多的物理学内容能够被简洁的数学公式优雅地解释,例如 \(f = ma\)\(e = mc^2\)。与此同时,那些研究人类而非基本粒子的科学,却始终难以被优雅的数学所描述。经济学家由于无法像物理学那样精确建模人类行为,而长期怀有一种“物理学嫉妒症”。一本非正式且并不完整的英语语法书就长达1700多页。也许,当涉及自然语言处理及相关领域时,我们注定只能面对复杂理论,而永远无法拥有物理公式般的优雅。但如果真是如此,我们就应该停止假装我们的目标是构建极度优雅的理论,而应当拥抱复杂性,并利用我们最好的盟友:数据那种“不合理”的有效性。

我们中的一位作者,在布朗大学读本科时,仍然记得第一次接触 Brown Corpus(布朗语料库)时的兴奋心情。该语料库包含一百万个英文单词。自那以后,我们这个领域已经出现了若干规模大约扩大100倍的重要语料库。而在2006年,Google 发布了一个包含一万亿词的语料库,其中统计了所有最长五词序列的频率。从某些方面来说,这个语料库甚至比 Brown Corpus 更糟:它来自未经筛选的网页,因此包含不完整句子、拼写错误、语法错误以及各种其他错误;它也没有经过人工精细校正的词性标注。但它比 Brown Corpus 大一百万倍这一事实,足以弥补这些缺点。一个万亿词语料库——再加上其他来自 Web 的、包含数百万、数十亿乃至数万亿链接、视频、图像、表格和用户交互的数据集——甚至能够捕捉极其罕见的人类行为模式。因此,如果我们知道如何从数据中提取模型,那么这样的语料库就足以成为某些任务完整模型的基础。

从 Web 规模的文本中学习

Learning from Text at Web Scale

自然语言相关机器学习中最大的成功,来自统计语音识别(statistical speech recognition)和统计机器翻译(statistical machine translation)。这些成功并不是因为这些任务比其他任务更简单;事实上,它们远比文档分类之类的任务困难得多,后者只是从每篇文档中提取少量信息而已。这些成功真正的原因在于:翻译本身是一项真实存在且每天都在发生的人类活动(想想欧盟机构或者新闻机构的运作)。语音转录也是如此(想想电视字幕)。换句话说,我们所希望自动化的输入—输出行为,本身就在现实世界中天然存在着海量训练数据。相比之下,传统自然语言处理任务,例如文档分类、词性标注、命名实体识别或句法分析,并不是现实世界中的常规任务,因此不存在天然的大规模语料库。相反,这些任务的语料库必须依赖专业人员进行人工标注。这种标注不仅获取缓慢且昂贵,而且即便是专家之间,也往往难以达成一致,因为其中充满了我们稍后在 Semantic Web 部分会讨论到的各种困难。Web 规模学习的第一课,就是利用已经存在的大规模数据,而不是寄希望于那些实际上并不存在的标注数据。例如,我们发现,有用的语义关系可以从搜索查询及其对应结果的统计中自动学习得到,或者从 Web 文本模式和格式化表格长期积累的证据中学习得到,而这两种方式都不需要任何人工标注数据。

统计语音识别与机器翻译中的另一个重要经验是:如果你拥有大量训练数据,那么“记忆”本身就是一种好策略。这两类任务所使用的统计语言模型,主要由大量连续短词序列(n-grams)概率数据库构成。这些模型通过统计数十亿甚至数万亿词语料中每个 n-gram 的出现次数构建而成。研究人员在如何根据已观察到的 n-gram 来估计新 n-gram 的概率方面做了大量工作(例如使用 Good-Turing 或 Kneser-Ney smoothing),从而形成了复杂的概率模型。但事实总是如此:简单模型加大量数据,往往胜过复杂模型加少量数据。类似地,早期机器翻译工作依赖复杂规则来描述源语言和目标语言之间句法与语义模式的关系。而当前的统计翻译模型,则主要由巨大的短语记忆表组成,用来给出特定源语言短语与目标语言短语之间的候选映射。

如今的翻译模型,不再假设抽象通用规则一定优于记忆具体短语;只有当通用规则确实能够提升翻译效果时(例如日期和数字规则),它们才会被引入。类似观察也出现在机器学习应用于 Web 数据的其他领域:简单的 n-gram 模型或基于数百万特征的线性分类器,往往优于那些试图发现普适规则的复杂模型。在许多情况下,似乎存在一个“数据足够”的阈值。例如,James Hays 和 Alexei A. Efros 研究了场景补全(scene completion)任务:从照片中删除不想要的汽车或前任配偶,并使用大量其他照片中的像素来填补背景。当语料库只有数千张照片时,结果很差;但一旦他们积累了数百万张照片,同样的算法便表现得相当优秀。我们知道,从理论上讲,符合英语语法的句子数量是无限的,而一个2MB图片的可能数量是 \(256^{2,000,000}\)。然而,在实践中,人类真正关心的区别是有限的。对于许多任务来说,一旦我们拥有十亿级别的样本,我们实际上就得到了一个封闭集合,它已经代表(或者至少近似代表)了我们所需的内容,而无需再依赖生成规则。

对于许多任务而言,单词及其组合已经提供了我们从文本中学习所需的全部表示能力。

For many tasks, words and word combinations provide all the representational machinery we need to learn from text.

对于那些仍然希望用少量普适规则解释语言的人来说,需要注意的是:语言本身就是复杂的,它拥有数十万词汇以及极其丰富的语法结构。每天都有新词产生,也有旧词用法发生变化。这说明,我们无法将想表达的内容压缩成少量抽象原语的自由组合。

对于那些有小规模机器学习经验、担心“维度灾难(curse of dimensionality)”以及模型过拟合的人来说,需要注意的是:过去十年的实验结果几乎一致表明,丢弃稀有事件通常是错误的,因为大量 Web 数据恰恰由“单独稀有但整体频繁”的事件构成。对于许多任务而言,单词及其组合已经提供了我们从文本中学习所需的全部表示能力。人类语言经过数千年的演化,早已为重要概念创造出了词汇;我们应当直接使用这些词。那些缺乏语言对应物的抽象表示(例如潜在分析中的聚类)不仅难以学习或验证,而且往往会丢失信息。依赖单词及其共现的显式统计,还有一个额外优势:我们能够以与数据量成正比的时间来估计模型,并且通常很容易进行并行化。因此,从 Web 学习天然具备可扩展性。

个人注:单独稀有但整体频繁

然而,在网络规模(Web Scale)下,情况发生了反转:

  • 个体罕见(Individually Rare):单个生僻词或罕见行为在万亿级语料库中出现的概率极低 。
  • 集体频繁(Collectively Frequent):虽然每个罕见事件发生的概率低,但因为“罕见事件”的种类极其繁多,它们加在一起占据了数据总量的巨大份额 。这就是所谓的“长尾效应”。

n-gram 模型的成功,不幸地导致了一种错误的二元对立。如今很多人认为,自然语言处理只有两种方法:

  • 深层(deep)方法:依赖手工编写的语法和本体(ontology),并以复杂关系网络的形式表示;
  • 统计(statistical)方法:依赖从大型语料库中学习 n-gram 统计。

实际上,这里存在三个彼此正交的问题:

  • 选择表示语言(representation language);
  • 用这种语言编码模型(encoding a model);
  • 在模型上执行推断(performing inference)。

每一个问题都可以用多种方式解决,因此会形成数十种不同的方法。20世纪80年代流行的“深层方法”使用一阶逻辑(或类似形式)作为表示语言,由一组研究生团队手工构建模型,并使用适合这种表示语言的复杂推断规则进行推理。而在20世纪80年代和90年代,有限状态机(finite state machines)成为流行的表示语言;模型则通过大规模语料上的计数与平滑技术来构建,并使用简单贝叶斯统计作为推断方法。

但实际上还存在许多其他组合方式,而在21世纪初,人们正在尝试其中很多方案。例如,Lise Getoor 与 Ben Taskar 汇集了关于统计关系学习(statistical relational learning)的研究工作。所谓统计关系学习,是指那些既足以表示对象之间关系(如一阶逻辑),又具有良好概率定义、能够通过统计学习构建模型的表示语言。Taskar 及其同事展示了:支持向量机中使用的最大间隔分类器(maximum-margin classifier),同样可以改进传统句法分析。Stefan Schoenmackers、Oren Etzioni 与 Daniel S. Weld 展示了:如何利用关系逻辑以及一个包含一亿网页的语料库,来回答诸如“哪些蔬菜有助于预防骨质疏松?”这样的问题。他们的方法是:识别并组合如下关系断言——“羽衣甘蓝富含钙”以及“钙有助于预防骨质疏松”。

Semantic Web 与 Semantic Interpretation

Semantic Web(语义网)是一种形式化表示语言约定,其目标是让软件服务之间能够“无需人工智能即可互相协作”。例如,一个帮助我们预订酒店的软件服务,只要遵循某种关于日期、价格和位置表示的标准,就能够被转换成 Semantic Web 服务。随后,该服务便可以与其他使用相同标准或可转换标准的服务互操作。正如 Tim Berners-Lee、James Hendler 和 Ora Lassila 所说:

“Semantic Web 将使机器能够理解语义文档和数据,而不是人类语言和文字。”

理解人类语言与文字的问题——即 semantic interpretation(语义解释)问题——与软件服务互操作问题完全不同。语义解释处理的是模糊且歧义丰富的自然语言;而服务互操作处理的是如何让数据足够精确,从而使程序能够有效运行。不幸的是,由于“Semantic Web”和“semantic interpretation”都包含“semantic”一词,这两个问题经常被混淆,从而导致无休止的困惑与争论。Semantic Web 服务中的“语义”,体现在那些按照本体及相关非正式文档规范实现服务的代码之中;而自然语言语义解释中的“语义”,则体现在人类认知与文化过程之中,即语言表达如何引发预期反应以及认知状态变化。由于人类拥有巨大的共享认知与文化背景,语言表达即便高度模糊,人们通常仍能正确理解。

由于存在巨大的共享认知与文化背景,语言表达即便高度模糊,也往往仍能被正确理解。

Because of a huge shared cognitive and cultural context, linguistic expression can be highly ambiguous and still often be understood correctly.

鉴于这些挑战,构建 Semantic Web 服务既是工程问题,也是社会学问题。因此,即使我们已经理解所需技术,仍然需要面对重大障碍:

  • 本体编写(Ontology writing)。 容易的重要部分已经完成。例如,Dublin Core 定义了日期、位置、出版者等足以用于图书目录卡片的概念;Bioformats.org 定义了染色体、物种与基因序列。其他组织也为各自领域提供了本体。但对于那些长尾且很少使用的概念,以当前技术进行形式化的成本过高。Project Halo 在化学教材知识编码与推理方面做得极其出色,但成本高达每页一万美元。显然,我们无法为万亿网页承担这种成本。

  • 实现困难(Difficulty of implementation)。 发布一个自然语言静态网页很容易,任何拥有键盘和网络连接的人都能做到。而创建一个数据库驱动的 Web 服务则困难得多,需要专门技能;再进一步让该服务兼容 Semantic Web 协议则更加困难。大型网站和拥有强大技术团队的网站会认为额外投入是值得的,但绝大多数小型网站和个人至少在当前工具条件下会觉得过于困难。

  • 竞争(Competition)。 在某些领域,不同阵营都希望推广自己的本体;而在另一些领域,行业既得利益者则反对任何本体,因为统一标准会削弱他们的竞争优势。这是外交问题,而非技术问题。正如 Tom Gruber 所说:“每一个本体都是一种条约——是在共享动机下,人们之间达成的一种社会协议。”

    当缺乏共享动机时,也就不会存在共同本体。

  • 不准确与欺骗(Inaccuracy and deception)。 我们知道如何构建可靠推理机制,使其能够从真实前提出发推导出真实结论。但我们尚未建立一种成熟方法来处理错误前提,或者处理那些撒谎、作弊和欺骗的行为者。目前在信誉管理与信任机制方面已有一些研究,但至少在当前阶段,Semantic Web 技术更适用于诚实、合作并能自我纠错的群体,而不适用于充满竞争与欺骗的环境。

实现准确语义解释所面临的挑战则有所不同。我们已经解决了社会学问题:构建了一个网络基础设施,使数亿作者愿意共享数万亿网页内容。我们也解决了技术问题:聚合并索引这些内容。但我们仍然面临一个科学问题,即如何解释这些内容,其核心是:尽可能学习内容的上下文,以便正确消除歧义。无论是否采用 Semantic Web 框架,语义解释问题始终存在。同一种含义可以有许多不同表达;同一种表达也可能拥有多种不同含义。例如,一个公司信息表格可以用临时 HTML 表示,其中列名是“Company”“Location”等;它也可以使用 Semantic Web 格式表示,并使用标准标识符表示“Company Name”和“Location”,采用 Dublin Core Metadata Initiative 的点编码方案。但即使我们拥有一个正式的 Semantic Web “Company Name” 属性,我们仍无法为其所有可能值建立本体。例如,我们无法确定字符串“Joe’s Pizza”具体指哪家公司,因为有数百家公司使用这个名字,而且新的公司还在不断出现。我们同样无法始终确定字符串“HP”所代表的企业。如果列中是股票代码,那么它可能代表 Helmerich & Payne Corp.;但如果列中是大型科技公司名称,那么它更可能代表 Hewlett-Packard。语义解释问题依然存在;使用 Semantic Web 形式化语言,仅仅意味着语义解释必须在尖括号之间的更短字符串上进行。

同一种含义可以有许多不同表达,同一种表达也可能拥有许多不同含义。

The same meaning can be expressed in many different ways, and the same expression can express many different meanings.

我们真正需要的是:推断列标题之间关系或现实世界实体之间关系的方法。这些推断有时可能错误,但只要足够准确,我们就能够连接不同的数据集合,从而显著增强我们与 Web 数据的交互。有趣的是,在这里,Web 规模数据也可能成为解决方案的重要部分。Web 上存在数亿张独立创建的表格,以及可能数量相当的、能够转化为表格的列表。这些表格代表了各个领域中的结构化数据;它们也体现了不同人如何组织数据——包括他们选择哪些列以及如何命名这些列。这些表格还提供了丰富的列值集合,以及那些被认为应当属于同一列的数据值。我们此前从未拥有如此庞大的表格(及其 schema)集合来帮助解决语义异构问题。利用这样的语料库,我们希望能够完成如下任务:判断“Company”与“Company Name”何时是同义词;判断“HP”是指 Helmerich & Payne 还是 Hewlett-Packard;以及判断一个拥有“passengers”和“cruising altitude”属性的对象很可能是一架飞机。

示例

我们如何利用这样一个表格语料库?假设我们希望寻找属性名称的同义词——例如,“Company Name”是否等价于“Company”,“price”是否等价于“discount”。这里的同义词与词典中的同义词不同,因为它们高度依赖上下文(无论是在表格中还是自然语言中)。给定语料库后,我们可以从表格列标签中提取 schema。例如,研究人员从1.5亿张表格中可靠地提取出了250万个不同 schema(并非所有表格都拥有 schema)。现在,我们可以分析这些 schema 中属性名称的共现情况。如果我们发现一对属性 A 和 B 很少同时出现,但它们总是与相同的其他属性名称共同出现,那么 A 和 B 可能是同义词。如果进一步发现它们的数据元素有显著重叠,或者属于同一数据类型,那么这一假设会得到加强。类似地,我们还可以为数据库设计者提供 schema 自动补全功能。例如,通过分析如此庞大的 schema 语料库,我们能够发现:包含 Make 和 Model 属性的 schema,往往也包含 Year、Color 和 Mileage 属性。向 schema 创建者提供这种反馈,不仅可以节省他们的时间,也能帮助他们使用更常见的属性名称,从而减少 Web 数据中的语义异构来源。当然,如果我们能够自动组合这些表格中的数据,那么将会有巨大机会构建出有趣的数据集。这是一个活跃的研究方向。

另一个机会是:将多个表格中的数据,与其他来源的数据结合,例如非结构化网页或 Web 搜索查询。例如,Marius Paşca 研究了“识别类别属性(attributes of classes)”这一任务。也就是说,他的系统首先识别诸如“Company”这样的类别,然后找到“Adobe Systems”“Macromedia”“Apple Computer”“Target”等实例,最后识别“location”“CEO”“headquarters”“stock price”“company profile”等类别属性。Michael Cafarella 及其同事表明,这些信息可以从表格中提取;而 Paşca 则展示了:它们同样可以从普通网页文本以及搜索日志中的用户查询中提取。例如,通过用户查询“Apple Computer stock price”,结合我们已有的类别与属性知识,我们可以确认“stock price”是“Company”类别的一个属性。而且,这种技术不仅适用于几十个最流行的类别,还适用于数千个类别与数万个属性,包括诸如“Aircraft Model”这样的类别,其属性包括“weight”“length”“fuel consumption”“interior photos”“specifications”“seating arrangement”等。Paşca 展示了:引入搜索日志后,系统性能极佳,在每个类别排名前十的属性中,准确率达到90%。

因此,跟着数据走(follow the data)。选择一种能够利用无监督学习处理未标注数据的表示方式,因为未标注数据远比标注数据丰富。使用非参数模型(nonparametric model)表示全部数据,而不是试图用参数模型(parametric model)进行压缩概括,因为在超大规模数据源下,数据本身蕴含着大量细节。对于自然语言应用,应当相信:人类语言已经为重要概念演化出了词汇。尝试尽可能通过连接这些已有词汇来前进,而不是通过词语聚类去发明新概念。现在,去收集一些数据吧,看看它究竟能做到什么。

选择一种能够利用无监督学习处理未标注数据的表示方式,因为未标注数据远比标注数据丰富。

Choose a representation that can use unsupervised learning on unlabeled data, which is so much more plentiful than labeled data.