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

文章目录

  • 0.Abstract
  • 1.Introduction
  • 2.Related Work
  • 3.Bert模型
    • 3.1 预训练Bert
    • 3.2 微调Bert


Bert之前预训练大多用于cv,Bert的出现让预训练在nlp领域大显身手,浅谈一下读这篇论文的理解


0.Abstract

首先来看标题,Pre-training预训练,深度双向的transformer,针对一般的语言理解任务来做预训练。


1.Introduction

预训练的语言模型可以提升许多自然语言任务的效果,这些自然语言任务包括两类:
1.句子层次的任务
2.词语层面的任务,比如命名实体的识别
所以预训练这个想法已经存在很长时间了,bert之前是存在预训练的,只不过之前更多的用于cv领域,bert引领之后的nlp任务使用预训练的方法。
bert采用了这两个任务进行预训练,以便适应目前大多数的nlp任务。


2.Related Work

作者简单地回顾了一下会在本文中使用的预训练的工作
1.基于特征的无监督方法
2.基于微调的无监督方法
3.在有标记的数据上做迁移学习
总之就是简单总结了一下之前的一些预训练的方法,还有将预训练的学习结果迁移到下游的任务中。


3.Bert模型

Bert有两个步骤:Pre-train(预训练)和Fine-tune(微调)。

Pre-train(预训练):
预训练也就是训练bert,引用一下李宏毅老师的话,就是制造胚胎干细胞的过程,这时候让bert学两个任务:
1.masked language model(Masked LM):输入一个句子并盖住一个单词,让模型预测出这个单词
2.Next sentence prediction(NSP):输入两个句子,让model学习这两个句子是否是连续的,但其实这个步骤并不能学到很多东西。

Fine-tune(微调):
胚胎干细胞分化的过程,学完之后可以去做下游任务(downstream tasks),bert分化成各种任务这件事情叫做fine-tune(微调) ,采用有标号的数据训练,同样使用bert模型,只不过参数不是随机初始化的,而是采用预训练过程得到的参数进行初始化。
读论文:BERT Pre-training of Deep Bidirectional Transformers for Language Understanding_第1张图片
总之,先用无标号的数据,采用上述的MLM和NSP任务预训练一个bert模型,对所有的下游任务,创建一个同样的bert模型,参数来自于预训练得到的参数,然后采用有标号的数据对下游任务的模型继续训练。

然后是模型的架构:
bert模型由多层trasformer的encoder组成,而且是双向的,直接基于原始的transformer论文的代码。
作者调了3个参数:L(transformer block的个数),H(隐藏层大小),A(self-attention中multi-head的head个数),这里有两个模型:
BERT(BASE) (L=12, H=768, A=12, Total Parameters=110M)
BERT(LARGE) (L=24, H=1024,A=16, Total Parameters=340M).

然后是模型的输入输出:
为了满足下游任务的需求,输入需要可以是一个句子或者是两个句子,bert只有一个编码器,只能输入一个句子,那就把多个句子拼成一个句子去输入(和transformer不太相同,那里的encoder和decoder分别输入一个句子)

接着具体看一下句子(下面称为序列吧)是怎么拼出来的:
分词采用WordPiece的方法,如果按照空格分词,一个词是一个token,由于文本数量太大,token就会太多。WordPiece是如果一个词的词频不大,那就给它切开成多个子序列,保留词频大的子序列,这样可以用一个比较小的词典来表示文本。

序列的第一个词只能是[CLS],表示整个序列的信息。当学习两个句子的时候,中间加一个[SEP],表示分隔两个句子,或者学习一层embedding,代表token属于哪个句子。
然后就进入一堆encoder再输出结果。

对于每个token,它进入Bert时的向量表示由三部分组成:token本身的embedding,token在哪个句子的embedding,token在句中位置的embbeding
读论文:BERT Pre-training of Deep Bidirectional Transformers for Language Understanding_第2张图片
看完架构,再看看bert是如何训练的

3.1 预训练Bert

MLM:对于WordPiece生成的token,有15%的概率会被替换成[MASK],这些token中,80%的概率确实替换为[MASK],10%的概率替换成随机的token,还有10%概率什么也不做。

NSP:对于输入训练的序列对,50%的样本是两个句子相连,50%的样本两句话不相连。

预训练的数据:作者用了BooksCorpus (800M words) 和English Wikipedia (2,500M words)两个数据集

3.2 微调Bert

根据下游任务,设计任务的输入输出,比如要做分类问题,只要第一个句子就行了,输出的话总之就是拿到bert输出的token,比如拿到[CLS]的输出做分类,不管怎样就是加一个输出层,用softmax得到结果。


后面就是作者的实验,影响和总结啦,这里就不多写了。

你可能感兴趣的:(自然语言处理,bert,深度学习)