上回我们说到,GPT开创性地提出了“预训练+微调”范式,成为了通用语言模型发展的里程碑。今天我们继续聊聊GPT系列的后续发展历程。
3 失落-BERT异军突起
GPT的大作一出,在自然语言处理领域立即引起了人们的关注,可这“热搜”还没持续多久,仅仅过了几个月,BERT( 《Bert: Pre-training of deep bidirectional transformers for language understanding》 )横空出世,迅速成为NLP界的焦点,把GPT挤了下去。图3-1中给出了BERT和GPT截止到今天在谷歌学术的引用量对比,可以看到,BERT的引用量几乎是“前辈”GPT的10倍。
图3-1 GPT的论文引用量和BERT的论文引用量(图源谷歌学术)
BERT到底是啥,牛在哪里?其实说真的,BERT跟GPT特别像兄弟俩:都是“预训练+微调”范式,并且基础编码模型都用的是Transformer。区别主要在于,GPT用的是Transformer的解码器,BERT用的是Transformer的编码器。因此,这就奠定了BERT倾向于“语义理解”任务的基调,并且也限制了BERT对生成类NLP任务的支持。为什么支持任务更少的BERT的影响的范围反而更广呢?
为什么BERT能够迅速超越GPT成为NLP界的宠儿呢?笔者认为原因是:效果。读者们可以去看下BERT发表的论文中公布的效果,在自然语言理解类任务上,随随便便就是第一名的成绩,吊打第二名,甚至个别任务一度超过人类的得分,这与GPT在自然语言理解类的任务上的表现相比强得多,于是人们争相在各种理解类任务上用BERT,提出各种各样的适配性BERT。为什么笔者强调是自然语言理解类的任务?因为BERT是采用的编码器结构,并不支持生成类任务,可以理解成拿通用性换效果,在效果为王的时代,GPT这边就略显冷清了。
“失落”的GPT该何去何从?坚持初心还是追逐热点?请各位继续往下看。
4 坚守初心 - GPT-2
上节讲到,BERT“后来居上”,晚于GPT提出却有着超过GPT的影响。GPT的作者们会何去何从呢?几个月后,GPT2给出了他们的答案:坚守初心。
GPT2在GPT的基础上,进一步提出了更加通用的语言模型思路。他们甚至打破自己最开始提出的“预训练-微调”范式,认为“单任务单领域数据是阻碍泛化性的最大元凶”,提出只要预训练好一个模型,不需要任何额外的有标注样本(zero-shot),模型就能在各种任务上有不错的表现。
如何能够预先训练一个通用的模型呢?在没有标注数据的情况下,模型推理的时候怎么知道该执行什么任务呢?
笔者可以再想想自己,接到一个任务的时候,最先需要的信息是什么呢?任务的指示或者说明对吧?GPT2也是类似的思路。
例如,一个翻译任务可以写成一个序列:把这段英语翻译成中文,Hello world,你好呀世界。再比如,一个阅读理解任务可以写成一个序列:根据文章回答下列问题,文章内容,问题,答案。这样就可以把各种各样的任务用一个语言模型统一实现了。这其实也很接近我们日常处理各种任务的范式:任务指示,已有信息,得到结果。
除了去掉微调过程+训练语料的组织方式变化之外,GPT2相比GPT没有很多的改动,在zero-shot的情况下表现也不错,但是并没有撼动BERT的地位。