Devlin2018Google_BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

  • 1. Abstract
  • 2. Introduction
  • 3. BERT
    • 3.1 Model Architecture
    • 3.2 Input Representation
    • 3.3 Pre-training Tasks
      • 3.3.1 Task #1: Masked LM
      • 3.3.2 Task #2: Next Sentence Prediction
    • 3.4 Pre-training Procedure
    • 3.5 Fine-tuning Procedure
    • 3.6 Comparison of BERT and OpenAI GPT
  • 总结

1. Abstract

  • BERT是一个基于上下文信息的深度双向表示预训练模型
  • 对于一个具体任务(QA、机器翻译等),只需在BERT模型基础上添加一个输出层进行fine-tuned即可(得到一个针对这个任务的、性能优良的模型),无需再做大规模修改

2. Introduction

目前两种主流预训练语言表示的应用策略:

  1. feature-based:将预训练表示作为额外特征,并使用tasks-specific结构的方法,如ELMo1
  2. fine-tuning:尽可能少地引入task-specific参数,并在预训练参数的基础上,利用实际任务的训练进行微调,如Generative Pre-trained Transformer (OpenAI GPT)2

作者认为,当下的技术未能将预训练表示(尤其是fine-tuning方法)的作用完全开发,原因在于单向(只基于上文或只基于下文)的标准语言模型限制了预训练时结构的选择。因此作者在双向遮蔽语言模型(masked language model)思想的基础上提出了BERT方法:

Bidirectional Encoder Representations from Transofrmers

主要贡献:

  1. 首个基于微调的表示模型,在大量句子级和token级任务上实现最先进的性能,强于许多面向特定任务体系架构的系统
  2. 证明了双向预训练对于语言表示的重要性。与使用OpenAI和ELMo等单向语言模型进行预训练不同,BERT使用遮蔽语言模型来;实现预训练的深度双向表示证明了双向预训练对于语言表示的重要性。与使用OpenAI和ELMo等单向语言模型进行预训练不同,BERT使用遮蔽语言模型来;实现预训练的深度双向表示
  3. 刷新11项NLP记录刷新11项NLP记录

3. BERT

3.1 Model Architecture

模型结构:

多层双向Transformer3编码器

参数:

层(Transformer blocks)数 隐层大小 self-Attention heads 个数 feed-forward/filter size
L L L H H H A A A 4 H 4H 4H

文中使用的两个模型:

L L L H H H A A A T o t a P a r a m e t e r s Tota Parameters TotaParameters
BERT_ base 12 12 12 768 768 768 12 12 12 110 M 110M 110M
BERT_large 24 24 24 1024 1024 1024 16 16 16 340 M 340M 340M

其中,和OpenAI GPT有完全相同大小的BERT_base用以与GPT作性能比较。BERT与GPT、ELMo的结构对比图如下图所示,三种结构中,只有BERT在所有层中都联合使用了上下文信息。
Devlin2018Google_BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding_第1张图片

3.2 Input Representation

文章给出的输入表示既可以明确表示单个文本句子,也可以明确表示一个文本句子对(如问答对)。对于一个给定的token,输入表示为token embeddingsegment embeddingposition embedding之和。
Devlin2018Google_BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding_第2张图片
具体内容如下:

  • 使用包含30,000个token词汇表的WordPiece embeddings,用##代表分词
  • 支持最长为512个token的文本序列
  • 每个句子的第一个token为特殊分类embedding[CLS],对应于这个token的Transformer输出用于分类任务中的聚合序表示,对于非分类任务此向量可忽略。
  • 句子对被打包成一个句子,并以特殊token[SEP]进行分隔,此外,文中还将已学习好的sentence A embedding添加到第一个句子的每个token中,也即 E A E_A EA,将sentence B embedding添加到第二个句子的每个token中,也即 E B E_B EB。如果输入的是单个句子,则只需使用sentence A embedding。

3.3 Pre-training Tasks

文中没有像GPT(从左至右训练)和ELMo(将正反向预测结果简单拼接)模型一样预训练BERT模型,而是采用了两种新的无监督预测任务进行预训练。实际上也很难通过标准语言模型训练一个深度双向表示,因为必然会导致token间接接触到自己,从而使预测变得毫无意义。

3.3.1 Task #1: Masked LM

为了训练一个深度双向表示,论文考虑随机遮蔽输入文本的部分token,并在输出层预测这些遮蔽词,也即遮蔽语言模型MLM(在之后的实验中,将随机遮蔽每个WordPiece句子15%的token)。与之前的一些工作(如denoising auto-encoders)不同,此处只预测遮蔽词,而非重构整个输入。

但使用MLM模型可能存在两个缺陷

  1. 首先是fine-tuning中不会出现[MASK]token,因此容易导致预训练和fine-tuning间失配。因此文中考虑并不始终利用[MASK]代替被遮蔽的token,而是随机选用15%的token代替之:
    - 80%时间内,用[MASK]代替:my dog is hairy→my dog is [MASK]
    - 10%时间内,用随机词汇代替:my dog is hairy→my dog is apple
    - 10%时间内,保持不变:my dog is hairy→my dog is hairy,用以平衡真实token的学习
  2. 每个batch中只有15%的token被预测,因此为了保证收敛需要更多的预训练次数,但最终收益远高于传统模型。

由于不知道哪些词将要被预测或哪些词会被随机替换,Transformer编码器将被迫保持每个输入token的分布式上下文表示。此外,由于随机替换只发生1.5%,因此不会导致模型的语言理解能力恶化。

3.3.2 Task #2: Next Sentence Prediction

大多数下游任务中需要学习两个文本句子之间的关系,如问答系统、自然语言推理等。文中使用了一种可以从任何语料库中简单生成的二进制next sentence预测任务来训练模型。

具体而言,当选定句子A和句子B当作预训练样本时,B以50%的几率被替换为另外一个随机句子,并以1/0输出判断AB是否为Next关系

基于这种方式的预训练模型最终达到了97%—98%的正确率,对QA和NLI任务有所帮助。

3.4 Pre-training Procedure

  • 预训练语料:BooksCorpus(800M words),English Wikipedia(2,500M words)
  • 训练过程:
    - 从语料库中采样两段文本
    - 第一个句子获得A embedding,第二个句子获得B embedding,同时将50%的B随机替换为其他句子(注意结合长度要小于512token)
    - 使用WordPiece进行分词,并将15%token进行遮蔽
  • 损失为平均MLM似然和平均NSP似然之和

3.5 Fine-tuning Procedure

  • 对于sequence级的分类任务,将Transformer的输出作为输入序列的第一个token,也即特殊词嵌入[CLS],其向量表示为 C ∈ R H C∈R^H CRH。此时只需在最后添加一个分类层 W ∈ R K × H W∈R^{K×H} WRK×H K K K为类别个数。类别概率 P ∈ R K P∈R^K PRK P = s o f t m a x ( C W T ) P=softmax(CW^T) P=softmax(CWT)。通过最大对数似然概率法对BERT和 W W W的参数进行微调。
  • 对于span级和token级的预测任务,上述过程需要根据具体任务进行部分调整。

3.6 Comparison of BERT and OpenAI GPT

GBT BERT
基于BooksCorpus训练 基于BooksCorpus和Wikipedia训练
fine-tuning阶段引入分句符号[SEP]和分类token[CLS] 预训练阶段学习[SEP]、[CLS]和句子A/B嵌入
1M; 32,000words/batch 1M steps; 128,000words/batch
对于所有fine-tuning实验,学习率为5e-5 根据不同任务选择最佳的fine-tuning学习率

总结

总而言之,本篇论文主要解决了一个问题:给出了一个预训练好的通用语言模型,以及该模型的结构和预训练方法。

这种通用语言模型在具体应用中只需要简单添加一个输出层,并对参数进行fine-tuning就可以实现非常好的效果,原因在于通过在预训练中加入遮蔽词,使之成为一个真正意义上结合上下文信息进行预训练的语言模型。

此外,通过在预训练中加入Next sentence prediction,使该语言模型在处理句子级问题时也能有非常好的效果。

最后附上一个BERT的中文文本分类code

[1]: Peters2017ACL_Semi-supervised sequence tagging with bidirectional language models
[2]: Radford2018OpenAI_Improving Language Understanding by Generative Pre-Training
[3]: Vaswani2017NIPS_Attention is all you need


  1. 1 ↩︎

  2. 2 ↩︎

  3. 3 ↩︎

你可能感兴趣的:(论文阅读)