点击蓝字 关注我们
ChatGPT等大模型的语言处理机制及其理论蕴涵
袁毓林
引用本文:袁毓林. ChatGPT等大模型的语言处理机制及其理论蕴涵[J]. 外国语,2024, 47(4): 2-14.
引言:了解大模型的语言运用能力的来源
大家可能都知道,ChatGPT等现代大型语言模型(large language models,LLMs)在语言理解与生成方面有强大的功能;但是,未必了解它们的工作方式、内部机制和数学原理。那么,ChatGPT等语言大模型到底是怎么达到这种境界的?能不能用一种语言学家也能够理解的方式来简单地解释一下?大模型的这种语言处理机制在语言学理论方面有什么含义?这也许是许多语言学工作者(包括研究生和教师)甚至一般的网友所普遍关心的问题。
本文尝试根据笔者有限的文献阅读和粗浅的专业知识,来介绍和回答这些问题。为了方便,我们将主要集中在两个方面:(一)基于分布语义学的词向量表示及其类比推理功能,(二)基于转换器的语言大模型的注意力机制和前馈网络的工作机理。
ChatGPT的语义理解与常识推理水平例示
任何一个语言学家,只要亲自去测试一下,就会留下如此深刻的印象:ChatGPT在语义理解和常识推理方面,简直有接近人类水平的表现。比如,代词和先行语的回指(anaphora)规律是什么?这种回指规则是纯粹句法的、语义的、语用的、认知的,还是兼而有之的?这在当代语言学理论上长期存在争论,可以说是意见纷纭、莫衷一是。(详见徐烈炯 1995:227−253)但是,ChatGPT却可以在并不理会诸如此类的理论假设的情况下,像一个实干家一样,能够比较准确地识别有关代词的先行语,得出代词的正确的指称意义解读;并且,还能够说明作出这种判断的理由。(详见袁毓林 2024a,b)比如,下面的(1)-(3)是我们用维诺格拉德模式(Winograd Schema,WS)句子,对它进行测试的部分例子:
可见,ChatGPT能够利用“envy”的语义(希望自己在才能、荣誉、地位、境遇等方面跟某人一样好,但是没有达到,所以内心怨恨该人)及相关的常识:更加可能的情况是不成功的人对成功的人心怀怨恨,来确定到底“(un) successful”的是嫉人者Pete还是被嫉者Martin;从而成功地消解代词“he”的指称歧义,并且还能够说明为什么这样做的理由。
下面,我们来看一下ChatGPT对相关的汉语句子的理解能力:
可见,ChatGPT不仅能够理解方位词“后面”的意义,理解反义形容词“(太)高”和“(太)矮”的意义,理解否定表达“看不到”的意义;而且,还拥有关于人体高矮与位置前后能否形成遮挡的常识。从而,得以综合利用这些知识,来推断是邓忠太高和陈亮太矮,最终识别这个句对中两个代词“他”的不同的指称意义。为了检验它是不是真的具有上述关于否定表达的语言知识,我们把例(2)改编成下面的肯定句,来测试ChatGPT:
可见,对于方位词、反义形容词和动补短语的否定表达,ChatGPT都能进行正确的语义解读;并且,它还能够利用方位和物体高矮能否形成遮挡的百科知识,来消解代词可能的指称歧义。
既然ChatGPT等大模型有如此强大的语言运用能力:可以比较准确地理解人类的自然语言,并且生成比较流畅和自然的话语和文本;那么,接下来的问题自然是:大型语言模型是如何做到这一点的呢?下面,我们拟先从语言学的角度介绍语言大模型的工作机制。
基于概率的语言模型和转换器的构架
从技术上讲,ChatGPT等大模型是一种语言模型(language model,LM)。所谓语言模型,指为人类的自然语言所建立的数学模型。通俗地说,就是用数学公式来表示自然语言。比如,早期的生成语法把语言定义成一个由该语言的句子组成的集合,再用重写规则(rewriting rules)来定义句子。例如(详见Chomsky 1957:26−48):
这可以看作是用基于产生式(production)规则的短语结构语法(phrase structure grammar)来给人类自然语言建模(modeling)。但是,这种基于规则的定义方式是离散式的,机器无法理解;所以,是不可计算的,无法在数字计算机上用程序来实现。
与此不同,计算机科学家采用基于统计的概率模型,来估算自然语言中每一个句子出现的可能性,即概率分布(probability distribution)。具体方法是把对句子的概率的计算,分解为组成句子的各个词的出现概率的乘积;即由组成句子的一串词中的每一个词的出现概率(条件概率)相乘,就得到句子的概率。经典的公式为:
虽然这种概率模型不能判断该句子是否符合语法,但是可以用来在给定一个句子的前序词串(previous words)时,计算和预测出下一个位置出现某一个词的概率。比如,上面公式中的P(w3丨w1w2),即表示通过对一定规模的真实文本的统计,就可以由前面出现在w1w2位置上的某两个词,来算出不同的词在w3位置上出现的概率。显然,统计大型语料库中各个词的出现概率和条件概率,这种计量方法是容易实现的。相对于(4)这种基于短语结构语法的语言模型来说,(5)应该算作是基于词语法(word grammar)或n-元语法(n-tuple grammar,n-grams)的语言模型。
下面先简单说明ChatGPT这个名称的意思。前缀Chat,说明这是一款专注于聊天的人工智能软件;词干GPT是一个简称,全称是Generative Pre-trained Transformer(生成式预训练转换器)。中心语“转换器”(Transformer)指一种具有良好的并行计算能力的多层的神经网络,可以处理序列数据(如文本、语音、图像等),是神经网络语言模型的基础组件。转换器一般由编码器(encoder)和解码器(decoder)两个部分组成,前者用以把输入的序列数据转换为一种维度相同的特征表示(feature representation);即一种叫做隐藏状态(hidden state)的向量表示,它可以捕捉数据中的特征和信息;后者用以根据编码器的输出和自身的状态,生成输出的数据并完成有关任务。
以翻译任务为例,编码器的输入是源语言的句子。虽然编码器可以一次性地看到整个句子,但是解码器只能一个一个地生成。因为,自回归(auto-regressive)模型只能根据自己(前面已经预测出来的词语)预测自己(后面即将被预测出来的词语)。解码器以此前时刻的一些输出作为此时此刻的输入,一个词例(token)一个词例地向右转移(shifted right)。因此,在翻译任务中,向右转移输出的是训练数据中源语言对应的目标语言的一个一个向右转移的词例语序。这种工作顺序,在训练阶段是并行的,在预测阶段是串行的。输入是通过“输入嵌入”(input embedding)把词例编码成分布式表示的向量,然后通过“位置编码”(positional encoding)来编码每一个词例的位置信息;因为输入没有位置信息,结果“狗咬人”和“人咬狗”就没有区别。然后,通过多头注意力机制(multi-headed attention,MHA)提取词例与词例之间的相关性。接下来,通过“求和归一”(Add & Norm)进行“残差连接”(residual connection)和“归一化”(normalization)。前者把前几层的输入连接到当前层,防止“梯度消失”(gradient vanishing);后者通过平均来减少数据的差异,以保证网络的有效性。然后,通过“前馈网络”(feed forward network,FFN,一种把数据向前传递进行线性变换和连接的网络),增加可学习的参数的数量。编码以后的结果输入到解码器。解码器跟编码器的结构类似,只是多了带掩码的多头注意力机制。
转换器模型的主要创新点是引入注意力机制MHA。(详见Vaswani et al. 2017)。多头注意力机制是转换器的核心,它可以让语言模型关注输入或输出数据中最重要或最相关部分,并且捕捉数据之间的长距离依赖关系,从而提高模型的理解和生成能力,以及处理复杂问题和目标的能力。每一个注意力头都包含相同的结构——带缩放的点积注意力机制(scaled dot-product attention),但是有着独立的参数。
然而,ChatGPT只有解码器,没有编码器。这样,它只能根据之前生成的数据来预测下一个数据,而不能同时考虑整个数据序列。因此,这是一种自回归(autoregressive)的语言模型。修饰语“生成式的”(Generative)指一种跟“判别式的”(discriminative)相对的机器学习(machine learning)模型,后者通过寻找一个决策边界来将样本划分到对应类别,而前者通过学习每个类别的边界,体现更多数据本身的分布信息,可以用来生成样本,所以普适性更广(详见Microstrong 2020)。生成式语言模型的基本思路是根据前面已知的词语,根据分布概率来预测接下来最可能出现的词语。修饰语“预训练的”(pre-trained)中的“预训练”(pre-train),指基于大型语料库对语言模型进行统一训练,并不考虑具体场景和下游任务(如:翻译、造句、摘要、文案创作等),完成预训练后,再根据应用场景和下游任务的具体情况,对语言模型进行微调(Fine-Tuning,FT)。
文献上通常称类似GPT这样的语言模型为“(语言)大模型”“大型语言模型”,或者“现代大型语言模型”,因为这种语言模型的结构相对复杂,主要是由多层神经元组成的巨大的神经网络,模型参数众多。比如,作为ChatGPT基础的GPT-3有1750亿个参数,那意味着构成转换器的神经网络至少有1750亿个神经节点之间的连接及其权重(weight)。但是,从数学上看,不管语言模型多么复杂,它们都只是一个函数,可以抽象地表示为“f (x) = y”这样的函数式。比如,假如x的取值是英语句子,y的取值是法语句子;那么,f这个函数就是一个把英语翻译为法语的语言模型。当然,大型语言模型包含的变量数目是非常多的。
由于词向量是语言模型表示自然语言的基础,因而下面一节先介绍词向量。
分布语义学和词语的向量化嵌入表示
受语言符号任意性(arbitrariness)原理的制约,词的形式并不能反映词的意义,也就不能反映不同的词在意义上的同异和远近。比如,我们知道“猫”“狗”的语义关系比“鱼”“虾”近,“草”“树”的语义关系比“雨”“雾”近。问题是,我们是怎么获得这种语义直觉的?有没有一种可操作的衡量词语之间语义相似性的办法?如果采用指称论(referential theory)的立场,那么词语的意义就是它所指称的事物;或者曲折一点说,词语的意义就是它跟其所指称的事物之间的关系。根据这种观点,人们可以凭借词语所代表的事物之间的相似性,来获得有关词语之间相似性的知识。但是,这种指谓语义学(denotational semantics)之下的认识,不容易形成可操作的衡量词语之间语义相似性的办法。相反,如果采用Wittgenstein (1958)的用法论(use theory)的立场,那么“词的意义是它在语言中的用法”;或者像Firth (1957)所说的:“You should know a word by the company it keeps!”(观其邻,知其意)。这种观点换成描写语言学的说法就是“words that used and occur in the same contexts tend to purport similar meanings”(被用于和出现在相同上下文中的词语往往指谓相似的意义),这后来成为分布语义学(distributional semantics)的核心思想。
显然,这种分布语义学假设可以成为统计语义学(statistical semantics)的基础,也比较容易形成可操作的衡量词语之间语义相似性的办法:通过调查词语在使用的文本的主题领域(topical regions,如新闻、公文、小说、诗歌、博客,等等)、各种组合关系(搭配关系、具体的构式框架)和聚合关系(替换关系和上下位等语义层级关系,等等)等具体维度上的相似性,设定不同类别的词语在语义距离上的远近;并且,投射到一个多维度(或高维度)的意义空间(meaning space),或者语言学的特征空间(linguistic feature space)。
有了意义空间和语义距离的概念,我们就可以用类似建立坐标系(coordinate system)的办法,来确定不同的词语在某种意义空间中的位置及其数字表示。可见,所谓词嵌入(word embedding)就是根据词语在某种意义空间中的位置而指派一个数字(一般是数组),确保意义与用法(分布)上相似的词语在数值上也相似。这就是词语的嵌入性向量表示的要旨。由于词语的意义和用法(分布)太复杂,无法仅用二维来表示;因而现代语言模型往往用几百甚至几千维度的向量空间。于是,每个词的向量就是一长串数字(即数组)。比如,2013年Google发布了word2vec语言模型是300多维。Google研究团队分析了从Google新闻中收集的数百万篇文档,找出哪些单词倾向于出现在相似的句子中。经过多轮次训练,让神经网络学会把类别或意义相似的单词(如“猫”、“狗”和“宠物”等)放置在向量空间中相邻位置。比如,word2vec把英语单词“cat”(猫)表示为在300个维度上取值的300个数字的数组:[0.0074,0.0030,−0.0105,0.0742,0.0765,−0.0011,0.0265,0.0106,…,0.0002]。
值得一提的是,随着现代语言模型规模的扩大,其所用的词向量的维度也越来越多,以便表达更加丰富而细微的语义信息。比如,OpenAI在2018年发布的GPT-1,使用了768维的词向量;其转换器有12层神经网络,神经节点之间的连接权重参数有1.17亿个。几个月以后发布的GPT-2,其最大版本拥有1,600维的词向量;其转换器有48层神经网络,神经节点之间的连接权重参数有15亿个。2020年发布的GPT-3具有12,288维的词向量;其转换器有96层神经网络,神经节点之间的连接权重参数有1,750亿个。这样,语言模型不仅能够区分同音词(如“bank”)的不同意义(银行vs.河岸),而且能够区别多义词(如“magazine”)的不同意义(杂志vs.杂志社)。
基于分布语义学的词语的语义空间,不仅能够反映词语在概念意义方面的亲疏远近,而且,还能反映不同词类的词语在二维的特征空间中的位置关系;特别是语义空间中有关词语之间的某些平行的传播关系(parallel transport),可以降维到二维平面上来明显而直观地揭示。图略(详见Wolfram 2023)。
这样,反映词语在高维的语义空间中的坐标点位置的词向量,就不仅可以捕捉到许多平行或对立的语义关系,而且还可以进行向量的加减运算和词语的意义关系的推理。比如,Google研究团队用“biggest”(最大的)的向量减去“big”(大的)的向量,再加上“small”(小的)的向量,得到的向量最接近于“smallest”(最小的)的向量。换句话说,“biggest”的向量减去“big”的向量,得到的是近于最高级“-est”的向量;最高级“-est”的向量加上“small”的向量,结果自然就是最近于“smallest”的向量。同样,根据“man”与“woman”类似于“king”和“queen”,进行向量运算,不仅可以学会性别角色,而且可以学会“王室君主”这一概念(“king”的向量减去“man”的向量≈“queen”的向量减去“woman”的向量≈“royal”的向量)。推而广之,可以从“印度人”与“印度”类似于“美国人”和“美国”上,学会“国籍”这一概念;从“巴黎”与“法国”类似于“柏林”和“德国”上,学会“首都”这一概念;从“不道德的”与“道德的”类似于“不可能的”和“可能的”上,学会“反义关系”这一概念;从“mice”与“mouse”类似于“dollars”和“dollar”上,学会“复数形式”这一概念。总之,词向量编码了词语之间微妙而重要的关系,成为现代语言模型的一个必不可少的基础。
转换器语言模型是如何进行后词预测的?
如上文所说,ChatGPT的前身GPT-3模型的转换器有96层神经网络;其中每一层都是一个转换器,都接受一系列跟输入文本相对应的向量作为输入;并且,每一层都根据上下文等信息来添加信息,帮助澄清有关歧义或模糊词语的意义,以便更好地预测下一个可能出现的词语。比如,假定输入文本是“John wants his bank to cash the”(约翰想让他的银行兑现)。这些单词首先被表示为word2vec风格的向量,并传送到第一个转换器;这个转换器可能根据上下文信息,确定“wants”和“cash”都是动词;然后模型会通过修改词向量的方式来存储这一信息。这些新的向量被称为“隐藏状态”(hidden states),并传送到第二个转换器。这第二个转换器可能添加了另外两个词的上下文信息,来帮助澄清“bank”指银行,而不是指河岸;并且,“his”回指先行词“John”。于是,它产生了另一组隐藏状态向量。这种向量反映的是该模型之前学习到的所有信息。有研究指出,GPT-3模型的前几层专注于理解句子的语法,并解决上文所示的歧义问题;后几层则致力于理解整个段落的高层次信息,比如文本中人物的性别、年龄、跟其他人的角色关系、当前及以前的位置、个性、目标等等。其实,迄今为止,研究人员也并不完全了解语言大模型是怎样跟踪这些信息的,只是从逻辑上推断:模型在各层神经网络之间传递信息,必须通过修改隐藏状态向量来实现。
大家可以设想一下,GPT-3的最强版本使用具有12,288个维度的词向量;也就是说,每一个词都由一个包含12,288个数字的数字列表来表示。于是,每一个词的上下文的各种有关信息都得到了记录,并且可以被后面的网络层读取和修改。这样,不仅加深了模型对于输入文本(包括通过后词预测而新产生的文本)的意义的理解,而且便于网络的最后一层输出一个包含所有必要信息的隐藏状态,来准确地预测下一个单词。
下面,我们一起来看一下每个转换器内部的工作情况。转换器在更新输入段落的每一个单词的隐藏状态时,主要有两个处理过程:1)在注意力步骤中,神经网络会在每一个词的周围进行观察,查找具有相关背景并彼此共享信息的其他词语。2)在前馈步骤中,神经网络会“思考”每一个词在前面注意力步骤中收集到的信息,并且尝试预测下一个单词。为了直观,大家可以把注意力机制看作是单词之间的一种撮合服务(matchmaking service)。神经网络为每一个词都设置三个向量(相当于三张检查表):一个是查询向量(query vector),描述该词所寻找的词语的特征;一个是键向量(key vector),描述该词自身的特征;还有一个是值向量(value vector),反映注意力加权后的词向量。神经网络通过把每个键向量跟每个查询向量进行比对(通过计算点积),来找到最佳匹配的单词。一旦找到匹配的项目,神经网络就把产生键向量的单词的有关信息,传递到产生查询向量的单词。比如,在处理前文提到的句子“John wants his bank to cash the”时,转换器内部的加工过程很可能是这样的:“his”的查询向量可能会表示为‘寻找一个描述男性的名词’ ,而“John”的键向量可能会表示为‘这是一个描述男性的名词’ 。网络检测到了这两个向量匹配,于是把“John”的向量信息转移给“his”的向量。
正如前面所说的,每一个注意力层都有多个“注意力头”。这使得上述信息交换过程可以在每一层上会多次并行地进行,并且每一个注意力头各专注于不同的任务:有的把名词跟代词匹配,以建立回指关系;有的解析同音词或多义词,消除词汇歧义;有的把诸如“Joe”和“Biden”等几个单词连接在一起,识别出有关的姓名或命名实体(named entity)。就这样,一个注意力层上的操作结果,成为下一层中一个注意力头的输入。事实上,上面所提及的任务往往都需要动用多个注意力头。大家可以想象一下,GPT-3的最强版本有96层,每一层有96个注意力头;因此,每一次预测下一个词时,GPT-3将执行9,216个注意力操作。
根据研究机构Redwood Research的科学家Wang et al. (2022)介绍,他们研究了ChatGPT的前身GPT-2怎样预测下一个单词的过程。他们发现,对于“When Mary and John went to the store,John gave a drink to”(玛丽和约翰进入商店以后,约翰把一杯饮料给了)这样的段落,有三种类型的注意力头为预测出这下一个单词“Mary”作出了贡献:1)他们称之为“名称移动头”(Name Move Heads)的三个注意力头,把信息从“Mary”的向量复制到最后的输入词“to”的向量;2)他们称之为“主语抑制头”(Subject Inhibition Heads)的四个注意力头,它们标记了第二个“John”的向量,阻止名称移动头复制作主语的“John”这个名字;3)他们称之为“复制词例头”(Duplicate Token Heads)的两个注意力头,它们把第二个“John”的向量标记为第一个“John”的向量的复制副本,帮助主语抑制头决定不应该复制“John”。这后面两种注意力头的功能,他们是通过对GPT-2的计算过程进行逐步逆向推导而发现的。这三种注意力头的协同作用,使得GPT-2的神经网络能够决定“Mary”是正确的下一个词。也就是说,这九个注意力头使得GPT-2能够理解“John gave a drink to Mary”是有意义的,而“John gave a drink to John”是没有意义的。为此,他们发表了一篇长达25页的论文,来解释他们是如何识别和验证这些注意力头的。这从侧面反映:要完全解释GPT等现代大型语言模型的工作机制,将是一个无比巨大的工程,人类不大可能在短时间内完成。
正如上文所说的,在注意力头与词向量之间传输信息以后,前馈网络会“思考”每个词向量,并且尝试预测下一个单词。在这个阶段,虽然单词之间没有交换信息,但是前馈层会独立分析每个单词,并且可以访问之前由注意力头复制的任何信息。前馈层的神经元是计算其输入加权和的数学函数。前馈层之所以强大,是因为它有大量的连接。比如,输出层有12,288个神经元(对应模型的12,288维词向量),隐藏层有49,152个神经元,它的每个神经元有12,288个输入值(因此每个神经元有12,288个权重参数)。这就意味着,每个前馈层有(49,152﹡12,288+12,288﹡49,152=)12亿个权重参数。这样,96个前馈层就共有(12亿﹡96=)1160亿个参数。这相当于作为ChatGPT基础的GPT-3.5的参数量(1,750亿)的三分之二。
以色列特拉维夫大学的研究人员发现,前馈层通过模式匹配进行工作;隐藏层中的每个神经元都能匹配输入文本中的特定模式,比如,分别是以“substitutes”结尾的词语序列,跟军事有关并且以“base”或“bases”结尾的词语序列,以时间范围结尾的词语序列(如“在下午3点到7点之间”),跟电视节目相关的词语序列(如“原始的NBC日间版本,已经存档”),等等。基本倾向是前面的层匹配特定的单词,后面的层匹配更加广泛的语义类别的短语。当一个神经元跟其中的一个模式匹配时,它会向词向量中添加信息。虽然这些信息目前还不太容易解释,但是在许多情况下,好像都可以看作是对于下一个词的临时性预测。而布朗大学的研究人员发现,前馈层有时使用如上文所示的向量运算来进行类比推理,从而准确地预测下一个单词。例略。
可见,前述的注意力机制和前馈层有一定的分工:前者专注于从提示等较早生成的部分检索信息,而后者使语言模型能够“记住”从训练数据中学到的信息。其中,靠前的前馈层更可能编码跟特定单词相关的事实,比如“特朗普”经常在“唐纳德”之后出现;靠后的前馈层则编码更复杂的关系,比如,添加某个向量来使一个国家的名称变成其首都的名称。
大型语言模型的训练方式
上面介绍了大型语言模型的注意力机制和前馈层神经网络的工作原理,现在简单介绍一下这种拥有上千亿个参数的大模型是如何训练的。
抽象地说,在自然语言处理中,专家们通常把一个文本看作一个词例(token)序列。给定一个语料库,其中的词例的概率分布记作Pdata,语言模型希望通过训练,使得模型输出的概率分布Pθ拟合(fitting)数据的概率分布Pdata。而自回归语言模型把联合概率建模成条件概率的乘积,公式为:
其优化目标为极大似然(Maximum Likelihood)。公式为:
在理想情况下,模型收敛到最优,即Pθ=Pdata(参考秦兵 2023)。也就是说,完成了对语言模型的训练。
但是,实际训练起来却困难重重。好在大型语言模型有一个成功的创新,那就是不需要用人工事先标注好的数据来训练,而是通过预测文本中的下一个词或者中间被掩码的(masked)词语,来学习人类自然语言。这具体的后一个词到底预测得对不对,这是可以在语料库中核实的。这样,质量较高的未经标注的语料库,俨然成了提供标准答案的“有标注”的训练数据库。这种语料是容易获得并且数量庞大的,从而有力地推动了大模型的训练规模和质量。比如,大模型接受输入“I like my coffee with cream and”(我喜欢在咖啡里加奶油和),并且试图预测接下来出现的单词是“sugar”(糖)。也就是说,像小学生通过在句子末尾或中间填空而学会组词造句,从而学会一种语言的语法一样。更进一步看,这种后词预测训练等于是在做信息压缩工作(后面的信息被有效地打包在前面的词例序列中);并且,从本质上说,也是在做知识压缩工作(因此,适当的提示就可以唤醒和召回语料库中可能存在的信息)。当然,一个初始化的模型在这方面会表现得很糟糕,因为它的每一个权重参数最初都是从一个随机数字开始的;后来,随着模型“看到”更多的例子(动辄上千亿个单词的文本数据集),它的权重参数逐渐调整,慢慢接近或达到正确的预测。这种情况,有点儿像你住旅馆的第一天洗澡前,尝试调整水龙头的把手的方向,并触摸水流:如果水温太烫或太冷,你会向相反的方向转动把手;越是接近你需要的水温时,你转动把手的幅度越来越小。
现在,我们利用上面这个类比进行想象:首先,有5万多个水龙头,每一个对应着由5万多个词构成的词汇总表中的一个特定的单词;你的目标是,只让跟给定词语序列中下一个单词相对应的水龙头出水(即接续正确的单词)。其次,水龙头后面有一大堆互相联通的管道,管道的上面有一大堆阀门。所以,如果水从错误的管道里出来(即接续不正确的单词),那么你不能只调整水龙头的旋钮。怎么办?如果你是魔法师,或者你会使用魔法;那么你可以派遣一个精灵,或者一支“松鼠部队”,去追踪每一条管道,并且沿途调整它们找到的每一个阀门。由于同一条管道通常供应多个水龙头,因而精灵或松鼠们需要仔细思考如何确定拧紧或松开哪些阀门,以及松紧的程度有多大。当然,这个比喻太疯狂了,因为GPT-3的最强版本有1750亿个参数,人们不可能去建造一个拥有1750亿个阀门的管道网络。但是,拜摩尔定律(Moore’ s Law)所赐,现代计算机的确可以并且确实以这种规模运行。
实际上,大型语言模型的注意力头和前馈层的神经元都被实现为一系列简单的数学函数(主要是矩阵乘法),其行为由可调整的权重参数来确定。就像上面想象的故事中的精灵或松鼠部队通过松紧阀门来控制水流一样,训练算法通过增加或减少语言模型的权重参数来控制信息在神经网络中的流动。
训练过程分成两个步骤:首先进行“前向传递”(forward pass),相当于上面故事中的打开水源,并且检查水是否从正确的水龙头流出。然后关闭水源,进行“后向传递”(backwards pass),精灵或松鼠们沿着每根管道快速移动,并且拧紧或松开阀门。在数字神经网络中,精灵或松鼠的角色由一个称为“反向传播”(backward propagation)的算法来扮演。该算法“逆行”(walks backwards)通过网络,使用微积分来估计需要改变每个权重参数的程度。完成这样一个过程(即对一个示例先进行前向传递,再进行后向传递,来提高神经网络在这个示例上的性能),需要进行数百亿次数学运算。因此,所谓语言模型的训练,主要是调整网络神经元之间的连接权重参数,简称“调参”,或者戏称“炼丹”。训练像GPT-3这样的大型语言模型,需要重复这个过程数十亿次,因为对每个训练数据的每一个词都要进行训练。据OpenAI估计,训练GPT-3需要超过3,000亿万次浮点计算(对每个权重参数进行近2万亿次浮点计算),而这需要几十个高端计算机芯片运行几个月。
对于ChatGPT来说,它的最长路径大约有400个核心层,并且有数百万个神经元,总共大约有1750亿个连接,所以也就有1750亿个权重参数。需要注意的是,ChatGPT每次生成一个新的词例时,都必须进行涉及每个权重参数的计算。在实现上,这些计算可以被组织成高度并行的数组操作,可以方便地在GPU上完成。但是,对于产生的每个词例,仍然需要进行1750亿次计算(最后还要多一点)。因此,当ChatGPT生成一段长文本时,往往需要较长一段时间也就可想而知了。
语言大模型的成功帮助我们重新认识语言
物理学家费曼(Richard Phillips Feynman,1918—1988)说过:“我不能做出来的事物,我就不理解。”(What I cannot create,I do not understand.)我把它演绎为:“理解一个事物的最好的办法就是把它做出来。”(The best way to understand something is to create it.)照此说来,理解人类自然语言的结构机制和工作原理的最好的办法,莫过于造出一种能够生成和理解自然语言的机器,来反观和检验语言学家关于语言的结构和功能的有关理论。不知道是幸运还是不幸,软件工程师们经过70多年不懈的努力,已经为我们造出了ChatGPT等语言运用能力十分强大的现代语言模型。此情此景之下,我们的语言学家与其坐在扶手椅上对ChatGPT评头品足,挑剔指责其“虚假的承诺”(false promise,即提供虚妄的前景),不如想一下:ChatGPT等现代语言模型的成功,能够给当代语言学带来什么样的启示?大模型通过“再造语言”(recreate a language)的方式提醒我们,人类自然语言有哪些值得注意的特点?相应地,我们的句法学和语义学的理论建设和研究方向,应该进行哪些反思?
总结有关学者和相关文献的观点,我们可以发现,这种启示至少有以下五点:
1)基于分布语义学的词嵌入向量表示,对于捕捉和表示语言的意义十分有效。正是认识到词语的具体意义取决于上下文,利用上文信息来预测下一个单词的方法才得以实现;并且,使得语言模型能够通过找出最合适的下一个词的方式,来学习人类语言的运作方式。当然,遗憾还是有的,那就是:最终得到的这种人工智能系统,其内部的运作方式,还不能被人类专家所完全理解;也就是说,现代大型语言模型还没有达到“可解释的人工智能”这种机理透明的“表里俱澄澈”的科学境界。
2)分布语义学的基本假设:语义上越相似的两个词语在分布上也越相似,结果它们越倾向于出现在相似的上下文语境中。这个假设不仅帮助软件工程师解决计算建模(computational modeling)时遇到的“数据稀疏问题”(the data-sparsity problem)(详见Wishart et al. 2017),得以借助同义词或近义词集合中数据丰富的词语的分布来为数据稀疏的其他词语建模;而且,帮助认知科学家回答儿童习得语言时的“刺激贫乏问题”(the problem of the poverty of stimulus,即儿童是如何在输入相对贫乏的情况下快速地学会一种语言的?)(详见Yarlett 2008)。也就是说,我们有理由假定:儿童可能利用同义词或近义词进行类推和泛化(generalization),来从有限的输入语料上学会一种语言。我们知道,乔姆斯基正是基于“刺激贫乏问题”而坚信先天的普遍语法的必要性的。推而广之,人类的这种类推和泛化能力,也可用以回答“柏拉图问题”(Plato’ s problem):在可借鉴的事物极端贫乏的情况下,人类是如何获得如此丰富的知识的?
3)语义的分布假设既然可以解释语言学习中的泛化现象,那么自然可以解释:为什么人类可以通过少量的例子来学会完成各种语言任务?比如,从陈述句上变换出疑问句,从主动句上变换出被动句,等等。值得一提的是,2020年OpenAI在推出GPT-3时,发表了一篇由Tom Brown领衔,包括Ilya Sutskever在内的31位作者,长达75页的论文《语言模型是少样本学习者》(Language Models are Few-Shot Learners),说明只需要给语言模型看几个示范的例子(即少样本),它就可以完成诸如把英语词语翻译成相应的法语词语之类的任务,这就是所谓的“在上下文中学习”(in-context learning)的提示策略。其背后朴实的理念就是“人类不需要很多有监督数据就可以学会大多数的语言任务”(humans do not require large supervised datasets to learn most language tasks)(详见Brown et al. 2020)。换句话说,这种类比推理和泛化是基于人类一般的认知能力。因此,先天遗传的专门化的语言能力和普遍语法假设并不是必需的。
4)语言本身是可预测的,语言的结构规律比我们通常设想的要简单得多。因为,语言的规律性往往跟物质世界的规律性相联系;所以,当语言模型学习了单词之间的语义关系时,通常也在隐性地学习外部世界中事物之间存在的关系。否则,如果人类自然语言真像当代形式句法学和形式语义学所描绘的层次繁复的结构图景,那么人工神经网络语言模型网络恐怕是无法处理的。于是,随之而来的问题便是:当代形式句法学对句子结构的叠床架屋式的树形图构想与分析,有没有掐准自然语言的命门?有没有语言事实根据和理论或技术上的必要?同样,当代形式语义学对句子的语义的多重隐性算子约束的逻辑结构,有没有意义表达上的根据和逻辑技术上的必要?(详见袁毓林 2019)
5)语言运用本身是一种预测的过程,因为人脑是一台“预测机器”,对环境的良好预测和表示是生物能够适应环境的前提。因此,预测应该是生物智能和人工智能的基础。在语言信息的处理过程中,对后续文本的预测也是必不可少的。这方面的研究,在心理语言学领域比较多,但是在理论语言学领域很少见到。我们希望,像预期、反预期、惊异等新兴的语言学理论范畴的探索,能够吸收人工智能和心理语言学上关于语言预测的相关研究,积极为人工智能时代的语言学研究开拓新的学术生长点。
6)最后,但并非最不重要的是,语言能力可能并不是专属于人类的(language maybe not unique to human beings)。像ChatGPT等语言大模型的语言运用能力,已经直逼人类的语言运用水平(详见袁毓林 2024b)。这可能使某些人感到不舒服,觉得人类的自尊心受到伤害;因为它挑战了“语言独异说”,使得语言好像不再是唯一地属于人类的。但是,我们认为,这是我们人类自己设计出来的机械能够“再造语言”,我们的“人性”(human nature)并没有受到冒犯。
参考文献略
欢迎阅览《外国语》2024年第4期
作者简介:袁毓林,博士,教授,博士生导师。研究方向:理论语言学和汉语语言学,特别是句法学、语义学、语用学、中文信息处理和计算语言学。
本文来源:应用语言学研习与区域国别学公众号
往期推荐