NLP模型卡-XLNet

一:模型简介

在Bert模型中,由于Mask符号只在预训练的过程中出现和使用,但是在后续微调或下游任务中不出现,这就会导致这两个阶段出现不一致的问题,同时这个设置还会造成训练数据利用率不高的问题。而对于AR(Auto regression)模型来说其能获取更长距离的依赖,但是却不如Bert类AE(Auto Encoding)的模型具有捕获双向信息的能力。因此XLNet整合了这两个模型的优点同时解决了Bert中Mask符合的问题,也使得模型更加适用于生成式的任务。

二:来至论文

XLNet:Generalized Autoregressive Pretraining for language understanding
发布者:Google AI Brain 2019-NIPs

三:Motivation

  1. 解决Bert中Mask符号所造成的预训练和微调阶段不一致的问题
  2. 解决Bert中数据利用率低的问题(但实际上好像没解决)
  3. 解决更长距离依赖的问题

四:Contributions

1:Permutation Language Model:排列语言模型

主要为了解决Mask符合不一致和双向学习问题。通过对输入序列的排列,预测排列后的token信息,使得模型不再使用Mask符号的情况下,仍然可以获取双向的上下文信息。排列组合通过特殊的Mask机制进行。

2:Two Stream self-attention:双流自注意力机制

主要为了解决Permutation language Model所引起的内容和位置信息割裂的问题。当对输入序列进行排列后,位置信息出现了混乱,为了防止模型在生成当前目标单词的时候提前看到单词的信息,因此需要对其进行Mask。具体做法就是维持两组隐藏状态g和h,g代表了包含位置信息的注意力流,h代表了包含内容信息的注意力流,在计算当前第n层gi时,使用的q值是上一层的gi,k和v使用的是上一层其余的h值,而在计算h时,由于不需要关注位置信息,因此就是标准的自注意算法,q,k,v都是上一层的h值。注意输出层是用g的状态进行计算的,因为这个g计算出来的值不会看到当前输入的对应位置信息,所以是真正的预测值。

3:借鉴Transformer-XL的相关创新点

3.1:Segment recurrence mechanism

片段级循环机制,解决长距离依赖问题

3.2:Relative Positional Encoding

相对位置编码,解决多个片段之间的位置信息混乱问题
可参考:NLP模型卡-Transformer-XL

4:Segement Positional Encoding:片段位置编码

这一点不是借鉴的,不过和Bert类似,给每个句子加上编码,这个是加在不同的segment上的,具体做法是设置两个向量S+和S-,如果两个单词属于同一个句子则使用前者,否则使用后者, 这个向量通过和q值的运算,得到一个偏置数值,然后加在上诉过程计算出来的注意力的分上。

5:Partial Prediction:部分预测

这个的目的主要是在预测的前期,如果给定词汇较少,则训练速度可能会比较慢,因此每次在排列后,值预测后面部分的token,这样在自回归预测的开始,就已经有了一些上下文信息了。一般是设置超参k,每次只预测后面1/K的token。(但是这样会造成数据利用率不高的问题,而且这样的设定和生成式任务在预测时是不一样的,生成式任务一般是从第零个字符开始的)

五:Disadvantage

  1. 部分预测的方法,还是没有解决数据利用率的问题,解决方案可参考:模型卡-ELECTRA
  2. 排列组合模型和双流注意力机制过于复杂

Notes:

  1. 作者在后面说,预训练时发现NSP任务并没有很大的用处,因此也就没有用这个任务
  2. 2:使用了更多的数据进行训练,大约是bert的十倍,Bert用了大概13-16个G的数据,XLNet用了126G的数据(注意,这不是数据,这都是money呀,但是还有更狠的,可参考:NLP模型卡-RoBERTa,它的训练集是160+G,恐怖如斯!!!)。但是作者也进行了和bert同样数据集的训练,效果还是要比bert好,只能说你真棒(๑•̀ㅂ•́)و✧。
  3. 关于训练,值得一说的是,和 BERT 一样也是同时构建正例(正确的连续句子)和负例(随机下一句的例子),之后分别对每段进行 Permutation 处理,然后预测。对于正例,后一段会用前一段的信息,而对于负例就不用。

你可能感兴趣的:(NLP模型卡集册,人工智能,机器学习,nlp)