XLnet论文研读

1. 论文研读笔记

写在前面

最近事情实在太多,这真不是借口,而是确实挤占我几乎所有的工作外的时间,一度让我苦恼的想离职。。。 xlnet这篇文章看了很久,这个总结是我自己回忆了一下,自己写了一点,然后来不及贴了点我认为特别好的博客,拼凑而成,后面有空一定会重新再好好重写这个系列 Transformer - elmo- bert- transformerxl - xlnet-- bert的各种变种

1.1 研究动机

Xlnet 这篇论文从出来的时候,就引发热议,毕竟直接对标当时nlp在学术界和产业界最为瞩目的成果bert。从文章的动机来说,主要其实就是探讨自回归(Autoregressive, AR)语言模型和自编码(autoencoding)模型的差别。

自回归是时间序列分析或者信号处理领域喜欢用的一个术语,基本等价于我们通常理解的语言模型。自编码器是一种无监督学习输入的特征的方法,即用一个神经网络把输入变成一个特征表达,即编码,然后再用一个Decoder把编码后的特征恢复成原始的信号。BERT就可以看成一种AutoEncoder,它通过Mask改变了部分Token,然后试图通过其上下文的其它Token来恢复这些被Mask的Token。

给定文本序列x=[x1,…,xT],语言模型的目标是调整参数使得训练数据上的似然函数最大:

xlnet_target
而BERT是去噪(denoising)自编码的方法。对于序列x,BERT会随机挑选15%的Token变成[MASK]得,它的目标函数可以表达成:
bert_target
这两个模型的优缺点分别为:

  1. 独立假设
    注意等式(2)的约等号≈,它的意思是假设在给定 x ^ \hat{x} x^的条件下被Mask的词是独立的,这个显然并不成立,比如”New York is a city”,假设我们Mask住”New”和”York”两个词,那么给定”is a city”的条件下”New”和”York”并不独立,因为”New York”是一个实体,看到”New”则后面出现”York”的概率要比看到”Old”后面出现”York”概率要大得多。而公式(1)没有这样的独立性假设,它是严格的等号。
  2. 输入噪声
    BERT的在预训练时会出现特殊的[MASK],但是它在下游的fine-tuning中不会出现,这就是出现了不匹配。而语言模型不会有这个问题。
  3. 双向上下文
    语言模型只能参考一个方向的上下文,而BERT可以参考双向整个句子的上下文,因此这一点BERT更好一些。xlnent提出的排序语言模型,正是用来解决这个问题。

1.2 研究方法

1.2.1 排序语言模型

给定长度为T的序列x,总共有T!种排列方法,也就对应T!种链式分解方法。比如假设x=x1x2x3,那么总共用3!=6种分解方法:

如果我们的语言模型遍历T!种分解方法,并且这个模型的参数是共享的,那么这个模型应该就能(必须)学习到各种上下文。普通的从左到右或者从右往左的语言模型只能学习一种方向的依赖关系,比如先”猜”一个词,然后根据第一个词”猜”第二个词,根据前两个词”猜”第三个词,……。而排列语言模型会学习各种顺序的猜测方法,比如上面的最后一个式子对应的顺序3→1→2,它是先”猜”第三个词,然后根据第三个词猜测第一个词,最后根据第一个和第三个词猜测第二个词。

因此我们可以遍历T!种路径,然后学习语言模型的参数,但是这个计算量非常大(10!=3628800,10个词的句子就有这么多种组合)。因此实际我们只能随机的采样T!里的部分排列,为了用数学语言描述,我们引入几个记号。 Z T Z_T ZT表示长度为T的序列的所有排列组成的集合,则 z ∈ Z T z∈Z_T zZT是一种排列方法。我们用 z t z_t zt表示排列的第t个元素,而 z < t z_{<t} z<t表示z的第1到第t-1个元素。举个例子,假设T=3,那么 Z T Z_T ZT共有6个元素,我们假设其中之一z=[1,3,2],则 z 3 = 2 z_3=2 z3=2,而 z < 3 = [ 1 , 3 ] z_{<3}=[1,3] z<3=[1,3]

有了上面的记号,则排列语言模型的目标是调整模型参数使得下面的似然概率最大:
排序语言模型

在这里插入图片描述

1.2.2 双流selft-attention

首先,需要强调一点,尽管上面讲的是把句子X的单词排列组合后,再随机抽取例子作为输入,但是,实际上你是不能这么做的,因为Fine-tuning阶段你不可能也去排列组合原始输入。所以,就必须让预训练阶段的输入部分,看上去仍然是x1,x2,x3,x4这个输入顺序,但是可以在Transformer部分做些工作,来达成我们希望的目标。

具体而言,XLNet采取了Attention掩码的机制,你可以理解为,当前的输入句子是X,要预测的单词Ti是第i个单词,前面1到i-1个单词,在输入部分观察,并没发生变化,该是谁还是谁。但是在Transformer内部,通过Attention掩码,从X的输入单词里面,也就是Ti的上文和下文单词中,随机选择i-1个,放到Ti的上文位置中,把其它单词的输入通过Attention掩码隐藏掉,于是就能够达成我们期望的目标(当然这个所谓放到Ti的上文位置,只是一种形象的说法,其实在内部,就是通过Attention Mask,把其它没有被选到的单词Mask掉,不让它们在预测单词Ti的时候发生作用,如此而已。看着就类似于把这些被选中的单词放到了上文Context_before的位置了)。

具体实现的时候,XLNet是用“双流自注意力模型”实现的,细节可以参考论文,但是基本思想就如上所述,双流自注意力机制只是实现这个思想的具体方式,理论上,你可以想出其它具体实现方式来实现这个基本思想,也能达成让Ti看到下文单词的目标。

这里简单说下“双流自注意力机制”,一个是内容流自注意力,其实就是标准的Transformer的计算过程;主要是引入了Query流自注意力,这个是干嘛的呢?其实就是用来代替Bert的那个[Mask]标记的,因为XLNet希望抛掉[Mask]标记符号,但是比如知道上文单词x1,x2,要预测单词x3,此时在x3对应位置的Transformer最高层去预测这个单词,但是输入侧不能看到要预测的单词x3,Bert其实是直接引入[Mask]标记来覆盖掉单词x3的内容的,等于说[Mask]是个通用的占位符号。而XLNet因为要抛掉[Mask]标记,但是又不能看到x3的输入,于是Query流,就直接忽略掉x3输入了,只保留这个位置信息,用参数w来代表位置的embedding编码。其实XLNet只是扔了表面的[Mask]占位符号,内部还是引入Query流来忽略掉被Mask的这个单词。和Bert比,只是实现方式不同而已。

双流
上面讲的Permutation Language Model是XLNet的主要理论创新,所以介绍的比较多,从模型角度讲,这个创新还是挺有意思的,因为它开启了自回归语言模型如何引入下文的一个思路,相信对于后续工作会有启发。当然,XLNet不仅仅做了这些,它还引入了其它的因素,也算是一个当前有效技术的集成体。感觉XLNet就是Bert、GPT 2.0和Transformer XL的综合体变身:

首先,它通过PLM(Permutation Language Model)预训练目标,吸收了Bert的双向语言模型;
然后,GPT2.0的核心其实是更多更高质量的预训练数据,这个明显也被XLNet吸收进来了;
再然后,Transformer XL的主要思想也被吸收进来,它的主要目标是解决Transformer对于长文档NLP应用不够友好的问题。

1.2.3 transformer-XL(待续)

1.3 实验结果

实验1

实验2

1.4 个人点评(待续)

参考文献:
【1】xlnet原理,李理的博客,http://fancyerii.github.io/2019/06/30/xlnet-theory/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值