BERT家族的那些事——XLNet篇

本文是BERT家族系列文章的第一篇,也是NLP生涯的第一篇文章,主要是自己对于XLNet模型的一些理解,长文高能预警,写的不好的地方还请大佬们多多指教。

目录

  • XLNet模型简介
  • XLNet模型结构
    1.PLM
    2.TransformerXL
  • 总结

XLNet模型简介
2018年10月谷歌推出BERT模型,性能上碾压了之前几乎所有的NLP模型,在11项NLP任务上表现优异,但BERT模型也有其不足之处,其改进版XLNet模型在众多数据集上的效果相较于BERT提高了5%-15%,下面让我们来一探究竟,一起发掘XLNet的神奇之处。

XLNet模型结构

说到XLNet,就必须要提到他的前身BERT,BERT模型虽然在众多NLP任务上表现优异但仍有其不足之处,具体表现为以下三点:

  • BERT预训练任务mask language model(MLM)部分采用了随机MASK,但在下游任务的fine-tune中没有使用随机MASK,这会造成预训练过程和fine-tune过程的不一致,影响模型效果。
  • BERT虽然性能优异,但对内存要求较高,不擅长处理长文本,容易发生爆内存的情况,即OOM问题。
  • BERT的预训练任务MLM中对15%的token使用了随机MASK,虽然每个MASK位置的token都采用了self-attention的方法来学习文章上下文内容,但被MASK的token之间没有任何联系。

XLNet模型分别从模型角度解决了前两个问题和从数据角度解决了第三个问题:

1.排列语言模型(PLM)

在讨论第一个问题之前,需要先引入两个概念:自回归语言模型(AL)和自编码语言模型(AE)

自回归语言模型(AL):AL是根据上文内容预测下一个单词内容,即从左到右或从右到左的语言模型(图1),AL这种从左到右的处理方式天然适配生成式任务,比如文本摘要,机器翻译等。典型的例子就是我们所熟悉的RNN,LSTM,ELMO等模型,ELMO和前两种模型稍有不同,注意到了要用到单词的上下文来预测单词内容,所以把目标单词前方从左到右和后方从右到左的两个向量进行了简单的拼接,但这样做的效果并没有很大的提升,因为其本质上还是自回归语言模型,没有同时使用上下文来预测单词内容。

图1 自回归语言模型

自编码语言模型(AE):AE是同时根据上下文内容预测一个单词内容的语言模型(图2),典型的例子就是BERT预训练过程中的MLM任务,BERT模型的成功,预训练功不可没,AE打开了NLP领域一个极具潜力的研究方向。但AE的不足之处恰恰和AL相反,AE缺少了从左到右的处理方式,因此并不擅长生成式任务;而且在BERT的fine-tune过程无法引入MASK,会导致和预训练阶段前后不一致的问题。
在这里插入图片描述

图2 自编码语言模型

那既然两个模型都各有优劣,那我们不禁要问了,能否集众家之所长,集AL和AE的优点与一身呢,XLNet正是做了这个方面的思考与尝试,接下来让我们一起去看一看它如何实现的吧。

为了解决BERT的第一个缺点,XLNet结合AL和AE的优点提出了Permutation Language Model(PLM),即在模型输入阶段采用AL从左至右的形式输入数据,但在模型中的采用Attention Mask方法实现AE的过程,这样就可以实现同时使用AL和AE的优点了。

排列语言模型(Permutation Language Model, PLM):上文分析了自回归语言模型和自编码语言模型各自的优劣,于是有人想同时使用二者的优点,即模型整体仍然保持从左到右的预测顺序但同时又能看到预测位置之后的信息,因此PLM应运而生,其实这部分主要是借鉴了之前提出的NADE思路。举论文中一个具体的例子(图3),当给定一个长度为4的序列x1x2x3x4时,其总共的排列组合方式共有4!=24种,也称4!种链式分解的方法,排列语言模型认为预测位置token的概率为其在24种排列中出现的概率之和,即:
在这里插入图片描述

其中,Ƶt表示长度为t的序列所有的排列方式(此例中Ƶt=24),z表示在Ƶt中随机采样所得的部分排列(因为当t比较大时,t!的计算量会很大,所以实际情况只是会随机采样其中的部分序列),Ez~Ƶt即表示取这种排列的期望,Zt表示第t个token,Z<t表示从第1个到第t-1个token。Σ符号后面的整体表示预测token的概率,所以公式整体表示最大化所有所选排列的序列中第t个位置token的概率之和。

在这里插入图片描述

图3 排列语言模型

PLM最大的优势也正如上文所说的那样,模型在保持从左到右的预测顺序的同时又能看到预测目标之后的信息,但这种顺序看似不变实则万变的神奇操作具体是如何实现的呢?其实模型的输入阶段确实很普通,和自回归语言模型的输入方式一样,数据从左到右依次输入,但关键在与数据输入后在模型这个黑匣子里所经历的变化过程,这个过程称之为“Attention掩码机制”,就是一种和BERT的MLM类似的MASK机制,但稍有不同的是,BERT模型中是完全随机的MASK,而PLM则是针对数据的每一种排列方式,掩盖住预测位置之后的token,举个栗子,以上文的x1x2x3x4为例,假如有一种排列方式为x1x4x3x2,想预测的token是x3,所以会选择把之后的token也就是x2进行遮盖,这样就算完成了PLM的过程,其实我们可以仔细想一想,以上的这个例子相当于把x1x2x3x4这样的一个序列中的x2这个token进行MASK遮盖,用x1和x4去预测x3,这种预测方式和MLM十分相似,只不过MLM对预测部分进行MASK,而PLM第部分上下文进行MASK。有同学可能会问了,那这样的话x2的信息是不是漏掉了,其实不然,上面所举的例子只是24种全排列中的其中一种,在其他的排列方式中有很大概率会遇到用x2去预测x3的时候,而且数据量越大,这种概率会越接近于1,基本上可以认为是必然事件,所以二者的效果基本相同,但PLM还是棋高一招,别忘了,PLM可是采用从左到右的输入形式啊,预训练过程和fine-tune过程只需按规矩传人数据便可轻轻松松保持一致,这一点是以BERT为首的自编码语言模型所无法企及的。总上所述,PLM还是真的集AL和AR的优点于一身啊,长江后浪推前浪,把BERT拍倒在沙滩上,不服不行啊(手动捂脸)。

上文所说的“Attention掩码机制”实则是XLNet通过“双流注意力机制”实现的。MLM和PLM都有一个共同的任务就是根据上下午预测文中某个位置的信息。那该位置的内容自然是不能让模型预先知道的,因此MLM采用了MASK,这样就只传给了模型代预测位置的位置信息,内容信息被MASK掩盖掉了,即告诉模型需要预测哪个位置的内容。而PLM也想实现一样的效果,但很遗憾为了解决预训练阶段和fine-tune阶段一致的问题,PLM抛弃了MASK机制,为了是模型不使用预测位置的内容信息而只使用预测位置的位置信息(位置信息是必须的,模型需要知道在哪个位置进行预测),XLNet提出了“双流注意力机制”来解决这一问题。图4简单描述了BERT和XLNet使用Tansformer的不同方式。
在这里插入图片描述
在这里插入图片描述

图4 BERT和XLNet中Transformer的不同形式

由图4可知,XLNet采用了两种表示方法来实现attention,即“双流注意力机制”,其中“content 表示”所采用的方法就是正常的Transformer,其输入包括预测位置及之前位置的位置信息和内容信息;而“Query表示”稍有不同,其输入包括待预测位置的位置信息和预测位置之前的所有内容信息。图5是PLM中“Attention掩码机制”和“双流注意力机制”的示意图。重点解释下两个注意力流矩阵,还是以x1x2x3x4为例,对于全排列中的一种序列x3x2x4x1,在content注意流中因为可以看到自己的内容,所以content矩阵中第一行的点全是亮的(x1是序列的最后位置,因此可以看到x2,x3,x4和自己),往下二三四行类似;而在Query矩阵中第一行的第一列没有亮,这就是上面解释的第二种注意力流,只能看到自己的位置信息,无法看到自己的内容信息,而x1之前的 x2,x3,x4的内容可以正常被看到。

在这里插入图片描述

图5“Attention掩码机制”和“双流注意力机制”详解

2.TransformerXL

BERT的第二个缺点要从RNN和Transfomer的优缺点说起,先说RNN,他的优点是天然适配时间序列问题,缺点是效率低下无法并行。Transfomer的优点是其强大的特征抽取能力以及可以并行提高效率,缺点是模型复杂,在处理长文本时容易超内存,也就是OOM问题。vanilla Transformer为了解决Transfomer这一问题,会把长文本分割成若干个片段(图6),这种做法虽然解决了OOM问题,但是片段和片段之间的信息没有联系成为其最大的缺点。和PLM的提出一样,有人想将Transfomer和RNN的优点进行融合,于是就诞生了TransformerXL,原理其实很简单,Transformer的片段之间不是没有联系吗,可以借鉴RNN的形式将他们连到一起啊,这就是TransformerXL(图7),是不是很简单?XLNet将这种方法称之为段与段之间的循环机制,即当前片段在建模的时候能够利用之前片段的信息来实现长期依赖性。

在这里插入图片描述

图6 vanilla Transformer机理

在这里插入图片描述
图7 TransformerXL机理

除此之外,TransformerXL还提出了相对位置编码,如果对于每一个数据片段直接使用Transformer的编码时,会使得不同片段同一位置的位置编码复用,比如第i-1段和第i-2段第一个位置将会有相同的位置编码,但他们对于自身所在的段落建模所起的作用显然不同,因此这样的位置编码并不合适,有的同学说直接用全局的位置编码,即第i段的第j个位置的位置编码为i*(n-1)+j,n为每段的长度,这样将会造成位置编码过长,而且影响模型的学习效果,因为很少有人关心一篇文章的第2个字和第2000个字之间有什么关系,更多的会关注在某个片段中字符之间的关系,相对位置编码就是把绝对位置编码计算公式进行拆解,并对其部分项做了一些替换而实现的。

Transformer中attention分数的计算方式如图8所示,其中Ex是词的embedding,U是位置向量;TransformerXL对attention分数的计算方式进行了变换,转化为相对位置的计算(图9)。

在这里插入图片描述

图8 Transformer中attention分数的计算方式

在这里插入图片描述

图9 TransformerXL中attention分数的计算方式

两种attention分数的计算方式对比来看,主要有三点变化:
  • 在(b)和(d)这两项中,将所有绝对位置向量Uj都转为相对位置向量Ri − j,这是向量也是一个固定的编码向量,不需要学习。
  • 在©这一项中,将查询的UiT WqT 向量转为一个参数向量u,在(d)这一项中,也将查询的UiT WqT向量转为另一个需要学习的参数向量v,u,v者两个参数向量是训练中学习所得;
  • 将键的权重变换矩阵Wk转为Wk,E和Wk,R ,分别作为content-based key vectors和location-based key vectors。

3.数据方面改进

BERT的第三个缺点即MASK之间相互独立没有联系其实很好很好解决,当训练数据集十分庞大时,某一条数据中的两个MASK之间可能并无联系,但有极大几率在其他的数据中这两个token根本没有被遮盖,那就可以得到两个token之间的关系,这样MASK相对独立的问题便可随着逐渐变大的数据集迎刃而解。

总结

XLNet相较于BERT主要修改了模型和数据两个方面,模型方面:预训练任务使用PLM,将Transformer修改为TransformerXL;数据方面则采用了更大的数据集。最后附上XLNet和BERT以及RoBERT效果的对比图:

在这里插入图片描述


博客不定时更新,欢迎NLP爱好者们加我微信:kaifeng3922,一起学习一起冲~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值