前几天在刷 medium.com 时,我发现了一篇非常值得一读的文章。这篇文章总结了一条 twitter 长贴,内容涉及意义、语义、语言模型、学习泰语和 Java、蕴含、共指——这一切都汇聚在一场引人入胜的讨论之中。原文在这里。
以下是原文的转录:
上周 Jacob Andreas 的一条推文在 Twitter 上引发了一场巨大的讨论,许多人称之为意义/语义超级长贴。
🏎 词汇意义与语义速成课
如果你已经知道我们在 NLP 中所说的*“意义/语义”*是什么,那么可以跳过这一部分,直接进入这场辩论 🔥。
对于那些搞 CS/ML 的朋友,这里先做几句介绍。
首先,需要指出的是,自然语言中的意义是一个多面向的概念,兼具语义、语用、认知和社会等方面。在 Twitter 上发生的这场讨论主要围绕词汇语义和组合性展开,因此为了简明起见,我将聚焦于这一子领域。你会在本节末尾找到更多链接,以拓宽这一视野。
意义是发送者意图向接收者传达、或确实传达给接收者的信息。
现在,我们知道字符串本身就已经是意义的一种表示,那么为什么还要在原始文本之外另作他求呢?
其实,我们想要把意义与原始文本区分开来,有若干原因。
一个原因是,NLP/NLU 这一领域的目标是构建系统,让它们听懂你说的话,据此触发动作,并回传有意义的信息。我们举一个简单的例子:
Context: Knowledge of mathematics
Utterance: What is the largest prime less than 10?
Action: 7
给定一些数学知识,我们希望我们的 NLU 系统能给出一个恰当的答案。
要做到这一点很困难:(i) 把原始文本与我们系统中的数学事实知识库关联起来,以及 (ii) 把各条知识组合在一起以推断出答案。一种解决方案是定义一个更易于操作的中间意义表示(有时称为逻辑形式,Logical Form)。
例如在我们这个例子中:
然后我们可以针对某个世界模型(比如我们的知识数据库)来执行这个表达式,从而得到答案。这样一来,我们也就把对语言的理解(称为语义解析,semantic parsing)从世界知识(在现实世界中为意义奠基的问题)中分离了出来。
这样做的好处是,我们对句子意义的表示因此可以:
- 提供一种途径,把语言与外部知识库、观测和动作关联起来;
- 支持计算推理,使各个概念可以像人类在对话中所做的那样被组合起来以推导出更多知识。
对这种表示还有另外两个不错的要求:
- 无歧义:每条陈述只有一个意义(不同于自然语言);
- 足够具有表达力,以覆盖人们所谈论的全部内容。
作为原始文本的自然语言并不满足这些标准中的大多数!
一条相关的研究路线是形式语义学(Formal Semantics),它试图通过构建关于说话者用以传达意义的原则的模型,来理解语言意义。
形式语义学的工具与 NLU/NLP 的工具类似,但其目标更多是理解人们如何构建意义,而非任何具体的应用。
现在,意义远不止逻辑形式和奠基这么简单。举几个例子:“但我说这话不是照字面意思讲的!!”(说话者意义 ≠ 字面意义)、“Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo.”(没错,这是一个真实的、有意义的句子,但你需要为每一个 buffalo 找到正确的含义!)等等……
几点参考:我们那个简单的例子来自 Percy Liang 的这篇不错的文章。作为对这一领域的快速概览,我推荐 J. Eisenstein 所著《“Natural Language Processing”》一书的第 12 和第 13 章。它们会带你了解从主要思想、工具直到 NLP 中意义研究的近期进展。Emily M. Bender 的 ACL 2018 教程则是一种很好的方式,让你看到意义至少可以是一头多头怪兽 🐍!
现在回到我们的超级长贴!
🔥 引爆一场关于意义的辩论
一如既往,这场讨论是由对句子嵌入(sentence embeddings)的一句提及点燃的。
正是这一论点成为随后那场超级讨论的主要导火索。在长贴中稍后,Emily M. Bender 把她的论点重新表述为:
如果学习者得到的全部就是文本,那么学习者无法学到意义。
一个只在原始文本上训练的模型能学到意义吗?
人们从两条轴线来审视这个问题:
模型能学到意义的哪个方面?
-
它能学到意义,还是只能学到意义上的相似性(即学到某些表达是相似的,却不知道它们究竟是什么意思。这对迁移学习来说仍然非常有用)?
-
它能学到有奠基的意义(把每个表达的意义学成一种世界状态),还是学到词汇意义(例如,学到子表达的意义如何组合到一起,就像我们的逻辑形式那样)?
模型能如何学习?
-
如果模型无法仅从原始文本中学到意义,那么所需的额外监督的最小量会是多少?我们是否应该加入来自逻辑形式、文本蕴含(Textual Entailment)……的监督?
-
我们能否在模型中编码某种归纳偏置(inductive bias),使它能从原始文本中学到意义的某些方面?
泰语与 Java 实验
Emily M. Bender 提出了几个有趣的实验,讨论也相当充分:
- 泰语房间实验:“想象一下,有人给了[你]一座巨大图书馆里的全部泰语文献。(全都是泰语,没有任何翻译。)假设你原本不懂泰语,你是不会从中学会它的。” 一个试图只从原始文本中学习的现实例子。
- Java 代码实验:“把有史以来写过的所有格式良好的 Java 代码都喂给你的神经网络,但只给代码的表层形式。然后要求它去求值(即执行)其中的一部分。” 我们能否只从原始文本中学到执行语义?
探究编程语言语义
Java 代码这一提议引发了一场有趣的讨论,讨论的是试图从编程语言(PL)代码中学习意义与从自然语言(NL)文本中学习意义之间的差异。
事实上,从 PL 中学习似乎比从 NL 中学习更困难。
从 Java 代码中学习意义,就像面对一段只由命令/指令组成、而没有任何描述的文本。但描述是学习中非常重要的反馈,因为它们让人得以将自己的内部世界状态与真实的世界状态进行比较。
语言模型
讨论围绕着语言模型展开。语言模型是一种能够在给定上下文(过去的词、外部知识)的情况下预测句子中下一个词的模型。近来,这些模型在常识推理方面给出了有趣的结果。这里从两种情形来考察语言模型:
-
独立于任何训练数据集:拥有一个人类水平的语言模型意味着该模型具备类似人类的意义与世界状态观念。正如 Yolav Goldberg 所提到的:“这只是(众多例子之一的)一个平凡的例子,说明完美的 LM 不仅蕴含了解决全部语言问题,也蕴含了解决全部 AI 问题。”
-
更有趣的是一个只从原始文本训练的语言模型的情形:这里的问题是,在没有被给予显式意义信息的情况下,模型在语义方面究竟能学到多少!
文本蕴含
要在不太偏离原始文本的前提下引入一些关于意义的信息,一种方式是在文本蕴含(Textual Entailment)上训练模型,这一任务是要预测一个句子是否蕴含另一个句子。
在一系列推文中,Sam Bowman 阐述了他的观点:蕴含几乎可以用来从原始文本中学到组合语义“最精华的部分”。
他还提出建议:与当前的做法相比,学习者或许能够以一种更简单的方式学习蕴含,采用一种可能接近 LM 的设置。
一个带归纳偏置的语言模型
从一个尽可能接近原始文本的数据集中学习意义的另一种方式,是在模型中植入一个强的归纳偏置,正如 Matt Gardner 所讨论的那样。
一个例子是实体语言模型(Entity Language Model),它通过显式地建模任意数量的实体、沿着隐藏状态更新它们的表示,并利用提及表示(mention representations)来在 LM 任务中依上下文生成下一个词,从而增强了经典的 LSTM。
想了解更多,请查看 Yejin Choi 在 ACL 2018 的演讲以及 Percy Liang 在 AAAI 2018 的演讲。
那个悬而未决的大问题
到最后,我觉得最初的那个主要问题依然悬而未决:模型能否仅从原始文本中学到词汇意义的某些方面?
说说 Searle 的中文房间
讨论中屡屡有人提到 Searle 的房间论证,但这里的情形略有不同。
Searle 的论证是在强 AI 与弱 AI 的辩论中提出的:计算机是否拥有心智或意识。而这里的问题不那么偏向哲学:我们能否仅从形式中提取出意义的一种表示。
不过,正如 Jeremy Howard 稍后详细阐述的那样,Searle 的中文房间实验远远超出了强/弱 AI 的问题,触及理解/感受质(qualia)的问题,所以请去看看这条长贴。