继续根据李沐读论文学习一下Bert。


Bert

  • Abstract
  • Introduction
  • Related Work
  • BERT
  • Model Architecture
  • Input/Output Representations
  • Pre-training BERT
  • Fine-tuning BERT
  • Conclusion


Abstract

与其他论文的区别:BERT建立的是双向模型,可以同时利用左右上下文信息进行预测。并且对于预先训练好的Bert模型进行微调,只需增加一个输出层,就可以为各种任务达到很好的效果。
实现的结果:绝对精度达到80.5%,相对其他提高了7.7%。

Introduction

语言模型的发展:语言模型预训练早就再自然语言处理任务中是存在的。之前的两种预训练模型包括:feature-based and fine-tuning,但是这两种都是用的是单向语言模型,这具有很大的局限性。
主要想法:作者认为双向信息是非常重要的(句子从左看到右,从右看到左),类似于完形填空,可以同时利用左右上下文的信息。
主要实现:受到MLM的启发,作者利用掩码语言模型随机将掩码放在输入的句子里面,然后预测被掩盖的词汇。与从左到右语言模型不同,掩码语言模型可以同时利用左右上下文信息,从而训练一个比较深的双向Tansformer模型。
贡献
① 展示了双向信息的重要性
② Bert是第一个在句子层面和词元层面都取得最好成绩的微调模型
③ 代码开源

Related Work

分别介绍了Unsupervised Feature-based Approaches(ELMo为代表)和Unsupervised Fine-tuning Approaches(GPT为代表),以及Transfer Learning from Supervised Data(这在计算机视觉上使用很多,不过Bert及其后续工作表明:在NLP中在大量无标注数据集上训练得到的结果要远远好于在少量有标注数据集上的结果)

BERT

所提出来的网络架构需要两步:pre-training 和 fine-tuning。
在pre-training的步骤中,在大量的无标注的数据集上进行训练。然后在fine-tuning的步骤中,在少量的有标注的数据集上进行微调,微调时的所有参数都是用之前训练的模型参数初始化,对于不同的子任务,单独微调。

Model Architecture

模型的结构是深层的双向Transformer,Transformer的结构没有改动,想了解可以看Transformer论文精读

Input/Output Representations

模型可以同时处理输入为句子或者句子对的情况。由于Bert只有encoder,因此对于句子对的情况,需要把两个句子并成一个句子序列。

如下图所示:

文本摘要生成数据集的方法 文本摘要 bert_文本摘要生成数据集的方法


输入的第一个是[CLS],这个地方存放的是分类任务需要的序列信息,由于self attention机制可以汇聚所有序列的信息,因此将其放在首位是没有问题的。

为了区分两个句子的情况,采用两种方式:第一是在一个句子结束的时候放入[SEP ],第二是加入了一个Embedding层来判断属于第几个句子。

总的来说对于所给定的token,它的表达由三方面组成,如下图所示:

文本摘要生成数据集的方法 文本摘要 bert_语言模型_02


第一行为输入的词元,第二行为词元的embedding,第三行为判断是第几句话的Embedding,第四行为位置Embedding。下面三个Embedding相加为最终的输入表达。

Pre-training BERT

  1. 掩码语言模型,作者认为双向深层模型的效果会明显好于单向的模型,为了训练这样一个模型,会对输入随机进行掩码,称为MLM。大概会掩码15%。但是存在的一个问题是,微调时不会存在掩码,因此这导致微调和与训练有一点区别。为了解决这个问题,对于15%被选中的词,做三种类型的处理:80%会被mask,10%会被随机生成的词替换,10%不进行操作。
  2. 预测句子任务,对于由两个句子的输入A和B,有两种情况:B是A的下一句话或者B和A没有关系。
  3. 预训练数据,选择文本层面的词的效果要比句子层面的词效果更好,因为Bert对很长的序列文本信息提取效果很好。

Fine-tuning BERT

Conclusion

实际上Bert是将双向RNN(ELMo)和单向Transformer(GPT)进行的一个融合。