2018 年,Google 首次推出 BERT(Bidirectional Encoder Representations from Transformers)。该模型是在大量文本语料库上结合无监督和监督学习进行训练的。 BERT 的目标是创建一种语言模型,可以理解句子中单词的上下文和含义,同时考虑到它前后出现的单词。
2018 年,OpenAI 首次推出 GPT(Generative Pre-trained Transformer)。与 BERT 一样,GPT 也是一种大规模预训练语言模型。但是,GPT 是一种生成模型,它能够自行生成文本。 GPT 的目标是创建一种语言模型,该模型可以生成连贯且适当的上下文文本。
BERT和GPT是两种基于Transformer架构的预训练模型,BERT侧重于理解句子中的上下文和含义,适合词语级别的任务;而GPT则专注于生成连贯的文本,适用于生成式任务。两者在训练方式、任务目标和适用场景上有所不同,BERT使用掩码语言模型和下一句预测,GPT采用自回归语言模型。
首先我们拿BERT、GPT和ELMo【关于ELMO在上篇《词向量 - 从Word2Vec到ELMo》中已经有介绍】的模型结构图做一个简要对比,可以帮助更清晰的理解三类模型的差异。
BERT是基于Transformer架构的双向编码器。它通过掩码语言建模和下一个句子预测的任务进行无监督预训练。
GPT是基于Transformer架构,它是一个单向的生成式模型。GPT通过自回归方式预训练,即根据前面的词预测下一个词。
简单来说,如果我们把 ELMO 的特征抽取器(LSTM)换成Transformer,那么我们会得到 BERT模型结构。如果我们把 GPT 预训练阶段换成双向语言模型,也会得到 BERT模型结构。
BERT, GPT之间的不同点
-
关于特征提取器:
-
GPT和BERT采用Transformer进行特征提取;
-
BERT采用的是Transformer架构中的Encoder模块;
-
GPT采用的是Transformer架构中的Decoder模块。
-
-
单/双向语言模型:
-
GPT和BERT都源于Transformer架构;
-
GPT的单向语言模型采用了经过修改后的Decoder模块,Decoder采用了look-ahead mask,只能看到context before上文信息,未来的信息都被mask掉了;
-
BERT的双向语言模型采用了Encoder模块,Encoder只采用了padding mask,可以同时看到context before上文信息,以及context after下文信息。
-
很多NLP任务表明Transformer的特征提取能力强于LSTM,
对于ELMo而言,采用1层静态token embedding + 2层LSTM,提取特征的能力有限。
BERT, GPT各自的优点和缺点
-
GPT:
-
优点:GPT使用了Transformer提取特征,使得模型能力大幅提升。
-
缺点:GPT只使用了单向Decoder,无法融合未来的信息。
-
-
BERT:
-
优点:BERT使用了双向Transformer提取特征,使得模型能力大幅提升。添加了两个预训练任务, 掩蔽语言模型(MLM) + 下一句预测(NSP)的多任务方式进行模型预训练。
-
缺点:模型过于庞大,参数量太多,需要的数据和算力要求过高,训练好的模型应用场景要求高。更适合用于语言嵌入表达,语言理解方面的任务,不适合用于生成式的任务。
-