BERT全称Bidirectional Encoder Representation from Transformers,是2018年10月由Google AI研究院提出的一种预训练模型,它在发布以后,在NLP领域多个测试中表现优异,模型成就堪称里程碑。它没有使用传统的RNN神经网络结构,而是使用了多层transformer网络(参考<Attention is all you need> 论文中的注意力机制),并且结合上下文信息学习信息,真正体现了双向的特点,有别于之前的单向预训练模型。
从结构上,无论是预训练过程还是精调过程,BERT的整体结构都是相似的,可以分为输入层、中间层与输出层。其中,中间层为多层transformer结构(BASE是12层,LARGE是24层),这里不多赘述。而在整个预训练过程中,基于transformer架构,BERT定义了MLM和NSP两个学习任务,用于指导模型学习。本文将主要介绍BERT的输入层、输出层及MLM、NSP这几点。
输入层
BERT的输入层由token、segment、position三部分组成。
token即词向量,包含词汇的基本语义信息;
segment是段落的含义,即在句子对中,有提问句和回答句,那么segment就是用来标识当前句子是属于哪种情况;
position是位置信息,它与transformer的位置计算方式有不同:transformer使用固定的公式来计算位置编码,一旦计算确定不再变更;而BERT中,位置信息是可以通过训练来调整的,更好的适应任务需求。
将这三者组合后,则每个位置都可以表示:这个词的词汇信息+段落信息+位置信息。
输出层
BERT会为具体的任务类型,定义相同的输出层,不同的任务可能输出层也是不同的。
在预训练过程中,任务的输出层是用于预测MLM/NSP的结果。
而在精调过程中,如果是分类任务,那么会在ransformer的最后一层后面添加一个全连接层;如果是问答任务,在Transformer的最后一层后面添加一个全连接层,用于预测答案的起始和结束位置;如果是序列标注任务,如词性标注、命名实体识别,可以在每个词的输出上,添加一个全连接层,以预测每个词的标签。
MLM
传统的模型多采用从左到右或者从右到左的方式,不能真正的利用双向的特点。显然双向会比单向能更让模型学习到信息,但是难点在于:因为模型的已知信息里包括每个位置,一旦双向学习,模型将会轻易的“预测”到当前位置的答案,而不能真正的学习到语言特性。
MLM旨在解决该问题,它全称是“masked language model”,从命名可知,它将对语言本身进行一定的mask(掩码)操作。针对整个输入,随机的选择15%的比例进行遮盖,并定义目标为预测这些位置的词汇。
这样一来,双向的问题可以得到解决,但是也有一定的副作用:预训练与精调的过程存在不匹配的问题,因为mask的token可能在精调中从未出现过。为了解决这一问题,BERT中采取了这样的方式:对于选定需要mask的token来说,80%进行mash,10%替换为错误的词,10%保持不变。
通过与传统的自左到右方式的比较,显示出MLM具有更好的语言学习能力。
NSP
对预训练模型来说,很多形如QA的下游任务需要模型能理解问题句与答案句之间的联系,NSP旨在让模型学习到句子对之间的联系。NSP全称Next Sentence Prediction,它的思路是:针对准备好的句子对,其中50%是真正的上下句。举例来说:其中一半的句子对是问题句与相应的答案句,而另一半是问题句与无关句。为真正回应问题的下句打上isNext的标签,而无关问题的下句打上NotNext的标签。相应的,NSP任务的目标就是判断这个标签。
通过这种方式,BERT能学到句子对之间的关联性。
参考论文:
arxiv.org/abs/1810.04805