NLP预训练模型系列-GPT

1. BERT

2. GPT


目录

NLP预训练模型系列-GPT

前言

1. Abstract

2. Introduction

3. Related Work

4. Framework 

4.1 无监督预训练

 4.2 有监督微调

4.3 任务相关的输入转换

5. Experiments

5.1 setup

5.2 Supervised fine-tuning

 6. Analysis

 7. Conclusion

总结



前言

本文记录经典论文GPT的阅读记录。GPT是OpenAI的生成式预训练语言模型。目前已经有GPT,GPT-2,GPT-3三个版本了。我们先从最早的GPT开始。有一点需要说明的是,其实GPT是比BERT更早出现的。首先GPT的原文标题是《Improving Language Understandding by Generative Pre-Training》,GPT stands for Generative Pre-Training。


先来看看摘要。

1. Abstract

NLU任务包括文本蕴含(textual entailment),问答,语义相似度评估,文档分类等。从摘要中我们了解到论文主要贡献是提出了:在无标注的文本语料中进行生成式预训练,然后进行判别式微调能获得巨大的性能提升。实验结果是对每个任务微调训练一个模型,12个任务中的9个任务的性能大幅提升(如常识推理提升了8.9%,问答提升了5.7%,文本蕴含提升了1.5%)。

看完摘要,其实我才发现自己之前对GPT是有误解的,我以为GPT是做专门做生成任务的。实际上,至少GPT-1做的还是NLU任务。造成这个误解的原因是:GPT只是说做的是生成式预训练,下游任务还是判别式任务。

文本蕴含任务:给定一个前提文本(premise),根据这个前提去推断假说文本(hypothesis)与premise的关系,一般分为蕴含关系(entailment)和矛盾关系(contradiction),蕴含关系(entailment)表示从premise中可以推断出hypothesis;矛盾关系(contradiction)即hypothesis与premise矛盾。

2. Introduction

        首先提到了无监督学习方式对学习好的表示很大帮助,证据是人们已经大量使用预训练的word embedding来提升NLP任务。

        但是利用无标注文本中的word-level的信息是具有挑战性的,有两个原因:第一,尚不清楚哪种类型的优化目标函数在学习对迁移有用的文本表示方面最有效。第二,如何最有效的将学习到的表示迁移到目标任务上,还没有达成共识。

        因此,本文探讨了一种结合了无监督预训练和有监督微调的半监督语言理解任务方法。目标是学习一个通用的表示以适应各种任务。我们不要求目标任务和未标记语料库属于相同的领域。这是一个两阶段预训练策略:首先在无标注的语料上使用language modeling的目标函数来学习网络的初始参数,然后使用对应的监督目标函数在下游任务上训练。

标准的language modeling的目标函数是最大化如下似然函数:

gpt淘汰nlp gpt nlp_gpt淘汰nlp

是语料,k是context window size,条件概率P使用一个参数为θ的神经网络建模。


         模型架构是Transformer,评估了四个语言理解任务:自然语言推理,问答,语义相似度,文本分类。最后还分析了pre-trained model的zero-shot性能,表明模型获得了对下游任务有用的语言学知识。

3. Related Work

        相关工作中提到了:

  • NLP中的半监督学习:早期工作使用未标注的数据计算word-level和phrase-level的统计特征,然后作为特征输入模型。后来在未标注语料中训练的word embedding提升了很多任务的性能,这些方法都是迁移word-level的信息,而GPT可以捕捉high-level的语义。最近的方法也有学习和利用phrase-level或sentence-level的embedding。
  • 无监督预训练:无监督预训练是半监督学习的特例,它的目标是找到一个良好的初始化点,而修改监督学习目标。后来有研究表明预训练其实充当了一种正则化,使得深度网络更好的泛化。此前有使用LSTM模型进行预训练的,但LSTM模型只具有短范围预测能力,而Transformer可以捕捉更长范围的语言结构。
  • 辅助训练目标:增加辅助无监督训练目标是半监督学习的另一种形式。早期工作有使用的辅助NLP任务包括词性标注,分块,命名实体识别和语言建模来提升语义角色标注。这篇工作其实也用到了辅助目标。

4. Framework 

训练过程分为两阶段:第一段学习一个大容量(high-capacity)的语言模型,第二阶段将模型适用到判别式下游任务上。

4.1 无监督预训练

无监督预训练的目标函数是language modeling objective:

gpt淘汰nlp gpt nlp_gpt淘汰nlp

优化方法是SGD。

架构是多层Transformer Decoder。

如图所示:

gpt淘汰nlp gpt nlp_自然语言处理_03

它是Transformer的一个变体,包括在input context tokens上进行的multi-head self-attention操作接着position-wise feedforward layers用于产生在target tokens上的输出分布:

gpt淘汰nlp gpt nlp_自然语言处理_04

gpt淘汰nlp gpt nlp_gpt淘汰nlp_05

其中U是tokens的上下文向量,n是层数,

gpt淘汰nlp gpt nlp_数据集_06

是token embedding matrix,

gpt淘汰nlp gpt nlp_自然语言处理_07

是position embedding matrix。

 4.2 有监督微调

输入经过网络得到隐层激活

gpt淘汰nlp gpt nlp_gpt淘汰nlp_08

,然后加一个线性输出层来预测y:

gpt淘汰nlp gpt nlp_自然语言处理_09

 因此优化目标是最大化对数似然:

gpt淘汰nlp gpt nlp_机器学习_10

 另外还发现在微调是加入language modeling的辅助目标可以提供监督模型的泛化能力并加速收敛。因此我们优化以下目标:

gpt淘汰nlp gpt nlp_机器学习_11

 微调需要训练的参数只有

gpt淘汰nlp gpt nlp_gpt淘汰nlp_05

和分割符的embedding。

4.3 任务相关的输入转换

将特定任务的结构化输入转换层模型能处理的有序序列。转换方式如上图右方所示。

5. Experiments

5.1 setup

无监督预训练

数据集:BooksCorpus(7000不同的未发表的书籍,包括冒险、幻想、浪漫等题材,数据集中包含大量连续文本)

GPT语言模型在这个数据集上达到了很低的18.4的token level的困惑度。

模型设置:12层decoder-only的transformer,隐藏状态维度为768,12和attention heads,3072位feedforward内部状态维度。Adam优化器,最大学习率2.5e-4,最初的2000次updates学习率从0线性增加,然后余弦退火到0。epochs = 100, batch size = 64(随机采样),序列长度为512个tokens,N(0, 0.02)权重初始化。字节对编码(BPE),词汇表大小40000。residual,embedding,attention dropouts prob = 0.1。修改版的L2正则化(w = 0.01)。激活函数使用Gaussian Error Linear Unit(GELU)。使用学习到的position embedding而不是原始工作中的正弦编码。使用ftfy库清洗原始文本,标准化标点和空白,使用spaCy tokenizer。

微调细节

重用预训练的超参数。对classifier增加0.1的dropout。大多数人数使用6.25e-5的学习率,batch size = 32。模型微调很快,大多数情况3个epochs就够。使用线性学习率递减(linear rate decay),warmup时间超过训练的0.2%。

gpt淘汰nlp gpt nlp_机器学习_13

 = 0.5。

5.2 Supervised fine-tuning

        下游任务包括自然语言推理(NLI,也叫识别文本蕴含,即阅读一和句子对,判断是entailment还是contradiction还是neutral),问答,语义相似度,文本分类。有些任务在GLUE benchmark中。任务数据集:

gpt淘汰nlp gpt nlp_自然语言处理_14

        NLI任务评估了5个不同来源的数据集:图像描述(SNLI),翻译的演讲稿,流行小说,政府报告(MNLI), Wikipedia文章(QNLI),科学考试(SciTail),新闻文章(RTE)。

        评估结果:

gpt淘汰nlp gpt nlp_自然语言处理_15

        问答和常识推理使用了RACE数据集,此外还在Story Cloze Test上进行了评估。

        评估结果:

gpt淘汰nlp gpt nlp_gpt淘汰nlp_16

        语义相似度(也叫paraphrase detection释义检测,即判断两个句子是否语义等价)。这个任务的挑战在于重新措辞(rephrasing),理解否定和处理句法歧义。使用了Microsoft Paraphrase corpus(MRPC), Quora Question Pairs(QQP)dataset,Semantic Textual Similarity benchmark(STS-B)三个数据集。

        分类任务评估了两个:The Corpus of Linguistic Acceptability(CoLA)用于判断句子语法合法性的专家判断,测试语言模型的内在的语言偏置(linguistic bias); The Stanford Sentiment Treebank(SST-2)是一个二分类任务。

        评估结果:

gpt淘汰nlp gpt nlp_自然语言处理_17

 6. Analysis

这一部分主要分析了迁移层数的影响和零次学习(即直接测试)的表现。下图说明了GPT在MultiNLI和RACE上迁移层数的影响以及zero-shot的表现:

gpt淘汰nlp gpt nlp_机器学习_18

可以观察到:迁移层数越多,性能越好。转移embedding可以提高性能,全部迁移提升了9%,这表明每一层都包含了有用的功能。

消融实验:证明了微调是辅助的LM目标函数有助于学习,并且较大的数据集更受益。以及架构优于LSTM。

gpt淘汰nlp gpt nlp_gpt淘汰nlp_19

 7. Conclusion

本文引入了一个能使一个任务无关的单模型具有强大自然语言理解能力的框架:生成式预训练和判别式微调。

GPT原文链接


总结

本次GPT文章的解读,我们了解了GPT的生成式预训练和判别式微调能极大提升模型自然语言理解任务的能力。GPT的架构是Transformer Decoder,它并没有做生成任务。