【NLP】GPT:第一个引入Transformer的预训练模型
目前两种最重要的预训练语言模型,一种是前面介绍过的BERT,另外一种就是GPT。
GPT出了两个版本,GPT1.0和GPT2.0,GPT2.0相对于GPT1.0差别不大,可以认为是它的增强版。本篇介绍GPT1.0和GPT2.0,看看它于BERT有什么不一样。
作者&编辑 | 小Dream哥
1 GPT是什么
General Pre-Training(GPT),即通用预训练语言模型,是一种利用Transformer作为特征抽取器,基于语言模型进行训练的预训练语言模型。
所以,理解GPT主要熟悉两个方面即可,即语言模型和其由Transformer组成的结构。
2 语言模型
一个语言模型通常构建为一句话的概率分布p(W),这里的p(W)实际上反映的是W作为一个句子出现的概率。 说成大白话,语言模型就是计算某个句子出现的概率。
对于一个由T个词按顺序构成的句子,P(W)实际上求解的是字符串的联合概率,利用贝叶斯公式,链式分解如下:
从上面可以看到,一个统计语言模型可以表示成,给定前面的的词,求后面一个词出现的条件概率。
我们在求P(W)时实际上就已经建立了一个模型,这里的诸多条件概率就是模型的参数。如果能够通过语料,将这些参数都学习到,就能够计算出一个句子出现概率。
GPT的预训练过程就是利用语料,构造训练数据,利用上述语言模型,不断预测,学习参数的过程。
3 GPT模型结构
上述介绍了GPT如何利用无监督语料和语言模型构建任务进行训练。那么GPT的网络模型结构长什么样呢?训练过程优化的网络,是个怎么样的网络呢?我们来看看。
GPT中引入的是Transformer中的解码器部分,结构如下图所示:
解码器与编码器的差异在于self-attention层上,解码器加了一层掩码,这是为了在自注意力计算的时候屏蔽了来自当前计算位置右边所有单词的信息。试想一下,在上述语言模型中,如果在预测下一个词时,已经知道下一个词的信息了,这不是作弊吗?这一点是与BERT这种双向结构不同的地方。
如上图所示,GPT就是由12个这样的解码器堆叠而成,如果看过之前我们分析BERT文章的同学,对这种结构的理解,应该会游刃有余了。
这里还值得一说的是下游任务如何基于GPT预训练之后进行Finetune。以分类为例,只需在样本前后分别加上Start和Extract符号,然后输入GPT,再接上分类器即可进行Finetune或者预测了。怎么样?是不是非常的省心?
4 GPT2.0
其实相对于GPT1.0在模型结构和训练模式上并没有本质的区别,GPT2.0仅仅是加大了模型结构和训练语料的规模。
GPT2.0使用了约 1000 万篇文章的数据集,文本集合达 40GB。这样训练出来的语言模型优势很明显,比使用专有数据集来的通用性更强,更能理解语言和知识逻辑,可以用于任意领域的下游任务。
还有一个变化是,在GPT2.0中,OpenAI没有再强调Finetune,也就说,OpenAI认为,只要模型能力够强,语料够好覆盖面够广,Finetune的过程其实不是必要的。
5 总结
GPT,特别是GPT2.0是一个大型无监督语言模型,能够生产连贯的文本段落,在许多语言建模基准上取得了 SOTA 表现。而且该模型在没有任务特定训练的情况下,能够做到初步的阅读理解、机器翻译、问答和自动摘要。
OpenAI非常的倔强,一直沿用单向语言模型的思路。这个特点让GPT2.0的语言生成能力令人惊叹。GPT和BERT是目前为止影响力最大的两种预训练语言模型,至今为止,胜负还没有定论,我们且关注。
总结
GPT是一种非常重要而且成功的预训练语言模型,后续openAI肯定还会继续更新他们的工作,对NLP从业者来说,这是非常值得期待的事情,我们拭目以待。