自然语言处理是人工智能的一个分支。在自然语言处理领域,有两个相当著名的大语言模型——BERT和GPT。两个模型是同一年提出的,那一年BERT以不可抵挡之势,让整个人工智能届为之震动。据说当年BERT的影响力是GPT的十倍以上。而现在,由GPT-3.5模型产生的chatGPT,则以一己之力,让整个世界重新认识了人工智能。现在,用妇孺皆知来形容chatGPT一点也不为过。是什么让GPT在后来完成复仇,碾压BERT模型?这篇文章带你了解这两个模型的“恩恩怨怨”。
自然语言处理(Natural Language Processing),简称NLP,是人工智能领域的一个重要方向。NLP主要处理四类任务,分别是序列标注、文本分类任务、句子关系判断和生成式任务。
序列标注是NLP中最基础的任务,应用十分广泛,如词性标注、命名实体识别、语义角色标注等实质上都属于序列标注的范畴。
文本分类任务是NLP中的经典问题,包括主题分析和情感分析等。
句子关系判断任务的输入是两个句子,输出是句子间的关系,常用的判别有语义相似度、语义关系推理(蕴含/中立/矛盾)、问答对匹配、搜索相关性排序等。
生成式任务包括对话生成、摘要生成、机器翻译等。
其中,生成式任务就是我们的chatGPT最擅长的任务。我们问它问题,它可以自动生成回答。
在计算机领域,我们一般不喜欢文字,更喜欢数字。所以怎么把文字转换成计算机可以理解的数字,就是一个很重要的问题。
比较早的转换方式是独热编码(one-hot encoding)。独热编码的处理方式是把N个要处理的字(或者单词)转换为一个N维向量,第 i i i个字转换后的向量为 ( 0 , 0 , … , 0 , 1 , 0 , … , 0 , 0 ) (0,0,\dots,0,1,0,\dots,0,0) (0,0,…,0,1,0,…,0,0),其中第 i i i维为1,其它维都是0。这样的弊端也非常明显,那就是当处理的字数比较多的时候,维数会非常高。比如中国有约10万个汉字,为了表示这些汉字,需要10万的向量。这显然是我们无法接受的。
2013年,google提出了word2vec模型。这个模型的提出,使得NLP进入神经网络时代。顾名思义,这个模型就是专门把单词(或者字)转换成向量的模型。通过这个模型,给每个单词赋予了一个低维向量。且意思相近的单词之间,其向量的距离也会越近。向量的每一维也不再是0或1,而是一个0-1之间的实数。这种把高维的文字表示成低维的向量的方式,叫做词嵌入(word embedding)。这样的一个最大的缺点是无法识别多义词。因为一个词在不同的上下文中所表达的意思可能是不一样的,而静态的向量没有办法处理这些情况。
神经网络、深度学习最擅长的事情就是提取特征。而在NLP领域,字与字之间会有一些特征,句与句之间也会有一些特征,可以把这些特征统称为语言学知识。而我们要做的,就是找到一个优秀的特征提取器,把这些语言学知识提取出来。常见的特征提取器有RNN(循环神经网络)、LSTM(RNN的一种特殊形式)、CNN(卷积神经网络)、Transformer。Transformer是目前最好的特征提取器。Transformer就像其另一个霸气的名字“变形金刚”一样,被更多人研究,并不断地变化。
我们的故事要从2018年开始。2018年,被称为自然语言处理元年。这一年,许多重要模型相继发布,为NLP带来了里程碑式的进展。这一年,无监督预训练+微调的模式开始流行。这些重要的模型中,就包含我们的主角,BERT模型和GPT模型。
2018年3月,ELMo模型被提出。ELMo模型基于LSTM这个特征提取器,采用双向训练的模式,会根据上下文的含义来动态产生表示这个词的向量,解决了word2vec不能表示多义词的弊端。ELMo模型先让模型在大量无标注数据集上进行训练,通过双向LSTM,提取数据特征,学习到基本的语言学特征。当应用于下游任务时,只需要给少量的有标注数据集进行训练,模型就能达到不错的效果。这种模式称为预训练+微调,这种模式也被GPT和BERT所采用。无标注数据集的获取相对来说较容易,所以这种无监督预训练+微调也逐渐流行。
2018年6月,GPT诞生了。GPT (Generative Pre-Training Transformer) 是 OpenAI GPT 系列的开山之作。
从名字上可以看出,GPT是基于Transformer的生成式预训练模型。它主要处理的是自然语言处理四大任务中的生成式任务。因为在做生成式任务时,是看不到下文的,只能给出上文来生成下文,所以像ELMo这种双向训练的模式不适合GPT。
Transformer以其卓越的性能击败了LSTM,GPT也以优异的表现战胜了ELMo。
2018年10月,BERT模型横空出世!BERT当年的成绩可谓是拳打ELMo,脚踩GPT,霸占了各大自然语言处理榜单的榜首。而且,在后面几年,BERT的追随者越来越多,衍生出了一系列跟BERT相关的模型,比如RoBERTa、SpanBERT、ALBERT、MacBERT等等,大家都在BERT的基础上进行优化。BERT的影响力可见一斑。
关于BERT,前亚马逊首席科学家李沐曾在2021年11月说过:“如果对自然语言处理在过去三年里面最重要的文章做排序的话,你把BERT排在第二的位置,那么很难有另外一篇论文能够名正言顺地排在第一的位置。BERT及后续的一系列文章使得自然语言处理在过去三年里面有一个质的飞跃。”
那么BERT为什么这么厉害呢?因为BERT结合了ELMo和GPT的优势。相比于ELMo,BERT把特征提取器换成了更加厉害的Transformer(当然还有其它的一些改变,但是这里略过)。相比于单向训练的GPT,它采取了双向训练的方式,使得其产生的向量更加贴合上下文的意思。
和GPT相比,BERT所使用的掩码语言模型任务(Masked Language Model)虽然让它失去了直接生成文本的能力,但换来的是双向编码的能力,这让模型拥有了更强的文本编码性能,直接的体现则是下游任务效果的大幅提升。而GPT为了保留生成文本的能力,只能采用单向编码。以当年的眼光来看,BERT绝对是一个更加优秀的模型。因为既然BERT和GPT两者都是采用预训练+微调的范式,并且下游任务依然是分类、匹配、序列标注等等经典的NLP任务形式,那么像BERT模型这种更注重特征编码的质量,下游任务选一个合适的损失函数去配合任务做微调,显然比GPT这种以文本生成的方式去迂回地完成这些任务更加直接。从BERT模型出来以后,无监督训练+下游任务微调的范式便奠定了它的霸主地位,各类沿着BERT的思路,琢磨如何获得更好的文本特征编码的方法大量涌现,以至于GPT这个以生成式任务为目标的模型显得像一个异类。马后炮地说,如果当时OpenAI顺应大势,放弃生成式预训练这条路,也许我们要等更长的时间才能见到ChatGPT这样的模型。
在自然语言处理四大任务中,GPT更擅长生成式任务,而BERT更擅长其它三个。而在如今,以对话任务为代表的生成式任务成为了主流,且随着参数量的增大,GPT系列的效果也越来越好,这也是GPT后来能打败BERT的重要原因吧。
自然语言处理技术的模型和任务
OpenAI是如何胜过谷歌的?ChatGPT发展简史
语言大模型的进化轨迹
ChatGPT的前世今生:OpenAI的技术“执拗”与“豪赌”