Improving Language Understanding by Generative Pre-Training阅读笔记
概述
要说最近NLP最显著的成果, 自然是几乎无人不知, 无人不晓的Bert.
但其实在Bert出现几个月之前, OpenAI在《Improving Language Understanding by Generative Pre-Training》就提出一个很相似的模型GPT, 取得非常不错的效果, 只可惜没得到太多关注.
模型的目标是学习一个通用的表示,能够在大量任务上进行应用。这篇论文的亮点主要在于,他们利用了Transformer网络代替了LSTM作为语言模型来更好的捕获长距离语言结构。然后在进行具体任务有监督微调时使用了语言模型作为附属任务训练目标。最后在12个NLP数据集上进行了实验,9个任务获得了SOTA。
Framwork
模型训练分为两个阶段:
- 第一阶段在大规模语料上训练语言模型
- 第二阶段为fine-tuing阶段. 利用标注数据进行监督训练
1. 无监督预训练
语言模型极大似然函数为:
其中, k表示上下文窗口大小.
GPT利用多层Transformer的解码器部分作为语言模型.
2.有监督的fine-tuning
做有监督的分类任务来进行fine-tuning
hl表示语言模型最后一层transformer块的输出.
极大似然函数如下,
最终的优化目标函数为
实验
实验设置
实验数据集
无监督预训练
首先是语言模型预训练阶段.
这一阶段作者利用BookCorpus数据集进行无监督的预训练, 这个数据集包含超过7000本未出版的书籍.
最终语言模型的token level perplexity达到18.4.
模型规格
- 语言模型采用12层的transformer decoder(768 dimensional states and 12
attention heads). - position-wise前馈网络部分设置为3072维.
- 优化方法采用Adam, 同时设置最大学习率为 2.5e−4
- epoch: 100
- batch size: 64
- 每个输入包含512个token
- L2正则: 0.01
- 激活函数: GELU
- 用fifty和spaCy库对语料进行预处理
Fine-tuning细节
- fine-tuning阶段加上0.1的dropout
- learning rate: 6.25e−5
- batch size: 32
- epoch: 只需要3个epoch
- 0.2% warmup
实验结果
四个任务
- Natural Language Inference
- Question answering and commonsense reasoning
- Semantic Similarity
- Classification