为什么ChatGPT仿如十万个为什么回答机?
OpenAI推出的聊天机器人ChatGPT在全球范围内成为讨论的焦点。基于强大的GPT模型构建的ChatGPT语言生成系统,拥有非凡的自然语言文本生成能力。经过大量语料库预训练后,它能够胜任各种自然语言处理任务,不仅能根据用户要求生成出十分逼真的文本,如论文、新闻稿、诗词、代码等,还能回答你几乎一切的问题——上知天文下知地理。为什么它会这么强大?本文将对ChatGPT背后的语言模型原理和发展历程做一个简单的介绍。
chatGPT背后是一个强大的语言模型,语言模型是什么呢?举个例子,我们都用过输入法语音转文字,而语言中是有很多同音词的,譬如
这家餐馆的爆炒鱿鱼真好吃!
和
这家餐馆的爆炒由于真好吃!
机器如何根据语音来分辨到底说的是“鱿鱼”还是“由于”?这里就需要用到语言模型。语言模型的任务是,给定一个句子,判断该句子真正会出现的概率。一个好的语言模型,就会给第一句判定一个高概率,而给第二句判定一个低概率。
那么,语言模型如何准确判断一个给定的句子真正出现的概率呢?机器要去读万卷书,使得它非常熟悉人类的语言,了解遣词造句的习惯。而这里的技术问题在于,我们如何设计一个算法或者程序来学习语言的模式,让机器“理解”人类的语言?
有一种简单的办法叫作“Bigram”,它的思路是,扫描所有的文档,统计每一个词,跟在它后面最常出现的词是什么。例如词语“我”,当机器扫描遍很多文档以后可能会发现,“我”后面出现“是”的频率是30%,出现“叫”的频率是20%,出现“想”的概率是30%,等等。而这个频率,就会作为机器判定这俩词一起出现的概率。
假设语言中的词汇量为N,当机器完成学习以后,就会构建出一个N行N列的表格,每一行代表一个词row[i],每一列row[i][j]代表该词出现在词row[i]之后的概率。有了这个表格,机器就能完成语言模型的判定工作了。
我们给它一个句子:“我想你了”,在表格中假设“我”之后出现“想”的概率是30%,“想”之后出现“你”的概率是50%,“你”之后出现“了”的概率是10%,那“我想你了”这个句子整体出现的概率就是30%*50%*10%=0.015。通过这种方法,机器很容易能够判定前文例子中“鱿鱼”比“由于”出现的概率更高。
但是这个简单的方法也有许多问题。很多时候一个词接在另一个词之后的概率,不仅仅取决于那一个词,而是与前面的k个词一起,才决定了下一个出现的词的概率。表格所存储也是一个问题,当k=2的时候,我们的表格已经是N*N大小了,随着k变大,表格会指数增大。此外,这种方法不能自动学习到同义词以泛化模型。
其他构建语言模型的办法还包括手动创建一个知识库,记录名词与名词之间的关系,或者是对于该语言设计一套语法规则,这样可以淘汰掉语法上错误的句子。事实上,比较早期的自然语言处理方法的一大流派就是使用语言学,这样的方法需要大量的人工标注,也欠缺灵活性。
于是,在数据越来越多的情况下,随着机器学习方法、算力等技术进一步发展,尤其在2010年代后,基于深度人工神经网络的方法成为主流。人们不再使用手工的语法规则或者简单的统计模型,而是通过深度神经网络让机器自动从海量数据中学习语言中的上下文、词与词之间内在的关系。
Yoshua Bengio 2003年的论文A Neural Probabilistic Language Model[,后来被广泛认为是早期使用神经网络来进行语言建模的经典工作。这篇论文一开篇便指出了Bigram等模型的两大问题:一是由于表格的指数增大,Bigram等模型没法考虑很长的上下文;二是没有学习到同义词以泛化语言理解能力。
为了解决些关键问题,这篇论文提出了一个两层的前向传播神经网络。这是一种比较简单的神经网络,远远没有后来的这些网络这么复杂,但是它揭示了使用神经网络在语言建模上的有效性。该模型的思路可以总结如下:
论文中给出了这样一个例子,在完成训练以后,模型应该很容易能够从句1泛化到一个新的未见过的句2。
句1:The cat is walking in the bedroom ;
句2:A dog was running in a room。
因为经过大量的学习之后,“猫”和“狗”、“卧室”和“房间”、“走”和“跑”会具有比较接近的特征向量。因此,即使机器在训练集中从未见过句子2,它也会给该句子分配一个类似于句子1的联合概率,而特征向量中一点小的波动对最终的联合概率影响也会较小。
有趣的是,论文还专门提到他们为了训练一个这样的“大模型”,研究人员设计一个并行训练的算法,并且在40台CPU上训练了三周的时间。
随着深度学习和计算机算力的发展,更新的神经网络架构、更大的模型被提出,其中里程碑式工作是2017年谷歌大脑的科学家提出的Transformer模型,即chatGPT中的“T”。
通过引入“自注意力机制”和“位置编码”,Transformer能够学习到一个上下文中,应该给哪些词更多的“注意力”。如我们前文所说,当预测某个词的时候,上下文中不同词的分量、角色会不同,以下面的句子为例:
The dog was running in a room because it was hungry.
这里的it到底是指狗还是指房间呢?通过注意力机制,Transformer模型能够判定在该上下文中it和dog的关联度高,而和room的关联度低。具体的计算过程就是上下文中的每一个词的embedding都会与其他词的词向量做内积,而内积越小,则代表距离越小。宽泛来讲,Transformer模型能够根据上下文来对一个词进行更好地编码,即对于同样的一个词,它在不同的上下文中可以被赋予不同的编码。
自注意力机制的核心计算是内积,批量地看就是矩阵乘法,而矩阵乘法是一个可以高度并行的操作,这使得长距离依赖能够高效地被计算。高度的并行化也使得模型更容易扩展,譬如在GPT-3等大模型中,模型能够考虑的上下文长达2048个词。
在上面的神翻译图中,假如我们用一个使用Transformer模型,机器则能在翻译“小心”的时候,也考虑前面的上下文“注意安全”,这个时候“小心”就会被翻译为“be careful not to”,而不是“be careful”。
有了这样一种强大、灵活、高效的语言建模方式,AI开始进入大模型时代。
Transformer模型掀起了一场人工智能的革命,后续不断有基于Transformer的新模型推出,如谷歌的BERT和OpenAI的GPT。对于习惯用谷歌搜索的同学,事实上你已经无数次地受益于Transformer技术了。而OpenAI在2018年推出的GPT就是chatGPT的前身。
尽管有了Transformer这样一种新的技术,自然语言处理还是保留着一种针对不同的语言任务训练不同的模型的惯例。简单来说,就是专业的模型干专业的事。
而2018年GPT的论文Improving Language Understanding by Generative Pre-Training将机器智能的通用化推向了一个新的高度。研究人员得到结论,与其针对不同的语言任务训练不同的模型,不如先“预训练”一个通用的语言模型。
这个模型不做任何具体的事情,它只负责对人类语言构建一个通用的理解,也就是我们上文说的语言模型,即判定一句给定的话,听起来是正常还是不正常。研究人员发现,一旦对模型进行了大规模预训练以后,后续只需要进行小幅度的“精调”即可让预训练的模型来快速适应一个新的任务,并且效果比专门针对特定任务训练的模型还要好。
在后续发布的GPT二代和三代中,研究人员进一步提高模型的规模后,近乎奇迹的事情发生了:GPT-3已经能够生成高度逼真的语句,甚至可以比人类更有文采。这种大规模的Transformer模型被称为“大语言模型”。
在GPT-3中,研究人员进一步改进了训练方式,称为“上下文中学习”,意思就是,只需要先进行大规模通用知识的预训练,然后做专项任务的时候直接现场学习!即给几个例子,机器就明白你说的什么意思,而且也能有相当不错的表现。至此,人工智能进一步迈向更通用的智能。
ChatGPT和大语言模型也并非万能,它当前依然有各种问题——时不时会言之凿凿地给你一个并不正确的答案。这是因为它是一个基于概率分布的生成模型,它生成的文字是根据它的训练集和你的上下文来最大化概率地生成一个答案,所以天然无法保证所有时候的答案都是对的。尽管如此,GPT-3和ChatGPT已经朝通用智能迈出了一大步。
我们来畅想一下未来,现在的ChatGPT对世界的认知还主要只是来源于人类的语言文字,而人类认知世界的方式是多维的,语言文字只是一种形式,很多信息来源于图像、视频、乃至于味觉和嗅觉。
未来的ChatGPT是否不仅仅是待在家里,而是会以机器人形式出现:以摄像头为眼、以扬声器为嘴、以机械为手足,走出家门,去看看这个世界,在物理世界中和人与自然交互,并得到反馈、修正它的认知。当机器人看遍了花草树木、山川河海、日出日落、人类的悲欢离合,它是否也能以某种方式表达出“情感”和“爱”?AI除了作为人类的助手,是否也能带给我们情感上的陪伴?
让我们拭目以待。