NLP预训练模型论文阅读系列文章目录
1. BERT
2. RoBERTa
3. GPT, GPT-2, GPT-3
4. BART
5. XLNet
前言
NLP号称人工智能领域皇冠上的明珠。本系列文章会对NLP经典预训练模型系列论文做一个学习和记录。
一、从BERT开始
首先从具有深远影响意义的BERT开始。由于网上关于BERT的解读的文章和视频很多了,这里只是重新阅读一下BERT的原文然后做一下记录,记录一些之前没关注的细节即可。
1. Abstract
????????从摘要中,我们主要看到的是BERT的创新点是双向语言表示,使用这个预训练的BERT我们可以只添加一个输出层就能创建很多下游任务的sota模型,包括问答,语言推理。??
? ? ? ? BERT的全称是Bidirectional Encoder Representations from Transformers,可以得知BERT是一个Transformer Encoder。
2. Introduction
? ? ? ? 在Introduction中,论文提到,目前有两种在下游任务利用预训练语言表示的方法:feature-based和fine-tuning。
- feature-based方法:如ELMo,使用任务相关的架构,将预训练的表示作为额外的特征。
- fine-tuning based方法:如GPT,引入少量任务相关的参数,通过简单微调所有预训练的参数,在下游任务进行训练。
????????这两种方法使用同一个预训练目标函数,都是单向语言模型。这种方法对句子级别(sentence-level)的任务是次优的,并且对词汇级别(token-level)的任务,如问答,使用fine-tuneing based方法是非常有害的,因为两个方向的上下文都很重要。
? ? ? ? 因此,我们提出BERT来提升fine-tuning based方法,减轻了单向的限制。这是通过masked language model(MLM)预训练目标函数实现的(类似于完型填空)。即基于上下文预测随机mask掉的单词的vocab id。
? ? ? ? 除了MLM,我们还使用了next sentence prediction(NSP)任务来联合预训练文本对表示。
? ? ? ? 论文的contribution:
? ? ? ? (1)证明了双向预训练对语言表征的重要性
????????(2)证明了预训练的表示减少了针对特定任务的高度工程化的模型的需要。
? ? ? ? (3)BERT提升了11向NLP任务的sota。
code address:? https://github.com/google-research/bert
????????相关工作包括:
- 无监督的feature-based方法,如ELMo:上下文敏感的特征,双向LSTM,提升了问答,情感分析,命名实体识别任务。
- 无监督的fine-tuning based方法,如OpenAI GPT:Left-to-Right LM, 自编码(auto-encoder)目标函数在GLUE中的很多句子级别的任务取得很好的效果。
- 从有监督数据进行迁移学习:如自然语言推理,机器翻译任务,以及CV中的预训练模型4。
4. BERT
?????????贴一下BERT的模型图,模型架构就是一个Transformer Encoder。分为两个步骤:预训练和微调。预训练阶段在无监督数据上训练,微调阶段时,首先用预训练参数初始化,然后所有参数在下游有监督数据上进行微调。注意,每个下游任务都有一个单独微调好的模型,每个任务的模型架构只有很小的区别,即分类头不同。
? ? ? ? BERT报告了两个不同的model size:(L是层数(Transformer blocks, ),H是Hidden Size,A是self-attention的head数)
- BERT-base: L = 12, H = 768, A = 12, Total Parameters = 110M
- BERT-large: L = 24, H = 1024, A = 16,?Total Parameters = 340M
BERT-base选择和GPT模型大小相同是为了方便比较。
????????使用WordPiece embeddings, vocab size = 30000。每个sequence的开始是一个[CLS] token,这个token的最后一个隐藏状态作为做聚合的序列表示用于分类任务。句子对也被打包为一个sequence。使用[SEP]区分两个sentence。
? ? ? ? 如下图所示,Input Embeddings = Token Embeddings + Segment Embeddings + Posotion Embeddings。
4.1 BERT预训练
两个任务:
- Masked LM:每个sequence中随机mask15%的 WordPiece tokens,然后预测masked words。这样做导致和下游任务有一个不匹配问题,因为fine-tuning时没有[MASK] token。因此为了缓解这个问题,我们不是总是replace words with [MASK], 而是先随机选择15%的token positions,然后对选中的position进行一下三种操作:(1)80%的时间[MASK] (2) 10%的视觉random token,10%的时间unchanged。然后Ti(即选中位置的最后一层输出的隐藏状态)被用于预测原来的token,使用交叉熵损失。
- NSP: 许多下游任务是基于理解两个句子间关系的,如问答,自然语言推理,因此我们设置了这样一个next sentence prediction这样的二分类任务。我们选择句子A和句子B,50%的视觉B是真实的下一个句子(IsNext),50%的时间是一个随机的句子(NotNext), [CLS] token的最后一个隐藏状态C用于分类。
预训练数据:
BookCorpus(800M words)和English Wikipedia(2500M words)。Wikipedia只抽取了文本段,忽略了表格和标题。
5 Experiments
GLUE
GLUE是General Language Understanding Evaluation benchmark
batch size = 32, 每个GLUE task fine-tune 3 个epochs。
此外BERT-large在小数据集上有时不稳定。
GLUE测试结果如下表所示:
SQuAD v1.1
Stanford Question Answering Dataset(SQuAD v1.1)包含100k众包问答对,给定问题和来自Wikipedia的包含答案的文章,该任务是预测文章中的answer text span。
结果如下:
SQuAD v2.0?
SWAG
The Situations With Adversarial Generations (SWAG) dataset包含113k句子对对抗样本,用于品谷常识推理,结果如下:
6??Ablation Studies
消融实验主要评估了预训练任务的影响,Model Size的影响,使用BERT做feature-based的方法的实验说明BERT用于feature-based和fine-tuning based方法都很高效。
BERT论文链接
总结
以上对BERT原论文做了较为详细的阅读记录,确实多了解了一些之前没考虑过的细节。
|