1. 导读

今天阅读的是 OpenAI 2018 年的论文《Improving Language Understanding by Generative Pre-Training》,截止目前共有 600 多引用。

在这篇论文中,作者提出了一种半监督学习方法——Generative Pre-Training(以下简称 GPT),GPT 采用无监督学习的 Pre-training 充分利用大量未标注的文本数据,利用监督学习的 Fine-tuning来适配具体的具体的 NLP 任务(如机器翻译),并在 12 个 NLP 任务中刷新了 9 个记录。

2. 引言

NLP 领域中只有小部分标注过的数据,而有大量的数据是未标注,如何只使用标注数据将会大大影响深度学习的性能,所以为了充分利用大量未标注的原始文本数据,需要利用无监督学习来从文本中提取特征,最经典的例子莫过于词嵌入技术。

但是词嵌入只能 word-level 级别的任务(同义词等),没法解决句子、句对级别的任务(翻译、推理等)。出现这种问题原因有两个:

  • 首先,是因为不清楚下游任务,所以也就没法针对性的进行行优化;
  • 其次,就算知道了下游任务,如果每次都要大改模型也会得不偿失。

为了解决以上问题,作者提出了 GPT 框架,用一种半监督学习的方法来完成语言理解任务,GPT 的训练过程分为两个阶段:Pre-training 和 Fine-tuning。目的是学习一种通用的 Representation 方法,针对不同种类的任务只需略作修改便能适应。

3. 论文动机与创新点

  1. 现实世界中,无标签的文本语料库非常巨大,而带有标签的数据则显得十分匮乏,如何有效利用无标签的原始文本,对缓解自然语言处理相关任务对有监督学习方式的依赖显得至关重要。

  2. 有效的从无标签文本中利用超单词级信息有两个主要的难点:
    ①无法确定什么样的优化目标能学到最有效的文本表征,使之更好的用于迁移目的。
    ②对于学习到的文本表征,采用何种方式将其迁移到目标任务上,目前尚无共识。

  3. 论文中提出了半监督的方式来做语言理解,也就是无监督的pre-train,和有监督的fine-tune。该方法首先利用无监督的pre−train模型,学习到更加普遍、更适用的表征,然后模型以很小的微调迁移到众多特定的有监督学习任务上。在实验效果上,大幅超过了众多任务的state-of-art。不同于word Embedding、ELMo 以无监督的方式学习到一些特征,然后利用这些特征喂给一些特定的有监督模型,这里是先无监督的pre−train模型,然后直接fine-tune预训练后的模型,迁移到一些特定的有监督任务上。

  4. ELMo方法中,训练基于LSTM的双向语言模型能结合上下文内容学习到语义更丰富的词表征,而本论文中预训练的语言模型中使用了transformer(Masked Multi-Head Attention,单向)结构,相对而言,transformer更加鲁棒,在长距离依赖上的效果更好,迁移效果也更好。

  5. 适用场景:无标签样本量(只有X)远大于有标签样本量的数据集(同时有X,y),如果只用这少量的带标签样本训练出的模型泛化能力肯定比较弱,这个时候我们可以先用无标签样本(也就是只用X)预训练好一个语言模型,然后在该语言模型基础上用少量带标签的样本(同时有X,y)进行fine-tune,有监督的训练。

4. GPT模型

GPT 训练过程分为两个阶段:第一个阶段是 Pre-training 阶段,主要利用大型语料库完成非监督学习;第二阶段是 Fine-tuning,针对特定任务在相应数据集中进行监督学习,通过 Fine-tuning 技术来适配具体任务。下图为 GPT 的架构图:
在这里插入图片描述
在这里插入图片描述
上图中,每一层的所有Trm属于一个自左向右的单向transformer,故在embedding输入和上一层的输出到下一层的输入时,都会做self attention操作,而这个self attention操作相当于当前位置cell会结合上一层所有位置的状态信息,这样就相当于双向连接了,因此需要乘以一个mask矩阵,用来屏蔽当前位置后面的位置的隐藏层状态信息。这是transformer decoder的一个关键。如果不做这样的一个屏蔽操作,那么就变成双向的了。

5. Pre train

从上图我们可以看出,GPT 采用 Transformer 来代替 LSTM 作为特征提取器,并基于语言模型进行训练。这里只使用了 Transformer 的 Decoder 部分,并且每个子层只有一个 Masked Multi Self-Attention(768 维向量和 12 个 Attention Head)和一个 Feed Forward,共叠加使用了 12 层的 Decoder。

这里简单解释下为什么没有用decoder中的encoder-decoder attention:语言模型是利用上文预测下一个单词的,因为 Decoder 使用了 Masked Multi Self-Attention 屏蔽了单词的后面内容,所以 Decoder 是现成的语言模型。又因为没有使用 Encoder,所以也就不需要 encoder-decoder attention 了。

对于给定的非监督语料库的 Token 序列 ,基于语言模型的目标函数:
在这里插入图片描述
其中,k是上下文窗口的大小,P为条件概率,Θ 为条件概率的参数,参数更新采用 SGD。

GPT 输入文本和位置 Embedding(采用使用 one-hot 编码),经过 12 层的 Transformer 的 Decoder 后通过 Softmax 得到输出:
在这里插入图片描述
在这里插入图片描述

6. Fine-tuning

在这里插入图片描述

7. Task-specific input transformations

对于某些任务如文本分类等 word-level 的任务,我们可以像上述描述的方式来 Fine-tuning 模型;但是有些任务如问题回答等句子、句子对等结构化输入的任务需要稍作修改才能应用。

针对这种情况,作者提出了一种遍历式的方法(traversal-style),将结构化输入转换成预训练模型可以处理得到有序序列。

对输入转换避免了兼容不同任务,防止对模型进行大量更改,所有的转换包括添加随机初始化的开始标记(< s > )和结束标记(< e > )。下图提供了一个可视化说明:
在这里插入图片描述
上图是对不同任务进行微调的输入转换。将所有的结构化输入转换为 Token 序列,然后使用预训练模型(Transformer)进行处理,最后使用线性和 Softmax 层完成特定的监督学习任务。

  • 对于文本蕴涵(Text Entailment)来说,作者将前提 p 和假设 h 令牌序列连接起来,并使用分隔符($)分开。

  • 对于句子相似(Similarity)来说,为了消除两个句子之间的内在的顺序,作者以不同顺序合并了两个句子并以分隔符进行分割,然后独立地处理每一种顺序并得到两个句子的表征,对两个句子进行元素求和后送给 Linear 层。

  • 对于问答和常识推理(Question Answering and Commonsense Reasoning)来说,有上下文文档 z 、问题 q 和可能答案的集合 { a k } \{a_{k}\} {ak},作者将上下文和问题与每个可能的答案连接起来并在中间添加分隔符令牌$ 得到 [ z ; q ; [z;q; [z;q; $ ; a k ] ;a_{k}] ;ak] 。每个序列都将由模型独立处理,然后通过 Linear 层和 Softmax 层,从而在可能的答案上产生一个输出分布。

8. 实验结果

见论文Improving Language Understanding by Generative Pre-Training

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐