论文阅读——BERT

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

  • 1. Motivation
  • 2. Contribution
  • 3. Method
    • 3.1 BERT
    • 3.2 Pre-training BERT
    • 3.3 Fine-tuning BERT
  • 4. Experiment
    • 4.1 GLUE
    • 4.2 SQuAD v1.1
    • 4.3 SWAG
    • 4.4 Ablation

1. Motivation

  • 现有的预训练的语言模型是一个单向的模型(过去时刻的上下文预测未来),有一定的局限性。
  • 预训练好一个模型用于NLP特定任务,这一做法结果之前并不是很理想。

2. Contribution

  • 基于GPT(基于微调,使用Transformer架构但是使用的是单向信息)和ELMo(基于特征的预训练,使用双向信息但是使用的是RNN架构),不同在于:
    a. BERT利用左右两侧的上下文信息。这是和之前单向模型不一样的地方。
    b. 预训练的BERT模型可以通过只增加一个额外的输出层来完成微调,以此来完成不同的下游任务,比如回答问题和语言理解。这是和GPT不一样的地方。
  • 提出了一个带掩码的语言模型(MLM)。
  • 在11个NLP任务上都有很好的结果。

3. Method

3.1 BERT

多层双向的Transformer编码器
论文阅读——BERT_第1张图片

  • 预训练阶段输入是没有标号的句子对。
  • 对于每个下游任务创建同样的BETR模型但是权重的初始化值来自于预训练好的权重,输入数据是有标号的。
  • 模型架构:多层双向的Transformer编码器
  • 参数说明:L,Transformer block的个数;H,隐藏层大小;A,自注意力里面多头的个数。
  • 选取两个大小的模型: B E R T B A S E BERT_{BASE} BERTBASE (L=12, H=768, A=12, Total Param- eters=110M) ,这和GPT的参数量差不多; B E R T L A R G E BERT_{LARGE} BERTLARGE (L=24, H=1024, A=16, Total Parameters=340M).

超参数换算可学习参数的大小:

  • 可学习参数来自于嵌入层和Transformer block。嵌入层相当于一个矩阵,输入是数据大小(加入为30,000)输出是隐藏单元个数H。
  • 嵌入层输出是Transformer的输入,Transformer的自注意力部分是没有可学习的权重的(注意力权重来自于词与词之间的相似性)。可学习参数来自于MultiHead前的投影层。对于输入的Q,K,V(大小为H)都f分别对应一个投影矩阵,投影矩阵在每个头合并起来就是H * H 的矩阵(一个输入对应H个头)。经过多头注意力输出是H * H的矩阵。所以对于自注意力可学习的参数是 H 2 ∗ 4 H^2 * 4 H24

论文阅读——BERT_第2张图片

  • 然后就是MLP,有两个全连接层(FC),第一个FC层的输入H,输出是4 * H;另外一个FC输入是4 * H 输出是H,所以每一个FC可学习参数是 H 2 ∗ 4 H^2 * 4 H24。所以总共可学习参数是 H 2 ∗ 8 H^2 * 8 H28
  • 总参数量是: 30 , 000 ∗ H + L ∗ H 2 ∗ ( 8 + 4 ) 30,000 * H + L * H^2 * (8+4) 30,000H+LH2(8+4)

Input/Output Representations:

  • 输入可以是序列或者序列对(单个句子或者两个句子)。
  • 分词的方法是WordPiece——如果一个长词在整个输入出现概率不大,就把这个词切分成一个一个的子序列,这个子序列可能作为一类词根存放在字典里。长词切成片段。最后是30,000个token组成一个词典
  • 序列第一个token是[CLS](classification)。
  • 为了区分两个句子,有两种办法,第一种是使用一个[SEP] token来表示区分这两个句子。另一种是学一个embedding来表示这是句子A还是B。
    论文阅读——BERT_第3张图片
  • 所以输入表示是通过对词元本身的嵌入、在第几个句子的嵌入和位置嵌入求和来构造的。
  • 嵌入层构造:
    论文阅读——BERT_第4张图片

3.2 Pre-training BERT

Mask LM:

  • 随机屏蔽了每个序列中所有WordPiess标记的15%(将词元token替换成[MASK])。直接预测掩码部分而不是一整个序列。这是微调阶段没有的,这导致在微调阶段输入的数据有一点点不一样。
  • 解决方法就是对于15%被选中的词,有80%的概率被替换成[MASK],10%的概率被替换成随机词元。还有10%的概率不做任何操作。

Next Sentence Prediction (NSP)

  • 当为每个预训练样本选择句子A和B时,有50%的概率A和B是有上下文关联的(label用Is Next表示)。50%的概率A和B是一个随机的句子组合(label用NotNext表示)
  • 最后训练样例长这样:

Input1 = [CLS] the man went to [MASK] store [SEP] he bought a gallon [MASK] milk [SEP]

Label1 = IsNext

Input2 = [CLS] the man [MASK] to the store [SEP] penguin [MASK] are flight ##less birds [SEP]

Label2 = NotNext

DataSet:BooksCorpus (800M words) 和 English Wikipedia (2,500M words)

3.3 Fine-tuning BERT

  • 输入可以是段落的句子对、假设-前提对、QA对和在文本分类或序列标记中,一个退化的文本-∅对。
  • 根据下游任务定制输出层。

4. Experiment

4.1 GLUE

  • 通用语言理解评估(GLUE)基准是各种自然语言理解任务的集合。
  • 使用第一个输入标记[CLS]对应的最终隐藏向量C。学习一个分类权重W。
  • Result:

论文阅读——BERT_第5张图片

  • B E R T B A S E BERT_{BASE} BERTBASE B E R T L A R G E BERT_{LARGE} BERTLARGE在所有任务上的表现都大大超过了所有system,分别比现有技术水平的平均精度提高了4.5%和7.0%。

4.2 SQuAD v1.1

  • 斯坦福问答数据集(TeanV1.1)是10万个众包问题/答案对的集合。
  • QA问题就是给定一个问题,找出答案,答案往往在问题里,只需要从问题中找出那个片段。也就是对每个词元判断是否是答案的开头和结尾。
  • 学习两个向量 S ∈ R H , E ∈ R H S \in R^H,E \in R^H SRH,ERH,分别对应的是这个词是答案开头的概率和是答案结尾的概率。
  • 具体就是从第二个词元开始做softmax运算: P i = e S ⋅ T i ∑ j e S ⋅ T j P_i = \frac{e^{S \cdot T_i}}{\sum_j e^{S \cdot T_j}} Pi=jeSTjeSTi
  • result:
    论文阅读——BERT_第6张图片

4.3 SWAG

  • 具有敌意生成的情况(SWIG)数据集包含11.3万个句子对补全示例,用于评估基础常识性推理.
  • 构建了四个输入序列,每个序列都包含给定句子(句子A)和可能的续篇(句子B)的连接。
  • 学习一个特定向量,其与[CLS]标记代表C的点积表示每个选择的分数,该分数用softmax层归一化。

4.4 Ablation

论文阅读——BERT_第7张图片

  • "No NSP "是在没有下句预测任务的情况下进行训练。
  • "LTR & No NSP "被训练成一个从左到右的LM,没有下一句预测,就像OpenAI的GPT。
  • "+BiLSTM "在微调期间在 "LTR + No NSP "模型的基础上增加了一个运行初始化的BiLSTM。

你可能感兴趣的:(论文阅读,Transformer,bert,transformer,自然语言处理)