第一章:语言的困境 — The Language Predicament
语言的魔力从来不在于词汇本身,而在于那些词语之间看不见的连接、那些言外之意、那些只有人类才能理解的弦外之音。当一个人说“我感觉今天有点down”的时候,我们不仅理解了这是一个关于情绪的陈述,还能在脑海中勾勒出一个疲惫的身影、一种微妙的心理状态,甚至推断出可能的成因——也许是工作压力,也许是昨夜没睡好,也许只是天气阴沉带来的莫名低落。这种理解不需要任何明确的定义或规则,它自然而然地发生在每一个具有正常认知能力的人身上,轻巧得如同呼吸。
然而,正是这种对人类而言轻而易举的事情,却成了机器数十年难以跨越的天堑。
在20世纪中叶,当计算机科学家们第一次认真思考如何让机器理解人类语言时,他们面对的是一个看似简单实则深不见底的问题。语言可以像数学公式一样被形式化处理吗?语法规则能否像程序代码一样被精确编写?语义能否通过逻辑推演来捕获?这些问题的答案,在后来的数十年里被反复探索、质疑、推翻、重建,构成了一部充满挫折与启示的技术史诗。而这,正是我们要讲述的故事的起点。
规则之殇:当逻辑遇见模糊
1950年,艾伦·图灵在那篇划时代的论文《 Computing Machinery and Intelligence》中提出了一个至今仍引发深思的问题:机器能思考吗?图灵没有直接回答这个哲学问题,而是设计了一个巧妙的实验——如果一台机器能够在对话中让人类无法区分其与真人的差别,我们是否就有理由说它“会思考”?这个被称为“图灵测试”的思想实验,不仅为人工智能定义了一个可操作的目标,更为自然语言处理研究指明了一个永恒的方向:让机器说出的话,听起来像是人说的。
最早的尝试者之一,是1964年在麻省理工学院诞生的ELIZA。这个由约瑟夫·魏岑鲍姆开发的程序,通过简单的模式匹配和替换规则,模拟了一位罗杰斯学派的心理治疗师与患者的对话。当你向ELIZA倾诉“我今天心情很差”时,它可能会回应“告诉我,你最近有什么让你感到不开心的事情吗?”——这种近乎人类同理心的回应,在当时的技术条件下显得近乎魔法。然而,ELIZA的内部机制却出奇地简单:它并没有真正理解你说了什么,它只是在检测话语中的关键词,然后按照预设的模板进行替换和重述。“我-X”变成了“你-X”,“很差”触发了关于负面情绪的追问,而那些无法匹配任何规则的话语,则被敷衍为“继续说下去”或“我明白了”。
这种被称为“字符串替换”的技术,在今天看来近乎原始,但它却揭示了早期自然语言处理的一个核心假设:如果语言可以被分解为一套明确的规则,那么机器就能通过执行这些规则来理解和生成语言。这个假设根植于语言学中的“语法主义”传统,诺姆·乔姆斯基在1957年出版的《句法结构》正是这一思想的理论基石。乔姆斯基提出,人类语言具有递归的、层次化的结构,可以通过一套形式化的语法规则来生成和解析。他特别强调了“深层结构”和“表层结构”的区别,认为语义理解的关键在于从表层句法形式还原到深层语义内涵。
这些理论洞见极大地启发了计算机科学家。在1960年代到1980年代之间,符号主义人工智能统治了整个自然语言处理领域。研究人员试图编写详尽的形式语法——短语结构语法、转换语法、扩充转移网络——来覆盖人类语言的各种句法现象。他们相信,只要语法规则足够完备、足够精确,机器就能解析任何自然语言句子。更进一步,一些研究者开始尝试将语义也形式化,通过逻辑表达式、语义网络或概念依赖理论来表示词语和句子之间的意义关系。
然而,这场雄心勃勃的探索很快遭遇了严峻的挫折。
首先是规模问题。一个真正有用的自然语言处理系统需要处理成千上万条词汇、数不清的语法规则和例外情况,以及各种上下文相关的语言现象。想象一下,英语中的不规则动词有多少种变化?名词的复数形式有多少例外?介词与动词的搭配又有多少种固定用法?当研究人员试图用手工编码的方式构建这些规则时,他们很快发现自己陷入了一个无尽的漩涡——每解决一个问题,就会发现三个新的问题;每添加一条规则,就会产生两条与之冲突的新规则。
但真正致命的,是语言的歧义性问题。请看这个句子:“Time flies like an arrow.”(时光如箭。)对于人类来说,这个句子的意思一目了然——它是一个关于时间流逝的隐喻性表达。但对于一个基于规则的解析器来说,这个句子却充满了歧义。“Time”可以是名词(时间)也可以是动词(计时);“flies”可以理解为动词(飞)的第三人称单数形式,也可以理解为名词(苍蝇)的复数形式;“like”可以是介词(像……一样)也可以是动词(喜欢)。更复杂的是,这些词还可以组合成完全不同的意思,比如“Time flies like an arrow”也可以被解析为一条关于测量苍蝇速度的指令:“像箭一样测量苍蝇的速度”。在自然语言中,这样的歧义无处不在——它们依赖于语境、常识、世界知识,而这些都是纯粹的形式规则无法捕获的。
语言学家们后来创造了“组合性原则”来描述人类语言的一个关键特征:整体的意义由部分的意义以及它们的组合方式共同决定。这听起来像是对符号主义的支持,但它同时也揭示了符号方法的根本困境。因为意义的组合不仅仅是句法结构的组合,还涉及语义的一致性、语用的恰当性、世界模型的协调——这些都需要远超形式规则的认知能力。一个规则系统可以告诉你“Time”和“flies”在句法上如何组合,但它无法判断哪种组合在语义上是合理的、哪种在语境中是恰当的。
1980年代,研究者们开始意识到,基于规则的系统陷入了某种困境。他们把目光投向了另一种方法——统计方法,希望数据能够带来规则所不能带来的灵活性。
统计之困:数据驱动的局限
统计方法的引入,标志着自然语言处理领域的一次范式转换。它不是从规则出发,而是从数据出发:通过分析大量真实语言材料,统计出词语出现的频率、搭配关系、语法模式,然后用这些统计规律来处理新的语言现象。这种方法的核心假设是:语言不是一套抽象的逻辑规则,而是一种从大量使用中涌现出来的统计模式。
统计方法的先驱可以追溯到1940年代和1950年代。彼时,克劳德·香农的信息论为语言建模提供了数学基础。香农提出,语言可以看作是一个信息源,它按照某种概率分布产生符号序列。一个理想的语言模型应该能够为任何给定的句子分配一个概率——这个概率反映了这个句子在语言中出现的可能性。简单来说,如果一个句子是常见、自然、符合语法的,它应该获得较高的概率;如果一个句子是罕见、别扭、违反直觉的,它应该获得较低的概率。
基于这一思想,研究者们发展出了N-gram语言模型。这个模型的核心思想出奇地简单:要预测下一个词是什么,只需要看前面的N-1个词就够了。例如,在一个二元模型(bigram)中,我们计算每个词在给定前一个词出现的条件下出现的概率。“see”的后面出现“you”的概率,也许比出现“the”的概率更高,因为“see you”是一个常见的搭配。而在一个三元模型(trigram)中,我们同时考虑前两个词的影响,这样可以获得更丰富的上下文信息。
N-gram模型的魅力在于它的简洁性和可扩展性。它不需要任何语法规则,不需要任何语义知识,只需要足够大的语料库和足够的计算能力。在1980年代和1990年代,随着计算机存储容量的增加和语料库资源的丰富,N-gram模型成为语言建模的主流方法。研究者们用它来做语音识别、机器翻译、拼写纠错、文本生成等各种任务。它在很多场景下确实有效——当你的目标是预测下一个最可能的词时,统计方法往往比随机猜测强得多。
然而,N-gram模型的局限性同样深刻而根本。
首先是稀疏性问题。语言中的词汇是如此丰富多样,而任何有限的语料库都不可能覆盖所有可能的词语组合。当我们尝试估计一个低频词序列的概率时,往往找不到足够的样本,导致概率估计严重偏离真实分布。这在处理生僻词、专有名词、或者新兴词汇时尤为明显。更糟糕的是,N-gram模型完全无法处理训练语料中从未出现过的词序列——对于一个完全新颖的短语,它只能赋予一个极低的概率,即使这个短语可能是完全合理甚至富有创造性的。
更深层的问题在于,N-gram模型缺乏对语言深层结构的理解。考虑这两个句子:“The cat sat on the mat”和“The cats sat on the mats”。对于一个三元模型来说,这两个句子中的词序列模式完全不同,需要分别学习。但对于能够识别“cat”和“cats”、“mat”和“mats”之间的复数关系的人类来说,这两个句子遵循完全相同的句法模式,只需要把规则从单数扩展到复数。这种抽象的句法归纳能力,是N-gram模型所不具备的——它只能看到表面的词序列,而无法形成更高层次的语言结构认知。
语义问题则更加棘手。N-gram模型不知道“狗咬人”和“人咬狗”的区别,因为它只关心词语的统计共现关系,而不关心谁对谁做了什么动作。它不知道“小明比小红高”和“小红比小明矮”表达的是同一个语义关系,因为它不理解比较结构的逻辑含义。它更不知道“我昨天在公园看到一群正在飞翔的鸟”和“我昨天看到一群鸟在公园飞翔”其实是两件可能不同的事情,因为它不区分动作发生的时间、地点和方式。统计方法擅长捕捉语言的表层模式,但无法触及语言的意义核心。
1990年代,统计方法遭遇了另一个瓶颈——语音识别的“词语错误率困境”。尽管研究者们不断改进模型、扩大语料库、优化算法,语音识别系统的错误率始终居高不下。到了1990年代末,许多研究者开始意识到,纯粹依靠更多的数据和更复杂的统计模型,已经无法取得实质性突破。语言理解需要某种更深层的东西——一种能够捕捉语义结构、推理世界知识、处理上下文依赖的能力。
就在这时,早期神经网络的失败教训浮出水面,为新的研究方向埋下了伏笔。
神经之殇:过早的尝试与沉痛的教训
今天,当我们谈论深度学习时,很难想象神经网络曾经历过一段几乎被彻底否定的黑暗时期。但历史确实如此——在1980年代末到1990年代初的那场著名的“AI寒冬”中,神经网络,特别是应用于自然语言处理的神经网络,几乎被整个学术圈抛弃。
神经网络的起源可以追溯到1957年,弗兰克·罗森布拉特在康奈尔航空实验室设计了一个叫做“感知器”的装置。这是一种受人脑神经元启发的计算模型:它接收多个输入,对每个输入赋予一个权重,计算加权和,然后通过一个激活函数产生输出。罗森布拉特证明,在一定条件下,感知器可以通过学习自动调整权重,从而学会对输入进行分类。1962年,他出版了《神经动力学原理》一书,系统阐述了感知器的理论和工作机制,一时之间,神经网络成为人工智能领域最激动人心的研究方向。
然而,1969年,马文·明斯基和西蒙·派特斯出版了《感知器:计算几何学导论》一书。这本篇幅不长的书,却如同一盆冷水浇灭了神经网络的热潮。在书中,明斯基和派特斯证明了感知器的一个根本性局限:它无法学习最简单的非线性模式,比如“异或”(XOR)逻辑函数。具体来说,如果你给感知机的输入是两个二进制位,你希望它学习“当且仅当其中一个为1时输出1”,这是感知机做不到的。更一般地说,单层感知机只能解决线性可分的问题,而无法处理更复杂的非线性分类任务。
明斯基的书直接导致了神经网络研究的衰退。政府和企业的资助迅速枯竭,相关论文被拒之门外,许多曾经从事神经网络研究的研究者被迫转向其他方向。在接下来的十多年里,神经网络几乎从学术会议的舞台上消失,取而代之的是符号AI和专家系统的黄金时代。
然而,历史总是充满讽刺。明斯基本人在写那本书时,并未否定神经网络作为一种计算范式的价值——他只是指出了单层感知机的局限性。事实上,他还在书中暗示,如果把多个感知机层次化地组织起来,也许能够解决非线性问题。1986年,戴维·鲁梅尔哈特、杰弗里·辛顿和罗纳德·威廉姆斯发表了著名的论文《通过反向传播算法学习表示》,正式提出了多层神经网络的训练方法——反向传播算法。这篇论文通常被视为深度学习的开端,它重新点燃了学术界对神经网络的热情。
反向传播算法的工作原理可以这样理解:当我们向神经网络输入一个例子并观察它的输出时,如果输出与期望不符(这叫做“误差”),我们就可以把这个误差沿着网络反向传播回去,逐层调整每个神经元的权重,使得下次再遇到类似输入时,误差能够减小。这个过程可以重复进行,直到网络学会正确处理训练数据。
1986年,杰弗里·辛顿、戴维·鲁梅尔哈特和合作者们还提出了另一种重要的神经网络模型——玻尔兹曼机及其简化版本——受限玻尔兹曼机。这些模型引入了“隐藏单元”的概念,允许网络学习数据的内部表示。与其直接预测输出,不如先让网络学习输入数据的有用特征,然后再用这些特征去做预测。这种“表示学习”的思想,后来成为深度学习的核心哲学之一。
对于自然语言处理来说,神经网络的引入带来了新的可能性。1990年代和2000年代初期,研究者们尝试用神经网络来处理各种语言任务:词性标注、句法分析、命名实体识别、语义消歧。他们取得了一些进展,但总体而言,结果令人失望。
问题出在哪里?让我们先看看早期神经网络是如何表示词语的。
在传统的自然语言处理系统中,词语通常被表示为离散的符号:每一个词对应一个唯一的索引,比如“cat”可能是索引245,“dog”可能是索引1673。这种表示方式被称为“独热编码”(one-hot encoding),因为在一个长度为词汇表大小的向量中,只有对应词的位置是1,其他所有位置都是0。这种表示简单直观,但有一个致命的缺点:它把所有词都视为独立的、毫无关联的实体。在独热表示中,“cat”和“dog”的距离,与“cat”和“refrigerator”的距离是完全一样的——因为它们之间没有任何共同的特征。
对于人类来说,“cat”和“dog”显然比“cat”和“refrigerator”更相似——它们都是动物、都是宠物、都会奔跑、都有四条腿。但独热表示无法捕捉这些语义关系。研究人员尝试用各种方法来解决这个问题,比如在独热向量之外附加手工设计的语义特征,或者用层级分类法来组织词汇。但这些方法要么过于粗糙,无法捕捉词语之间微妙的意义差异;要么过于脆弱,依赖于语言学家精心设计的知识库,难以扩展到新的词汇和领域。
更根本的挑战在于计算能力。2000年代初,即使是最先进的神经网络也只包含几百个神经元和几千个连接——这与拥有860亿个神经元、百万亿个突触的人脑相比,简直是沧海一粟。这样的网络容量不足以学习语言的复杂模式,更不足以存储语言背后的丰富知识。与此同时,训练神经网络的时间成本远高于训练简单的统计模型,这让许多研究者望而却步。
就这样,神经网络在语言处理领域经历了一段漫长的蛰伏期。统计方法仍然占据主导地位,尽管它的局限性越来越明显;规则系统虽然已经式微,但在某些特定领域仍有应用。研究者们陷入了某种困境——他们知道现有的方法不够好,但又不知道更好的方向在哪里。
困境之源:语言的深层挑战
为什么让机器理解语言如此困难?这个问题在经历了数十年的探索后,不仅没有变得更简单,反而变得更加尖锐。每一种被尝试过的方法——规则系统、统计模型、早期神经网络——都在某些方面取得了进展,但又都在某些方面遭遇了不可逾越的障碍。这提示我们,语言理解的困难可能根植于语言的某些本质特征,而非单纯的技术问题。
语言的歧义性是第一个重大挑战。这种歧义性体现在多个层面:词汇歧义、句法歧义、语义歧义、语用歧义。一个简单的词如“bank”可以指银行,也可以指河岸;一个看似简单的句子“The police shot the rioters”可能存在歧义——警察是用枪射击了示威者,还是用某种方式击退了示威者?更微妙的是语用层面的歧义:当一个人说“我现在有点忙”时,他可能是在委婉地拒绝交谈,也可能是在期待对方的帮助,或者只是在陈述一个事实。理解语言需要我们在这些歧义中进行消解,而这往往需要超出句子本身的背景知识和推理能力。
语言的递归结构是另一个深层挑战。人类语言允许无限嵌套的层级结构。请看这个句子:“The rat that the cat that the dog chased bit ran.”(那只被追逐猫的狗咬过的老鼠跑了。)要理解这个句子,你需要准确追踪“老鼠”、“猫”、“狗”之间的多层关系——这是一个令人眩晕的递归游戏。乔姆斯基著名的例子“Colorless green ideas sleep furiously”(无色的绿色思想愤怒地沉睡)更是揭示了语法的创造力:即使是完全符合语法、完全不可能有意义的句子,我们仍然能够理解它们的结构。语言允许我们构造出从未见过、甚至永远不会在现实中出现的句子,这种递归的生成能力是任何有限规则集合无法完全覆盖的。
语言的上下文敏感性则更加微妙。我们说话的意义往往取决于谁在对谁说、在什么场景下说、说话者的意图和期望是什么。同样的字面话语,在不同语境下可能传达完全不同的含义。“Could you pass the salt?”(你能递一下盐吗?)在字面上是一个关于能力的疑问,但在餐桌上它是一个请求。当我们说“It's cold in here”时,可能是在请求关上窗户,也可能是对空调温度的客观评价,也可能只是一个无关紧要的闲聊话题。理解这些话语需要丰富的情境知识和推理能力——这是任何脱离语境的纯语言系统都无法提供的。
最根本的挑战或许在于,语言从来不是孤立存在的符号系统。它是人类认知、文化、历史、社会交互的结晶。当你阅读一篇文章时,你调用的不仅是语言知识,还有你对世界的理解、你的常识推理能力、你对人类社会运作方式的认知、你甚至对特定文化背景下人类行为的预期。理解一个笑话需要理解人类的弱点和偏见;理解一部小说需要理解人类的情感和动机;理解一句讽刺需要理解说话者的真实态度与字面表达的差异。这种深层次的语义理解,涉及世界知识、常识推理、情感认知、社会理解——而这些恰恰是传统计算机系统最缺乏的能力。
绝望中的微光
在经历了规则系统的失败、统计方法的困境、神经网络的挫折之后,自然语言处理领域一度弥漫着某种悲观情绪。1988年,言语和语言处理的先驱弗雷德里克·贾里尼克发表了著名的悲观论断:每开除一名语言学家,语音识别系统的性能就会提升一分。虽然这个说法过于极端,但它反映了当时许多研究者对传统语言学方法的深深失望。
然而,恰恰是在这种看似绝望的境地中,变革的种子正在悄然萌发。
1986年反向传播算法的正式发表,为神经网络注入了新的生命力。虽然多层网络在1990年代和2000年代初期的语言应用中表现平平,但研究者们没有放弃对更大规模、更多层次的神经网络的探索。他们逐渐意识到,早期实验的失败可能不是神经网络方法本身的失败,而是网络规模不足、训练数据不足、计算能力不足的结果。
与此同时,统计方法虽然在语义理解上遭遇瓶颈,但它在某些任务上证明了数据驱动方法的价值。研究者们开始思考:是否有可能结合统计方法的数据驱动优势与神经网络的表示学习能力,创造出更强大的语言模型?
此外,语言学领域也出现了新的理论突破。 distributional semantics(分布语义学)的思想——一个词的意义可以从它出现的上下文中推断出来——为词语的分布式表示提供了理论基础。1957年,约翰·鲁珀特·弗斯提出的“你可以通过一个词的伙伴来认识它”这一洞见,开始被计算机科学家们认真对待。如果语义可以用上下文来描述,那么是否可以用向量空间来