Longformer论文解读: The Long-Document Transformer

Longformer要解决什么问题

  • 原始transformer有O(n2)时间空间复杂度(根据attention的公式,每个位置的Query都需要关注每个位置的Key),n是输入文本的长度。长文档时,原始transformer的复杂度太高。对于长文档,通常做法切分文档(单块限制在512内)切分的文档之间没有交互信息,这样损失了很多有用信息。

在这里插入图片描述

Longformer怎么解决

  • 如下图,a代表原始Transformer的注意力, b代表固定窗口的注意力,c代表跳跃滑动窗口的注意力,d代表全局加滑动窗口的注意力。图中深绿色面积代表Query的数量,浅绿色面积代表Query需要关注的Key的数量,可以看出原始的注意力复杂度是正方形整块面积,复杂度就是平方,其他复杂度都是线性的。之后我们分三方面分别介绍三种模式的注意力。
    在这里插入图片描述
  • 从实验图中可以看出,空间复杂度明显提升。
    在这里插入图片描述

固定窗口

  • 固定窗口就是如图a,每个位置的Query只关注相邻的w个位置的Key。这个类似于CNN的窗口的概念。计算复杂度就直接变成了w * n, 由于w可以设置的比较小,所以,复杂度变成了线性。这个更加适合浅层捕获局部信息。

跳跃滑动窗口

  • 跳跃滑动窗口就是如图b,每个位置的Q关注的K还是W个,但是W个不是连续的而是跳跃的。定义跳跃的间隔是d, 那么Q关注的K的范围就是w * d。跳跃的attention的关注的视野会更大,对于深层更加适合捕获长途信息。

全局注意力

  • 全局注意力就和普通的transformer是一样的,都是关注全部的K。全局的注意力是上面两种注意力的补充,为了捕获全局的信息。主要用于特殊的位置,比如Bert的[cls]这个位置。由于全局注意力复杂度比较高,需要谨慎使用,在不同任务上需要不同设置。比如QA任务中,问题答案都是连接到了一起,Q都需要用全局注意力,因为答案很多,用局部注意力是看不全答案的。
  • 线性映射(linear proj): 论文提出两套映射矩阵,也就是使用两套参数,一套用于基于窗口的局部自注意力,另一套用于全局注意力。实验结果证明两套参数能更好处理两种类型不同的注意力。

实现细节

  • 稀疏矩阵:所有存储都是用稀疏矩阵,如果值为0,都跳过计算,提高计算效率。
  • 矩阵乘法:跳跃滑动窗口比较特殊,不能直接使用高效的矩阵乘法。作者自己实现了基于Cuda的高效算法。
  • 训练技巧:阶段式的训练方式,序列长度和窗口大小逐步提
    高,窗口大小和序列长度增加一倍,并将学习率减半。这样可以加快训练速度。

实验结果

实验自回归语言模型

  • 模型采用字符级别的自回归语言模型。数据集用的是text8和enwik8 。
  • 在小的模型上 (12 层, 512 hidden_size) ,long former比其他模型都要好。
  • 在大的模型上(30 层, 512 hidden_size) ,比18层的transformer_xl要好,跟第二个和第三个齐平,不如第4、5。(4、5不适合预训练、微调模式)

在这里插入图片描述

text8的消融实验

  • 实验设置:在 text8 任务中,使用小模型训练150K步。
  • 结论1: 由底层至高层递增窗口大小,可提升性能;递减则反而性能降低。
  • 结论2: 有跳跃窗口的效果比没有跳跃窗口的效果要好。
    在这里插入图片描述

WikiHop的消融实验

  • 长文本表现明显高于roberta
  • 可以看出没有线性映射的效果明显下降
  • 没有全局注意力效果也是明显下降
  • 当用RoBERTa-base(seqlen: 512, attention n2 )的准确率比较低,也说明效果的提升不是来自于额外的预训练,而是模型结构的改进。
    在这里插入图片描述

Qa任务

  • 效果全面领先roberta。
    在这里插入图片描述

如有不对地方,欢迎指出,谢谢。

参考链接:论文:https://arxiv.org/abs/2004.05150

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值