什么是Bert

现如今,Bert已成为深度学习领域内耳熟能详的预训练语言模型。预训练语言模型根据训练方式可以分为自编码式语言模型和自回归式语言模型。在介绍他们两个之前先对语言模型进行介绍。

语言模型

语言模型是NLP领域中的基本任务,其任务目标为对文本序列中某个位置的词进行预测。传统语言模型就是从左至右计算每个词出现的概率,在预测时模型依靠其上文信息进行预测,通常使用循环神经网络来实现。计算过程中,依次对文本序列中的向量进行计算。

自回归语言模型

基于自回归的预训练语言模型对文本序列的建模方式与传统语言模型相同,都是根据上文信息或者下文信息预测文本序列中的词,但由于模型只能获取到单向的语义信息,在完成完形填空等涉及到上下文信息的任务时,自回归预训练语言模型表现欠佳。后来出现了ELMo,其采用两个LSTM分别获取文本序列中的顺序和逆序的文本信息,将两者拼接后作为文本的向量表达。

自编码语言模型

除了自回归的方式之外,还有其他对文本序列中的字进行预测的方法。自编码模型采用随机遮盖住文本序列中部分字,在预测过程中,根据上下文来预测被遮蔽的词。与自回归的方式不同,模型在预测时可以自然而然地获取到遮蔽词的上下文信息,但这种方式也存在缺点。比如在实际下游任务当中,并不会出现遮蔽词,因此会导致预训练和下游任务中存在gap的问题。

Bert的预训练任务

Bert的预训练任务中包含两个任务,一个是遮蔽语言模型(Masked Language Model,MLM),还有一个是下一句预测(Next Sentence Prediction,NSP)。

MLM

在MLM中,随机遮蔽句子中15%的词,让模型对这些遮蔽词进行预测。在大规模预训练语料下,15%也是一个不小的规模,为了防止某些词在下游任务中从未见过,作者做了如下处理:

  • 80%的概率使用“[MASK]”替换原词
  • 10%的概率被替换为其他词
  • 10%的概率原封不动
    使用随机词的原因是避免Transformer记住[MASK]是什么,至于随机词带来的负面影响,所有遮蔽词外的词共享15% * 10% = 1.5%的概率,影响是可以忽略不记的。这样使得Transformer既可以获得全部信息,也不至于让模型获得全量信息。

NSP

选择一些句子对A与B,其中50%的数据B是A的下一条句子,剩余50%的数据B是语料库中随机选择的,学习其中的相关性,添加这样的预训练的目的是目前很多NLP的任务比如QA和NLI都需要理解两个句子之间的关系,从而能让预训练的模型更好的适应这样的任务。

我们首先拿到属于上下文的一对句子,也就是两个句子,之后我们要在这两个句子中加一些特殊的 token:[CLS]上一句话[SEP]下一句话[SEP]。也就是在句子开头加一个 [CLS],在两句话之间和句末加 [SEP],

Token Embedding:就是正常的词向量,即 PyTorch 中的 nn.Embedding()
Segment Embedding:用 embedding 的信息让模型分开上下句,我们给上句的 token 全 0,下句的 token 全 1,让模型得以判断上下句的起止位置
Position Embedding :Transformer 中的不一样,不是三角函数,而是学习出来的。