当前位置:   article > 正文

NLP: GPT模型和GPT2.0模型_gpt文本分类

gpt文本分类

1. 简介

NLP模型的发展历程:
Word2Vec->ELMo->GPT->BERT->MT-DNN->GPT2,NLP技术越来越倾向于用更少的有监督数据+更多的无监督数据去训练模型。

2. GPT 模型

思想:先通过无标签的文本去训练生成语言模型,再根据具体的NLP任务(文本分类,QA等),来通过有标签的数据对模型进行微调。

2.1 模型结构

模型使用了2017年提出的Transformer结构,整体是多层单向Transformer:
在这里插入图片描述
训练数据:
8亿词的BooksCorpus数据。

两个阶段的训练:
(1)无监督的预训练
对于无标签的文本 U ={u1,un}, 最大化语言模型的极大似然函数:
在这里插入图片描述
这里, k 是文本上下文窗口的大小。
也就是,利用 上文信息,预测目标单词(下一个单词) u i u_i ui
模型使用随机梯度下降法进行训练。

论文使用的是多层Transformer的decoder的语言模型, input为词嵌入以及单词token的位置信息,经过多头自注意力操作,然后经过position-wise前向层,再对输出向量做softmax, output为词的概率分布:
在这里插入图片描述

(2) 有监督训练阶段
在预训练网络最后一层的输出 h l h_l hl,经过一个线性层,进行预测标签 y.
在这里插入图片描述
优化任务:
在这里插入图片描述
在有监督训练阶段,加入无标签训练阶段的损失,可以:
(a)提高监督模型的泛化能力;
(b)加快收敛
在这里插入图片描述

2.2 下游任务的应用

分类任务
直接微调模型。
文本蕴含
将前提 p 和假设 h 文本进行拼接,中间用分割符号 $ 进行分割。
问题回答QA
将上下文文本 z ,问题 q ,每个候选答案{ a k a_k ak}拼接起来,得到序列:
【z; q; $; a k a_k ak 】, 再将序列输入到预训练模型. 所有含候选答案的序列的前向结果经过softmax层,得到所有候选答案的概率分布。

相似性
将两个文本进行排列(2种可能)得到两个序列,中间使用分割符号$ 区分,最后两个序列的特征向量进行逐元素相加,再输入到线性层中。

2.3 实验细节

模型设定
训练一个12层的Transformer 解码器,masked 自注意力头机制有768维度, 12个Attention heads。position-wise 前向网络有3072维。使用ADAM优化器,最大学习率 2.5e-4. 学习率线性经过2000步从 0 增加到最大,在减少到0,使用 cosine schedule. 512个tokens, batchsize 64, 100 epochs.
Layer norm 采用 N(0,0.02)进行权重的初始化。 Bytepair encoding (BPE) , 残差, Attention dropout比例是0.1 . 修正的L2 规范, w = 0.01。使用 Gaussian Error Linear Unit (GELU). 学习 位置编码position Embedding,原始论文是固定的sinusoidal 位置编码。 使用 ftfy 清洗原始的文本, spaCy tokenizer 处理一些标点符号,空格。

微调阶段:使用预训练阶段的超参数, 分类器使用0.1 的dropout, 使用 6.25e-5的学习率, batch size为32, 3个epochs. 线性学习率, 在0.2%进度的学习使用warm up。无监督损失权重lambda 0.5.

3. GPT 2.0

训练数据
GPT2 使用了带有任务信息的数据, 使用了40GB的高质量语料进行训练。
常见的学习一个任务的框架是评估条件概率分布:
在这里插入图片描述
BERT的Masked language model 就是对
在这里插入图片描述
进行建模。

但是一般一个普通系统需要对多个任务进行执行,虽然输入一样,但是任务不同:
在这里插入图片描述
之前的训练数据,一般是新闻文章,Wikipedia, 小说等。GPT2使用了尽可能大的,收集尽可能多的领域和上下文任务的自然规范解释。
数据来源网络爬虫。为了提高数据质量,只对人类策划,过滤的网页进行爬虫,比如从Reddit以及所有的出站链接。并且为了提取HTML的文本,使用了Dragnet和Newspaper的内容提取器。移去了Wikipedia的文本,主要这是公共的数据来源,可能由于将训练数据和测试评估任务结合而导致分析复杂化。

数据的输入经过 Byte Pair Encoding,BPE,字节对编码。这是一种字符和单词级别之间的语言建模。有效地在字级输入。

模型结构
和GPT 基本一样。

Transformer从常规的24层block加大到48层block。
在这里插入图片描述
可以看到48层Transformer的参数量得到了15亿,之前的GPT12层是1.1亿。
BERT base是1.1 亿参数; BERT large 是24层,3.4亿。

主要的修改:
(1)layer norm 放到每个sub-block 之前, 而且增加了一个额外的LN层在最终的Attention block。
(2)残差层的参数初始化根据网络深度调节,scale 1 / n 1/\sqrt n 1/n , n是残差层的数量。
(3) 扩大了字库大小到50257,
(4)输入序列长度,从512到1024;
(5)使用更大的batch size 512。

模型效果
GPT2 只有预训练的无监督训练阶段,
在这里插入图片描述
随着模型参数的增加,模型的困惑度 perplexity是下降的趋势,也就是模型仍然处于欠拟合的状态。

总结
GPT 2.0 第二阶段不再通过微调进行有监督做下游任务了。
至于GPT2.0为什么在BERT已经明确证明了双向语言模型的效果更好的情况下依然坚持做单向语言模型,可能是因为GPT2.0主要做的是无监督的任务中用向后生成的方式来输出的关系。


参考:

  1. Improving Language Understanding by Generative Pre-Training;
  2. zhihu OpenAI GPT算法理解 ;
  3. Language Models are Unsupervised Multitask Learners
  4. 如何评价openAI GPT-2?
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/342540
推荐阅读
相关标签
  

闽ICP备14008679号