Transformer家族2 -- 编码长度优化(Transformer-XL、Longformer)

1 背景

NLP中经常出现长程依赖问题,比如一个词语可能和它距离上千位置的另一个词语有关系。长程关系的建立十分困难。常见序列结构模型都有一些难点,如下。

  1. 在RNN中,由于反向传播梯度衰减和梯度爆炸问题,使得模型只能捕获较短距离。
  2. LSTM利用门限机制,将连乘转变了为连加,提升了模型长程捕获能力,但梯度弥散问题没有从根本上得到解决,故其最大程度只能在400左右。
  3. Transformer利用self-attention机制进行建模,使得任何两个位置token距离都为1。如果没有内存和算力的限制,Transformer理论上可以编码无限长的文本。但由于attention计算量十分大,而且计算复杂度和序列长度为O(n^2)关系,导致序列长度增加,内存和计算量消耗飞快增加。实际中由于内存和算力有限,一般只能编码一定长度,例如512。

为了提升模型的长程编码能力,从而提升模型在长文本,特别是document-level语料上的效果,我们必须对Transformer编码长度进行优化。本文带来了Transformer-XL、Longformer,详细分析他们如何实现编码长度优化。

LongFormer通过降低attention计算所需内存和算力,来实现长文本编码。我们也可以把它归入到算力优化中。但鉴于其名字就重点体现了它的长距离能力,故还是放在了编码长度优化中,和Transformer-XL一起来分析

2 Transformer-XL

在这里插入图片描述
论文信息:2019年01月,谷歌 & CMU,ACL 2019
论文地址 https://arxiv.org/abs/1901.02860
代码和模型地址 https://github.com/kimiyoung/transformer-xl

2.1 为什么需要Transformer-XL

为了解决长文本编码问题,原版Transformer采用了固定编码长度的方案,例如512个token。将长文本按照固定长度,切分为多个segment。每个segment内部单独编码,segment之间不产生交互信息。这种方式的问题如下

  1. 模型无法建模超过固定编码长度的文本
  2. segment之间没有交互信息,导致了文本碎片化。长语句的编码效果有待提升。
  3. predict阶段,decoder每生成一个字,就往后挪一个,没有重复利用之前信息,导致计算量爆炸

train和evaluate过程如下在这里插入图片描述

2.2 实现方法

2.2.1 Segment-Level Recurrence with State Reuse 片段级递归和信息复用

Transformer-XL在编码后一个segment时,将前一个segment的隐层缓存下来。后一个segment的self-attention计算,会使用到前一个segment的隐层。后一个segment的第n+1层,对前一个segment的第n层隐层进行融合。故最大编码长度理论上为O(N × L)。在预测阶段,由于对segment隐层使用了缓存,故每预测一个词,不需要重新对之前的文本进行计算。大大提升了预测速度,最大可达到原始Transformer的1800倍。如下图所示
在这里插入图片描述

2.2.2 Relative Positional Encodings 相对位置编码

segment递归中有个比较大的问题,就是如何区分不同segment中的相同位置。如果采用原版Transformer中的绝对编码方案,两者是无法区分的。如下
在这里插入图片描述不同segment中的相同位置,其position encoding会相同。这显然是有问题的。Transformer-XL将绝对位置编码改为了q和k之间的相对位置编码,代表了两个token之间的相对位置。从语义上讲,是make sense的。我们来看看具体实现方式。

绝对位置编码的attention计算如下
在这里插入图片描述分为四部分

  1. query的token encoding和 key的token encoding,之间的关联信息
  2. query的token encoding和 key的position encoding,之间的关联信息。Uj为绝对位置j的编码向量
  3. query的position encoding和 key的token encoding,之间的关联信息。Ui为绝对位置i的编码向量
  4. query的position encoding和 key的position encoding,之间的关联信息

而采用相对位置编码后,attention计算如下
在这里插入图片描述同样包含四部分,仍然为二者token encoding和position encoding之间的关联关系。区别在于

  1. Ri-j为i和j之间相对位置编码,其中R为相对位置编码矩阵
  2. u和v为query的位置编码,采用一个固定向量。因为采用相对位置编码后,无法对单个绝对位置进行编码了。文中称为global content bias,和global positional bias

也有其他文章,采用了不同的相对位置编码方案。比如"Peter Shaw, Jakob Uszkoreit, and Ashish Vaswani.2018. Self-attention with relative position representations. arXiv preprint arXiv:1803.02155." 中只有a和b两部分,丢掉了c和d。Transformer-XL对两种方案进行了对比实验,证明前一种好。

2.3 实验结果

长文本编码效果

在这里插入图片描述
在WikiText-103上的实验结果。WikiText-103包含词级别的超长文本,平均每篇文章长度为3.6K token。利用它可以验证模型的长文本编码能力。实验结果表明Transformer-XL large的PPL最低,效果最好。同时作者在One Billion Word、enwik8、text8上均进行了实验,都表明Transformer-XL效果最好。

有效编码长度

在这里插入图片描述
模型可编码的有效长度如上,r为top-r难度样本上的表现。Transformer-XL比RNN长80%,比Transformer长450%。证明Transformer-XL可编码长度最长,长程捕获能力最强。

预测速度

在这里插入图片描述
在不同segment长度下,模型预测速度的对比。和原始Transformer相比,预测速度最大可以提升1874倍。

消融分析

文章对片段级递归和相对位置编码两个Method进行了消融分析,如下
在这里插入图片描述
两个改进点均有作用,其中片段级递归作用更大。

3 Longformer

在这里插入图片描述
论文信息:2020年04月,allenai
论文地址 https://arxiv.org/abs/2004.05150
代码和模型地址 https://github.com/allenai/longformer

3.1 改进方法

3.1.1 attention稀疏化

Transformer不能捕获长距离信息,本质原因还是因为计算量过大导致的。那我们通过降低attention计算量,是不是就可以提升长距离编码能力呢。答案是肯定的,LongFormer提出了三种attention稀疏化的方法,来降低计算量。
在这里插入图片描述
a是原始的全连接方式的attention。后面三种为文章使用的稀疏attention。

  1. Sliding Window attention。滑窗方式的attention。假设序列长度为n,滑窗大小w,则每个位置的attention只和滑窗范围内的token进行计算,复杂度从O(n^2)变为了O(n * w)。当w << n时,可以大大降低计算量。
  2. Dilated Sliding Window attention。受到空洞卷积的启发,提出了空洞滑窗attention。看下面这张图就明白了。

在这里插入图片描述

  1. Global Attention + sliding window。某些关键位置采用全局attention,这些位置的attention和所有token进行计算。而其他相对不关键的位置则采用滑窗attention。那什么叫关键位置呢?作者举例,分类问题中[CLS]为关键位置,需要计算全局attention。QA中question每个位置均为关键位置,同样计算全局attention。

3.1.2 Tensor Virtual Machine (TVM)

作者使用了TVM构建CUDA kernel,加快了longformer的速度,并降低了显存需求。这个又是另一个模型加速方面的话题,我们就先不展开了。

3.2 实验结果

大小模型效果

在这里插入图片描述作者在大小模型上均实验了LongFormer的效果。小模型为12 layers,512 hidden。大模型为30 layers,512 hidden。在text8和enwik8数据集上。小模型达到了SOTA。大模型比18层的Transformer-XL好,虽然不如Adaptive-span-Transformer和Compressive,但胜在可以pretrain-finetune

消融分析

在这里插入图片描述消融分析中,可以发现

  1. Dilation空洞,有一定的收益
  2. top layer滑窗大小比bottom layer大时,效果好一些。这个也是make sense的。因为top layer捕获高维语义,关联信息距离相对较远,窗口应该尽量大一些。

语料长度

在这里插入图片描述
从上表中我们发现,语料都是特别长的长文本。LongFormer真的是document级别的Transformer。

下游任务finetune效果

在这里插入图片描述
在这里插入图片描述
第一个table为RoBERTa和LongFormer在问答、指代消解、分类任务中的对比。第二个table为这几个任务数据集平均文本长度。每项任务都是超出RoBERTa,当文本长度大于512时,performance提升特别明显。更加说明了长程捕获能力在NLP中的重要性。

猜你喜欢

转载自blog.csdn.net/u013510838/article/details/107006303