admin 发布的文章

一、背景

自从transformer出来之后,后面的算法基本上都是基于这个为基础,比如bert是以Encode层,GPT系列的GPT、GPT2、GPT3都是Decode层,下面我们主要讲解一下GPT-2。

1、论文

论文名字:《Language Models are Unsupervised Multitask Learners》
论文地址:Language Models are Unsupervised Multitask Learners

2、论文发表时间

时间:2019年2月
团队:openAI、特斯拉老板马斯克的公司

3、源码

源码:https://github.com/openai/gpt-2
官网:https://www.openai.com/blog/better-language-models/

二、架构

1、架构图

20190803_b_001.png

:注意:
GPT 使用 Transformer 的 Decoder 结构,并对 Transformer Decoder 进行了一些改动,原本的 Decoder 包含了两个 Multi-Head Attention 结构,GPT 只保留了 Mask Multi-Head Attention

2、网络结构参数

因为GPT-2在刚开始的时候openAI并没有开源,而是分了四个阶段放出来,每次放出来的预训练模型参数也不一样。
网络层数:24层
参数个数:15亿
参数文件大小:
训练数据大小:40G
最大上下文字数:1024
2020092823231175.png

三、GPT-2相对于GPT的改进

GPT-2依然沿用GPT单向transformer的模式,只不过做了一些改进与改变。那GPT-2相对于GPT有哪些不同呢?看看下面几方面:

1. 增加数据集:

既然要博览群书,当然得先有书,所以GPT-2收集了更加广泛、数量更多的语料组成数据集。该数据集包含800万个网页,大小为40G。当然这些数据集是过滤后得到的高质量文本,这样效果才能更好的哦~

2. 增加网络参数:

GPT-2将Transformer堆叠的层数增加到48层,隐层的维度为1600,参数量更是达到了15亿。15亿什么概念呢,Bert的参数量也才只有3亿哦~当然,这样的参数量也不是说谁都能达到的,这也得取决于money的多少啊~

3. GPT-2去掉了fine-tuning层:

不再针对不同任务分别进行微调建模,而是不定义这个模型应该做什么任务,模型会自动识别出来需要做什么任务。这就好比一个人博览群书,你问他什么类型的问题,他都可以顺手拈来,GPT-2就是这样一个博览群书的模型。

4. 调整transformer:

将layer normalization放到每个sub-block之前,并在最后一个Self-attention后再增加一个layer normalization。

5. 其他:

GPT-2将词汇表数量增加到50257个;最大的上下文大小 (context size) 从GPT的512提升到了1024 tokens;batchsize增加到512。

6.Byte-level字节对编码

四、删除finue-tune直接做下游任务

1、Reading Comprehension:

使用 CoQA 数据集。输入是 document + conversation history + A: 来引导出答案。

2、Summarization:

用 TL;DR: 引导出摘要。

3、Translation:

为了引导模型做翻译,先找一个英法句子对 (en1, fr1),然后想翻译英语句子 en 的时候,输入是 en1 = fr1 + en =,期待模型自己通过类比知道人类是想让他做翻译。结果模型真的悟出了一点儿道,fr-en 的翻译结果是 11.5 BLEU。这一结果是令人震惊的,因为模型在预训练的时候就没见过法语。用一个 byte-level language detector(https://github.com/CLD2Owners/cld2) 做更详细的分析发现,预训练的数据里混入了 10 MB 法语语料。考虑到语料的量级很少,这一结果依然是令人震惊的。

4、Natural Questions:

也是一个 QA 任务,为引导模型做问答,先搞一个 example qa pair (q1, a1),然后给模型输入 q1 + a1 + q,模型就会回答出 q 的答案。

一、EDA方法

1.同义词替换(Synonym Replacement, SR):从句子中随机选取n个不属于停用词集的单词,并随机选择其同义词替换它们;
2.随机插入(Random Insertion, RI):随机的找出句中某个不属于停用词集的词,并求出其随机的同义词,将该同义词插入句子的一个随机位置。重复n次;
3.随机交换(Random Swap, RS):随机的选择句中两个单词并交换它们的位置。重复n次;
4.随机删除(Random Deletion, RD):以 $p$ 的概率,随机的移除句中的每个单词。

第一种方式主要是利用同义替换的思想。 文中介绍了几个相关的方法,主要还是在于字、词、和句子结构层面上做数据增强。

除了传统的字典、词向量相似度替换的方法,我觉得用mlm的方式去做数据增强这个点更加新颖和符合intuition。

样本生成

模型预测

在这里插入图片描述
5、第二种就是通过“回译”的方法,这在阅读理解领域的榜单中一度有人使用过,比如说《attention is all you need》中在squad数据集上就使用了这个trick。
6、句法级别的改写,生成句法树然后利用规则替换

7.通过上述两个图,能很容易理解,就是预测mask位置的token,本身模型输出的是概率值,所以可以进行一个有效排序,而生成top k个近似的结果。

8、第三种方式, Text Surface Transformation,主要是对句子进行一定规则的扩张和缩写,比如it is可以改写为it's

9、随机噪声插入,这在addsent数据集的论文中使用过,可以使用随机插入、拼写错误插入、句子级别的打乱

10、可以认为是一种句子之间相互增强,本质来将就是找到一个和原始句子相似的句子来替代,类似句子改写?但这句子是真实的?