GPT语言模型:通过生成式预训练改善语言理解 OpenAI 2018

本文介绍了OpenAI 2018年的GPT模型,通过预训练和微调来提升语言理解能力。GPT采用Transformer结构,通过无监督的Pre-training学习通用表示,然后Fine-tuning适应特定NLP任务,刷新了9项任务的记录。预训练和微调的两阶段方法旨在学习通用文本表征,适用于各种NLP任务。
摘要由CSDN通过智能技术生成

在这里插入图片描述
论文链接:https://www.cs.ubc.ca/~amuham01/LING530/papers/radford2018improving.pdf
代码链接:https://github.com/openai/finetune-transformer-lm
参考文档:https://mp.weixin.qq.com/s/VI5hvcZejJL9ftdDcgMZQA

导读

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

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

1、引言

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

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

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

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

2、论文动机与创新点

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

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

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

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

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

3、GPT模型

GPT 训练过程分为两个阶段:第一个阶段是 Pre-training 阶段,主要利用大型语料库完成非监督学习;第二阶段是 Fine-tuning,针对特定任务在相应数据集中进行监督学习,通过 Fine-tuning 技术来适配具体任务。下图为 GPT 的架构图:
在这里插入图片描述

在这里插入图片描述
上图中,每一层的所有Trm属于一个自左向右的单向transformer,故在embedding输入和上一层的输出到下一层的输入时,都会做self attention操作,而这个self attention操作相当于当前位置cell会结合上一层所有位置的状态信息,这样就相当于双向连接了,因此需要乘以一个mask矩阵,用来屏蔽当前位置后面的位置的隐藏层状态信息。这是transformer decoder的一个关键。可看代码:

def mask_attn_weights(w):
    n = shape_list(w)[-1]
    b = tf.matrix_band_part(tf.ones([n, n]), -1, 0)## 下三角
    b = tf.reshape(b, [1, 1, n, n])
    w = w*b + -1e9*(1-b)
    return w

如果不做这样的一个屏蔽操作,那么就变成双向的了。

分两步走,第一步:利用海量无标签的样本集预训练一个语言模型;第二步:利用预训练后的模型通过fine-tuning迁移到有监督的任务上。

3.1、Pre-train

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

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

对于给定的非监督语料库的 Token 序列 ,基于语言模型的目标函数: m a x   L 1 ( U ) = ∑ i log ⁡ P ( u i ∣ u i − k , ⋯   , u i − 1 ; Θ ) max\space L_1(U)=\sum_i\log P(u_i|u_{i-k},\cdots,u_{i-1};\Theta) max L1(U)=ilogP(uiuik,,ui1;Θ)其中, k k k 是上下文窗口的大小, P P P 为条件概率, Θ \Theta Θ 为条件概率的参数,参数更新采用 SGD。

GPT 输入文本和位置 Embedding(采用使用 one-hot 编码),经过 12 层的 Transformer 的 Decoder 后通过 Softmax 得到输出: h 0 = U W e + W p h_0=UW_e+W_p

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值