0%

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

译:《BERT:用于语言理解的深度双向Transformer预训练》

论文地址:《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》

Motivation

语言模型预训练已经被证明了在各种自然语言处理任务提升中的有效性,目前主要有两种应用到下游任务的策略:基于特征和微调。目前较火的如ELMo等就是基于特征的模型,而GPT等则是采用微调方法。作者认为,目前的技术限制了预训练的表示能力,特别是对于微调方法,最大的限制是标准语言模型是单向的,这限制了预训练期间可以使用的体系结构的选择。

因此,这篇论文通过提出BERT(基于Transformers的双向编码表示)来改善微调。

方法简介

输入输出表示

如上图,首先每个句子的第一个token总是特殊标识[CLS],然后句子对被打包成一个单一序列,用两种方法来区分句子:

  1. 使用[SEP]分割它们
  2. 给每个token添加学习的embedding表明它是句子A还是句子B

最后,对于给定的token,它对应的输入表示是由对应的token、段和位置嵌入求和组成,如下图:

掩码语言模型(Masked LM)

BERT采用MLM方法来解决目前语言模型只能单向的问题,即:随机遮盖输入token中的一部分,然后对其遮住的部分进行预测。

具体地,是对每个句子随机掩盖15%,同时为了缓解在预训练和微调之间造成了不匹配的问题(因为[MASK]不会在下游任务中出现),对于上述随机mask的15%再采用如下策略:

  1. 80%采用[MASK]
  2. 10%采用随机token
  3. 10%token不变

下一句预测(Next Sentence Prediction (NSP))

为了训练模型理解句子关系,为一个二分类下一句子预测任务预训练,该任务可以从任务语料库中生成。具体地,就是从每个预训练样本中选择句子A和句子B,50%的时间B是A实际的下一个句子(标记为IsNext),50%的时间是来自语料库的随机句子(标记为NotNext)

下游任务使用

对于输入,来自预训练的句子A和句子B类似于:

  1. 释义的句子对
  2. 蕴涵的假设-前提句子对
  3. 问答中的问题-段落对
  4. 文本分类或序列标注中的退化文本-空序列对

对于输出,token表示被喂到token级别任务的输出层,如序列标注或问答任务;[CLS]表示被喂到输出层进行分类,如情感分类。

更具体地,如图:

(a)是句子对分类,输入是两个句子的token,输出是对应的类别标签

(b)是单个句子分类,输入单个句子的token,输出是对应的类别标签

(c)是问答任务,输入是问题和段落的token,输出是开始/结束的位置

(d)是单个句子标注任务,输入是单个句子的token,输出是每个token对应的标签