与AR语言模型不同,BERT使用自动编码器(AE)语言模型。AE语言模型旨在从损坏的输入重建原始数据。在BERT中,通过添加[MASK]来破坏预训练输入数据。例如,’Goa has the most beautiful beaches in India’将成为‘Goa has the most beautiful [MASK] in India’,该模型的目标是根据上下文词预测[MASK]词。自动编码器语言模型的优点是,它可以看到前向和后向的上下文。但是,由于在输入数据中添加[MASK]引入了微调模型的差异。
BERT假设在给定未掩蔽的的标记的情况下,预测的(掩蔽的)标记彼此独立。为了理解这一点,我们来看一个例子。Whenever she goes to the [MASK][MASK] she buys a lot of [MASK].这可以填写为:Whenever she goes to the shopping center, she buys a lot of clothes.或者Whenever she goes to the cinema hall she buys a lot of popcorn.而句子:Whenever she goes to the cinema hall she buys a lot of clothes.是无效的。BERT并行预测所有掩蔽的的位置,这意味着在训练期间,它没有学会处理同时预测的掩蔽的标记之间的依赖关系。换句话说,它不会学习到预测之间的依赖关系。它预测标记彼此之间互相独立。这可能是一个问题的原因是这减少了BERT一次学习的依赖关系的数量,使得学习信号比它原本可能的更弱。
XLNet:排列语言建模
BERT在所有传统语言模型中脱颖而出的原因在于它能够捕获双向上下文。同样,它的主要缺陷是在预训练引入[MASK]标记和并行独立预测。如果我们以某种方式构建一个包含双向上下文的模型,同时避免[MASK]标记和并行独立预测,那么该模型肯定会胜过BERT并取得最先进的结果。这基本上就是XLNet所实现的目标。XLNet通过使用称为“排列语言建模”的语言建模变体来实现这一点。训练排列语言模型以预测在给定上下文后的一个标记,就像传统语言模型一样,但是不是以连续顺序预测标记,而是以某种随机顺序预测标记。为清楚起见,我们以下面的句子为例:“Sometimes you have to be your own hero.”传统的语言模型按照下面的顺序预测标记:“Sometimes”, “you”, “have”, “to”, “be”, “your”, “own”, “hero”其中每个标记使用所有前面的标记作为上下文。在排列语言建模中,预测的顺序不一定是从左到右。例如,它可能是:“own”, “Sometimes”, “to”, “be”, “your”, “hero”, “you”, “have”其中“Sometimes”会以看到“own为条件,而“to” 则以看到“own”和“Sometimes”等为条件。注意如何使用排列语言建模强制模型建模双向依赖关系。期望上,模型应该学习建模所有输入组合之间的依赖关系,而传统语言模型只能在一个方向上学习依赖关系。