雷锋网编者按:本文作者竹间智能深度学习科学家赵宁远。本文从“人机交互的本质”入手,重点解析自然语言处理中的难点及潜在机会,竹间智能自然语言系列专栏文章第一篇,雷锋网已获授权。人机交互的本质是什么?AI能否真正理解人类的语言,甚至感情?根据《圣经·旧约》的记载,在很久以前,人类是使用相同的语言的。而当人类逐渐壮大,在虚荣心的趋使下,他们想建造一座通天的巨塔,耸入云霄,并欲借此达到至神的领域。可上帝对人类的行为非常不满,故令世人的语言互不相通,人类因此陷入无休止的争端和混乱中,计划也就此失败。这就是有名的“巴别塔之谜”。语言是人类社会合作的基石、知识传承的载体,但语言又似乎是人类自身的优点和局限的一面镜子:既可以创造新世界、通达人心,却又不总是那么可靠、时常会引起误解;有时优美纯净,有时又粗俗不堪。对人工智能而言,征服语言似乎是通往终极智慧路上一个无法被忽视的目标。可是什么是语言,语言背后承载了怎样的智慧和秘密?冰冷的机器、缜密的逻辑是否可以穿透语言的表象,触摸到人类的灵魂呢?在AlphaGo令所有围棋大师俯首称臣的今天,深度学习是否也能够在语言领域展现同样的能力?在该系列文章里,竹间智能NLP及语言学专家组,将带大家回顾人类对语言认识的不断演进,讨论自然语言处理的重难点、最新的进展,以及未来发展的方向。也许在不久的将来,人类语言本身也会随着AI的进步而进步吧!第一道难题让我们把思绪从宏大的历史中抽离出来。如果我们希望人工智能可以“征服语言”,那么也许我们应该从征服小学课本开始。对于计算机来说,相比于其他所有的学科,它最擅长的也许就是最抽象、最理性的数学了。数学的语言,相较于别的科目,更强调精确。数学建立在毫不含糊的逻辑之上,那么用于描述数学的语言,当然也就必须精准无误。事实上,对于用单纯数字和符号表示的数学,计算机是可以辨认和理解的,这当然也是计算机被创造出来的初衷。可是如果我们对于计算的过程稍做修饰,将它用自然语言描述出来的时候,似乎计算机就很难去理解了。所以今天我们小试牛刀,看看人工智能在自己擅长的科目能考多少分。让我们来算一道简单的数学题目,“小明上学期期末考试,语文、数学、自然、社会、英语的成绩分别是88分、96分、94分、90分、82分。小明五科的平均成绩是多少?”当然,很多程序员心中已经开始纳闷,这道题目真的很简单,一行代码就可以搞定了。我们暂时先不讨论python解释器如何将上面的代码转换为机器指令,以及底层的硬件如何运作(虽然电脑能够理解“高级”编程语言已经是一个奇迹)——只要在自己的电脑上验证一遍,应该就足以令人信服了:我们想知道的是,人类的语言,和“给计算机看”的语言到底有什么差别,为什么计算机读得懂计算机语言,却读不懂人类语言呢?最新的人工智能的技术到底能不能够弥补这样的差异?语言的秘密为了解释清楚这个对程序员来说似乎不成问题的问题(他们每天都在充当人类和机器之间的翻译官),我们需要先认识一位对人工智能和语言学来说都举足轻重的学术巨擎:乔姆斯基。严格说来,乔姆斯基是站在AI的对立面的。在人工智能“大跃进”的60年代,乔姆斯基更多的是在给人工智能泼冷水。他认为简单的电脑程序永远无法理解语言,因为人类自己还尚未理解语言产生的机制。乔姆斯基坚信人类的语言可以被一种与生俱来的“普遍语法”所描述——在今天,乔姆斯基的大部分语言学理论已经不再被奉为圭臬,但他在对语法的研究中所规划出来的“乔姆斯基谱系”,依然是人们在研究语言的复杂度之时所遵循的原理。(上图:乔姆斯基谱系;越靠近中心的语言越简单,越外层的语言越复杂)语言具有表达形式和所描述的内在逻辑两种属性。所以,我们在讨论语言的复杂度的时候,一方面是在研究为了表达一定的语义,我们需要多么复杂的表达形式;而另一方面,我们想知道这种语言所能表达的概念,能够达到怎样的复杂度——形式非常复杂的语言也许只能表达非常简单的语义,而非简单的符号根据一定规则,就可以表达极其丰富的内容。在上面这道应用题的例子当中,计算机语言和自然语言所表达的意思是一样的,可是表达的复杂程度差别很大。这样的差异,在乔姆斯基谱系当中,就表现为语言复杂度的不同。这也造成了计算机看得懂“计算机语言”,却看不懂人类语言的现象。在图上圆心最中间的,也就是最简单的语言,我们称之为正则语言(regularlanguages)。正如字面上的意思,正则语言相对比较“规范”。它可以由一定的“生成语法”来生成,并且,可以被一个“有限状态机”接受。让我们用下面这个例子来解释。我们考虑一个正则表达式a(bb)+a,它的意思是匹配任意由a开始,由a结束,而其中有至少两个,至多任意偶数个b的字符串(在这里不考虑开始和结束的约束符号)。所谓的“有限状态机”,就是如下图的一个“机器”,它有一个起始状态(a),有一个结束状态(最后的a后面的那个双线的圈),当输入的字符串根据其状态转移规则能够走到结束状态时,即说明“接受”了这个字符串。在下图中,当输入为abbbba的时候,这个“机器”会依次根据状态转移的规则,一步一步走到最后的结束状态:所以我们认为abbbba是符合这个规则的字符串,实际上也符合正则语言的要求。所有符合“正则”规范的字符串的合集,就是“正则语言”。编程语言,通常是符合乔姆斯基谱系中“正则语言”或是“上下文无关语言”的规范的,因而我们有办法制造出一种规范的方法来处理它们(即下图中的“Non-deterministicpushdownautomaton”——不用担心这样看起来很吓人的术语,我们在这个系列中会慢慢介绍的),这就是计算机能够理解编程语言的秘密。(上表:不同类型的语言及其生成的语法规范)如果将人类语言看成是一连串的字符串,那它符合这样的规范吗?我们是否可以制造出这样一个“状态机”?并“接受”所有的人类语言(例如:汉语)呢?很不幸,人类语言的复杂度是高于程序语言的;自然语言是属于Type-0,也就是最复杂的那一种语言。以我们所举的这道应用题的例子来说,如果我们把“平均成绩”换成“总分”,这就涉及到语义理解的问题。平均成绩的意思是求平均数,总分的意思是求和。电脑必须要具有这样的常识,才能够正确地工作。60年代第一次“AI寒冬”就是由于所谓