[关闭]
@songying 2019-01-03T21:25:48.000000Z 字数 4886 阅读 3171

BERT: Bidirectional Encoder Representations from Transformers

pre-trained-language-model


参考: https://www.jiqizhixin.com/articles/2018-10-12-13

值得一看的paper

[1]Improving language understanding with unsupervised learning
[2] Attention is all you need.

Abstract

Bert: Bidirectional Encoder Representations from Transformers。
通过添加一个额外的输出层来进行微调就能获得很好的结果。

Introduction

目前在下流任务中使用预训练语言模型有两种方式:

在之前的工作中, 两种方法在预训练中采用相同的目标函数,且它们都没有采用双向语言模型来学习通用语言表示。

我们认为目前的方法严重限制了pre-trained representation 且主要的限制在于标准的语言模型是单向的。我们通过Bert来解决这个问题。Bert提出一种新的 pre-training objective: masked language model。

本文贡献如下:

2. 相关工作

捕获.PNG

2.1 Feature-based Approaches

即获得词的向量表示,如Word2Vec,Glove,ELMO。

2.2 Fine-tuning Approaches

先在语言模型上进行预训练模型,然后将模型迁移到下游任务中。这种方法的优点在于大大减少了下游任务学习时的参数量。

2.3 Transfer Learning from Supervised Data

不需要看,只是讲述迁移学习很有用。

3. BERT

本节引入了BERT并讲述了它的细节。

3.1 Model Architecture

Bert 模型结构上是一个多层,双向 Transformer encoder。

我们假定层数为 L, 隐层size为 H, self-attention heads 数目为A,那么有:

与 OpenAI GPT 模型大小相同,主要是为了二者之间比较。 在下文,我们将双向Transformer称为 “ Transformer encoder”, 将单向(仅左)的Transformer称为 “Transformer decoder”。

3.2 Input Representation

我们的 Input Representation 能够清楚的表示单一文本句子或句子对(如[Question, Answer])。每个给定的token, 它的 input representation 是由 corresponding token, segment, 和 position embeddings 集合而成的。如图2所示。

细节如下:

3.3 Pre-training Tasks

BERT 使用两个新的无监督预测任务来训练。

Task 1. Mased LM

为了训练深度双向表征,我们随机遮蔽输入 token 的某些部分,然后预测被遮住的 token。我们将此称为“masked LM”(MLM,类似于我们的完形填空)。在这种情况下,对应于遮蔽 token 的最终隐藏向量会输入到 softmax 函数中,并如标准 LM 中那样预测所有词汇的概率。在所做的所有实验中,我们随机遮住了每个序列中 15% 的 WordPiece token。

虽然该方法能够获得双向预训练模型,但该方法有两个弱点:

Task 2. Next Sentence Prediction

语言模型不能获取两个句子之间的关系,因此我们预训练了一个 binarized next sentence prediction task, 该任务可以从任意单语语料库中轻松生成。 具体来说,我们选定一个句子A,B作为预训练样本,B有50%的可能是A的下一句,也有50%的可能是凯子语料库的随机句子。举例而言:

  • Input: [CLS] the man went to [MASK] store [SEP] he bought a gallon [MASK] milk [SEP]
  • Label: IsNext


  • Input: [CLS] the man [MASK] to the store [SEP] penguin [MASK] are flight ##less birds [SEP]

  • Label: NotNext

其中, NotNext 句子是完全随机选的。

3.4 Pre-training Procedure

预训练数据集采用 BooksCorpus(800M)和English Wikipedia 语料。

为了生成每个训练输入序列,我们从语料库中抽取两段文本,我们将其称为“句子”,尽管它们通常比单个句子长得多(但也可以短一些)。第一句记做 A embedding,第二句记做 B embedding。 50% 的情况下B是A的真正后一句话, 50%情况下B是一个随机句子。两个句子的总长度 <= 512 个 tokens。

我们设 batch_size = 256 ,则有256 sequences * 512 tokens = 128,000 tokens/batch, 训练步数为1000000步,大约33亿 word corpus 中的40个epoch。优化算法采用 Adam, 学习率设为 1e-4, , L2 权重衰减为 0.01。 在所有层使用dropout, 概率为0.1. 我们采用gelu激活函数而非relu。 训练损失为 the sum of the mean masked LM likelihood and mean next sentence prediction likelihood.

3.5 Fine-tuning Procedure

以分类问题为例, BERT的微调是很简单的。 我们将BERT输出层的隐层状态用于分类层的输入, 我们将该隐层状态记为 。微调时需要加入的参数为分类层的参数 , 其中,K是分类标签数。则有 , BERT所有的参数以及W都一起来最大化损失函数。

超参数设置:

我们发现大数据集(100k+)对超参数没有小数据集那么敏感。

3.6 Comparison of BERT and OpenAI GPT

4. Experiments

Ablation Studies

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注