人机交互的本质是什么?AI能否真正理解人类的语言,甚至感情?
根据《圣经·旧约》的记载,在很久以前,人类是使用相同的语言的。而当人类逐渐壮大,在虚荣心的趋使下,他们想建造一座通天的巨塔,耸入云霄,并欲借此达到至神的领域。可上帝对人类的行为非常不满,故令世人的语言互不相通,人类因此陷入无休止的争端和混乱中,计划也就此失败。这就是有名的“巴别塔之谜”。
语言是人类社会合作的基石、知识传承的载体,但语言又似乎是人类自身的优点和局限的一面镜子:既可以创造新世界、通达人心,却又不总是那么可靠、时常会引起误解;有时优美纯净,有时又粗俗不堪。
对人工智能而言,征服语言似乎是通往终极智慧路上一个无法被忽视的目标。可是什么是语言,语言背后承载了怎样的智慧和秘密?冰冷的机器、缜密的逻辑是否可以穿透语言的表象,触摸到人类的灵魂呢?在AlphaGo令所有围棋大师俯首称臣的今天,深度学习是否也能够在语言领域展现同样的能力?
在该系列文章里,竹间智能NLP及语言学专家组,将带大家回顾人类对语言认识的不断演进,讨论自然语言处理的重难点、最新的进展,以及未来发展的方向。也许在不久的将来,人类语言本身也会随着AI的进步而进步吧!
第一道难题
让我们把思绪从宏大的历史中抽离出来。如果我们希望人工智能可以“征服语言”,那么也许我们应该从征服小学课本开始。
对于计算机来说,相比于其他所有的学科,它最擅长的也许就是最抽象、最理性的数学了。
数学的语言,相较于别的科目,更强调精确。数学建立在毫不含糊的逻辑之上,那么用于描述数学的语言,当然也就必须精准无误。事实上,对于用单纯数字和符号表示的数学,计算机是可以辨认和理解的,这当然也是计算机被创造出来的初衷。
可是如果我们对于计算的过程稍做修饰,将它用自然语言描述出来的时候,似乎计算机就很难去理解了。所以今天我们小试牛刀,看看人工智能在自己擅长的科目能考多少分。
让我们来算一道简单的数学题目,“小明上学期期末考试,语文、数学、自然、社会、英语的成绩分别是88分、96分、94分、90分、82分。小明五科的平均成绩是多少?”
当然,很多程序员心中已经开始纳闷,这道题目真的很简单,一行代码就可以搞定了。
我们暂时先不讨论python解释器如何将上面的代码转换为机器指令,以及底层的硬件如何运作(虽然电脑能够理解“高级”编程语言已经是一个奇迹)——只要在自己的电脑上验证一遍,应该就足以令人信服了:
我们想知道的是,人类的语言,和“给计算机看”的语言到底有什么差别,为什么计算机读得懂计算机语言,却读不懂人类语言呢?最新的人工智能的技术到底能不能够弥补这样的差异?
语言的秘密
为了解释清楚这个对程序员来说似乎不成问题的问题(他们每天都在充当人类和机器之间的翻译官),我们需要先认识一位对人工智能和语言学来说都举足轻重的学术巨擎:乔姆斯基。
严格说来,乔姆斯基是站在AI的对立面的。在人工智能“大跃进”的60年代,乔姆斯基更多的是在给人工智能泼冷水。他认为简单的电脑程序永远无法理解语言,因为人类自己还尚未理解语言产生的机制。
乔姆斯基坚信人类的语言可以被一种与生俱来的“普遍语法”所描述——在今天,乔姆斯基的大部分语言学理论已经不再被奉为圭臬,但他在对语法的研究中所规划出来的“乔姆斯基谱系”,依然是人们在研究语言的复杂度之时所遵循的原理。
(上图:乔姆斯基谱系;越靠近中心的语言越简单,越外层的语言越复杂)
语言具有表达形式和所描述的内在逻辑两种属性。所以,我们在讨论语言的复杂度的时候,一方面是在研究为了表达一定的语义,我们需要多么复杂的表达形式;而另一方面,我们想知道这种语言所能表达的概念,能够达到怎样的复杂度——形式非常复杂的语言也许只能表达非常简单的语义,而非简单的符号根据一定规则,就可以表达极其丰富的内容。
在上面这道应用题的例子当中,计算机语言和自然语言所表达的意思是一样的,可是表达的复杂程度差别很大。这样的差异,在乔姆斯基谱系当中,就表现为语言复杂度的不同。这也造成了计算机看得懂“计算机语言”,却看不懂人类语言的现象。在图上圆心最中间的,也就是最简单的语言,我们称之为正则语言(regularlanguages)。
正如字面上的意思,正则语言相对比较“规范”。它可以由一定的“生成语法”来生成,并且,可以被一个“有限状态机”接受。
让我们用下面这个例子来解释。我们考虑一个正则表达式a(bb)+a,它的意思是匹配任意由a开始,由a结束,而其中有至少两个,至多任意偶数个b的字符串(在这里不考虑开始和结束的约束符号)。
所谓的“有限状态机”,就是如下图的一个“机器”,它有一个起始状态(a),有一个结束状态(最后的a后面的那个双线的圈),当输入的字符串根据其状态转移规则能够走到结束状态时,即说明“接受”了这个字符串。在下图中,当输入为abbbba的时候,这个“机器”会依次根据状态转移的规则,一步一步走到最后的结束状态:
所以我们认为abbbba是符合这个规则的字符串,实际上也符合正则语言的要求。所有符合“正则”规范的字符串的合集,就是“正则语言”。
编程语言,通常是符合乔姆斯基谱系中“正则语言”或是“上下文无关语言”的规范的,因而我们有办法制造出一种规范的方法来处理它们(即下图中的“Non-deterministicpushdown automaton”——不用担心这样看起来很吓人的术语,我们在这个系列中会慢慢介绍的),这就是计算机能够理解编程语言的秘密。
(上表:不同类型的语言及其生成的语法规范)
如果将人类语言看成是一连串的字符串,那它符合这样的规范吗?我们是否可以制造出这样一个“状态机”?并“接受”所有的人类语言(例如:汉语)呢?
很不幸,人类语言的复杂度是高于程序语言的;自然语言是属于Type-0,也就是最复杂的那一种语言。
以我们所举的这道应用题的例子来说,如果我们把“平均成绩”换成“总分”,这就涉及到语义理解的问题。平均成绩的意思是求平均数,总分的意思是求和。电脑必须要具有这样的常识,才能够正确地工作。
60年代第一次“AI寒冬”就是由于所谓commonsense knowledge problem引起的:人们发现如果要采用暴力方法一个一个去定义所谓的常识,这样的工作量过于巨大,超出了人类工作的能力。
或者,如果我们把最后一句话中的小明改成“他”,那么计算机需要通过查询上下文才能正确理解“他”是指谁,这是一个指代消解的问题,而计算机暂时还不具备这个能力。
最后,如果改为问“请问小明最需要给哪一门补课?”,这就是一个有常识推理的问题,计算机需要理解一个常识,即一般而言都会补习最差的那门课,并且进行推理才能得到答案。
所以,我们在这里理清了这样一个概念:虽然现代的计算机聪明到可以理解“编程语言”,但是同样的技巧还不足以让它去理解更加复杂的人类语言。这正是为什么在今天我们还需要成千上万的程序员辛勤地工作的原因了。
上述这种通过严格的逻辑规则来解决AI问题的方法,就是“符号主义”。符号主义正是AI的联合创始人之一、Lisp语言的发明者McCarthy所坚持的学派,这个学派主张:人类智能的问题,归根结底,是可以用符号逻辑的方式解决的,而人类的语言,可以映射到一些抽象的逻辑规则上去。
根据这些规则可以进行推理,然后能够帮助人类解决一些问题。当然我们在上面也看到了,符号主义一个非常大的弊端就在于:在解决实际问题的时候,总是需要一些人类手工编写的规则,而穷尽世间所有的规则的复杂度非常高——这导致了符号主义暂时性的失败。
而与“符号主义”相对的是“连接主义”。连接主义认为解决复杂性的办法就是学习人脑的结构,用“神经元”以及神经元之间的连接来表征世间万物,而深度学习正是这种理念的代表。如果传统的符号主义还不能够解决我们的问题,那么近期取得了巨大进展的连接主义是不是有望在这个问题上取得突破呢?
神奇的深度神经网络,以及不那么神奇的结果
首先让我们来看一个好消息,这篇论文提出了:“神经网络可以模拟通用图灵机”的论点。
(“图灵机”的概念我们会在下一篇文章中具体介绍。)
现在我们只需要对照上面的“乔姆斯基谱系”,看到“图灵机”是可以解析最复杂的“Type-0”语言的,就可以知道,如果神经网络可以模拟“图灵机”,那么一定也可以用于处理非常复杂的语言,譬如说人类的自然语言。
但是落实到实际的应用当中,如果我们希望利用监督式的机器学习方式,也就是说通过构建一个足够庞大、包罗万象的训练数据集来让机器学习到“自动编程”的方法,恐怕不太现实——我们怎么可能得到这么充分的训练数据呢?
所以,也许我们可以将问题稍作简化,先解决一个复杂度相对可控的问题,然后再去考虑通用性。特别地,如果小明的各科成绩都已经储存在一个数据库里了,我们只需要针对这个表来回答一些问题呢?
这样的话,我们的神经网络在给定一个输入的问题的时候(比如说,小明的所有科目的平均分是多少?),会输出以下的内容:
1)列选择。需要知道我们想要操作的列(是“分数”那一列)
2)操作符选择。这里我们想选一个“AVERAGE”的操作。
3)行选择。这里我们想要选择所有行。
只要这三个选项都选对了,我们的神经网络就可以输出正确的答案了。
这正是ICLR2017上面Google发表的一篇文章Learninga Natural Language Interface with Neural Programmer吧(暂时可以译为“神经程序员”)所采取的思路。
这样一个神经网络,要怎样来训练呢?我们是要针对每一个问题,给他标上这三个选项所应该对应的内容吗?这样所需要的标注数量,依然太过庞大了。
所以现实一点,我们希望这个网络能够利用弱监督的方式来进行学习,换句话说,只要对这个问题进行正确答案的标注,这个网络就会自动去学习写程序(而不是死记硬背答案)了。这样的话我们只需要针对一些有针对性的问题来标注少量的答案,就可以训练出这样的一个神经网络了。
但经过这样层层的简化,谷歌的研究人员也还是只取得了以下的成果。
就算用15个这样的模型进行Ensemble,在测试集上也只有37.7%的正确率——这已经是state-of-the-art的结果了。
从这样的结果看来,在第一回合的较量中,人工智能落了下风。
虽然看上去程序员们还不会面临立刻失业的危机,可是别忘了,在AlphaGo征服围棋界之前,人们还一度以为电脑至少还需要10年才能在围棋项目中击败顶尖的人类选手呢。
这其中的奥秘在于,AlphaGo能够根据围棋规则进行左右互搏式的“自学习”。但在自然语言理解的问题中,如果只是像上面介绍的这样进行有监督的学习,是不太可能取得最终的成功的——这也是“连接主义”所面临的一个巨大问题,即使在拥有巨大计算力和海量数据的今天,取得优质的人工标注好的数据集也是很困难的一件事情。