zl程序教程

您现在的位置是:首页 >  其他

当前栏目

BERT论文总结

论文 总结 bert
2023-09-27 14:20:17 时间

Tips: 摘要的写法: 1. 摘要的第一段写出这篇工作与哪些工作相关。 2. 本篇工作的优点。 3. 讲自己工作时,需要讲到绝对精度以及和其他工作的有点。

Abstract

摘要部分主要介绍了BERT是基于ELMo和GPT这两个工作的改进。BERT使用了一种双向的表征方式,来使得模型可以学到当前词与左边和右边的关系。

Introduction

语言模型的预训练在自然语言处理任务上是很有效的。自然语言处理有两大任务:

  1. Sentence-level tasks: natural language inference and paraphrasing.
  2. Token-level tasks: named entity recognition and question answering.

语言模型预处理有两种主要的策略:

  1. Feature-based (ELMo): 使用预训练的模型对当前任务生成额外的特征。
  2. Fine-tuning (GPT): 将预训练模型直接作为上游模型结构,因此对于特定的任务,只需要fine-tune少量的参数即可。

在BERT出现之前的预训练模型存在一个问题。模型是单向的,因此每一个token只能与之前的token进行attention计算。这种限制对于sentence-level tasks来说是次优的,而对于token-level tasks,可能会非常有害,比如问题回答等任务,因为在这些任务中,从两个方向纳入上下文是至关重要的。

BERT是基于Transformer的双向编码表征,它采用了掩码语言模型 (MLM: masked language model)作为预训练目标。

MLM: Masked language model 的目的是基于上下文来预测当前位置的原始词的id。

MLM模型可以让特征能够融合当前词左边以及右边的内容。同时,BERT还使用了 next sentence prediction 作为另一个预训练任务。

NSP: Next sentence prediction 的目的是用来判断两个句子是否是承接关系。

本文的主要贡献:

  1. 提出了基于Transformer的双向预训练语言模型。
  2. 证明了预训练表征可以减少不同任务对不同模型设计的需求。
  3. BERT在11种NLP任务中达到了SOTA。

BERT

本文的主要工作分为两步: 1. pre-training. 2. fine-tuning.
pre-training: 在这个过程中,模型将使用unlabled data来对BERT两个预训练任务 (Masked LM and NSP) 进行训练。
fine-tuning: BERT模型将用预训练模型初始化所有参数,这些参数将针对于下游任务,如,问答任务等,使用labeled data进行训练。不同的下游任务可以训练出不同的模型,但是它们都是用同一个预训练模型进行初始化的。

下图表示了本文的两个主要工作,pre-training and fine-tuning. BERT的主要特征是,对于不同的任务都有一个统一的模型结构。

在这里插入图片描述Source:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

Model Architecture

BERT的结构是一种多层的双向Transformer编码器 (Transformer的讲解)。文中主要介绍了两种BERT,使用了WordPiece embeddings (30,000 token size)。

  1. BERT_BASE: L = 12, H = 768, A = 12, Total Parameters = 110M.
  2. BERT_LARGE: L = 24, H = 1024, A = 16, Total Parameters = 340M.
    L: Numbers of layers; H: Hidden size; A: numbers of heads

BERT参数计算:

*** 对于transformer中Q,K,V的维度。 ***
经过实验测试,Q,K,V的维度保持在64时效果最佳。
如果Hidden size = 768, 要保持多头Q,K,V的维度为64,那么head size 需要等于12.


***  BERT BASE 参数估计  ***
vocab --> Hidden state: 30K * 768
Hidden state --> Q, K, V 的投影映射 768 * 768 * 3
self attention之后的一次映射: 768 * 768

MLP: 2层MLP,输入输出的维度为: H --> 4H --> H, 参数量为H * 4H + 4H * H = H^2 * 8

Sum: 30K * H + layer num * H ^ 2 * (3 + 1 + 8)

Input/Output Representations

BERT预训练的输入统一成为 input sequence。为了能够让BERT解决更多的下游任务,input sequence由单个句子或者句子对组成 (<Question, Answer>)。如下图表示一个input sequence 例子。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xGsQV0UF-1661262491518)(../Attachment/Pasted%20image%2020220823181531.png)]
Source:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

几种特殊的token:
[CLS]: [CLS]的最后一个hidden state用来表述句子的整体特征,可以应用于下游分类任务。
[SEP]: 用来区分两个不同的句子。

Embedding: 一共有3种:

  1. Token embeddings: 用来表征不同的词,以及特殊的tokens.
  2. Segment embeddings: 用来表征这个词是属于哪一个句子。
  3. Position embeddings: BERT的position embedding不同于Transformer,BERT的position embedding是可学习的。

Pre-training BERT

Task 1: Masked LM

随机掩盖掉一个句子中15%的token。有3中掩盖的方法:

  1. 80%的情况使用[MASK]来掩盖。
  2. 10%的情况使用随机的token来掩盖。
  3. 10%的概率不改变token。

此任务是通过BERT来预测掩盖掉的词token。Mask token相关的最后一层hidden state将通过softmax来进行预测。

Task 2: Next Sentence Prediction (NSP)

常见的下游任务比如Question Answering (QA),这些任务是要判断两个句子的关系。BERT预训练NSP任务是训练一个二分类的下一个句子预测任务 (Binarized next sentence prediction task)。此任务的数据集的生成方式为:

  1. 50%的句子B是真是的A后面的句子,标注为 IsNext.
  2. 50%的句子B是从语料中随机选取的句子,标注为 NotNext.

[CLS] token通过BERT生成最后一个hidden state [C],用来做NSP任务。


到此为止,BERT的预训练任务,如何生成训练数据,以及优势都已经介绍完了。接下来会做BERT相关的代码阅读,以及fine-tune下游任务的尝试。


待补充内容

  • Transformer的介绍 (网上已有很多详尽的介绍,如果大家评论有需求我可以写一篇补充介绍)。

上游工作:

  • ELMo (feature-based pre-trained model)
  • GPT (fine-tuning pre-trained model)

分词工作:

  • WordPiece