Longformer: The Long-Document Transforme

本文来自于2020年的一篇顶会

摘要

    基于 Transformer 的模型由于其自注意力操作而无法处理长序列,自注意力操作与序列长度呈二次方缩放。为了解决这个限制,我们引入了带有注意力机制的 Longformer,该机制随序列长度线性扩展,从而可以轻松处理数千个标记或更长的文档。 Longformer 的注意力机制是标准自注意力的直接替代品,并将局部窗口注意力与任务驱动的全局注意力结合起来。继之前关于长序列转换器的工作之后,我们在字符级语言建模方面评估了 Longformer,并在 text8 和 enwik8 上取得了最先进的结果。与大多数先前的工作相比,我们还对 Longformer 进行预训练并针对各种下游任务对其进行微调。我们经过预训练的 Longformer 在长文档任务上始终优于 RoBERTa,并在 WikiHop 和 TriviaQA 上创造了新的最先进结果。最后,我们介绍了 Longformer-Encoder-Decoder (LED),这是一种 Longformer 变体,用于支持长文档生成序列到序列任务,并在 arXiv 摘要数据集上证明了其有效性。

Introduction

Longformer是一种可高效处理长文本的模型,出自AllenAI 2020年4月10日。目前已经开源,而且可以通过huggingface快速使用

传统Transformer-based模型在处理长文本时存在一些问题,因为它们均采用"我全都要看"型的attention机制,即每一个token都要与其他所有token进行交互,无论是空间还是时间复杂度都高达O ( n 2 ) O(n^2)O(n 2 )。为了解决这个问题,之前有些工作是将长文本切分为若干个较短的Text Segment,然后逐个处理,例如Transformer-XL。但这会导致不同的Text Segment之间无法进行交互,因而必然存在大量的information loss(信息丢失)。当然,我们也可以通过添加一些其它机制来加强Text Segment之间的交互,但这种新机制实现起来要么很复杂,要么是task-specific的,通用性不强

本文提出的Longformer,改进了Transformer传统的self-attention机制。具体来说,每一个token只对固定窗口大小附近的token进行local attention(局部注意力)。并且Longformer针对具体任务,在原有local attention的基础上增加了一种global attention(全局注意力)

Longformer在两个字符级语言建模任务上都取得了SOTA的效果。并且作者用Longformer的attention方法继续预训练RoBERTa,训练得到的语言模型在多个长文档任务上进行fine-tune后,性能全面超越RoBERTa
 

Related Work

  作者共提出了三种新的attention机制,这三种方法都很好的降低了传统self-attention的复杂度,它们分别是滑窗机制、空洞滑窗机制、融合全局信息的滑窗机制,对应于下图的b , c , d b,c,db,c,d

 滑窗机制 (Sliding window attention)
对于每一个token,只对其附近的w ww个token计算attention,复杂度为O ( n × w ) O(n\times w)O(n×w),其中n nn为文本的长度。作者认为,根据应用任务的不同,可以对Transformer每一层施以不同的窗口大小w ww

读到这里,大家可能和我一样,误认为这个窗口w ww的值比较小,估计在8-64的量级。但看到实验部分会发现,作者在具体实现的时候,设置的窗口大小w = 512 w=512w=512,与BERT的input限制完全一样,所以大家不要存有"Longformer比BERT更轻量"的错觉

空洞滑窗机制 (Dilated sliding window)

  对每一个token进行编码时,普通的滑窗机制只能考虑到长度为w ww的上下文。作者进一步提出空洞滑窗机制(实际上空洞滑窗是CV领域中很早就有的一项技术),在不增加计算负荷的前提下,拓宽视野范围。在滑动窗口中,被attented到的两个相邻token之间会存在大小为d dd的间隙,因此每个token的视野范围可达到d × w d\times wd×w。实验表明,由于考虑了更加全面的上下文信息,空洞滑窗机制比普通的滑窗机制表现更佳
 

实际上我个人认为,空洞滑窗的效果存在一定的运气成分,凭什么attend某个间隔之外的词,效果就一定比单纯attend周围的词效果更好呢?举个反例说明:

I lost some money at the casino yesterday

传统滑窗,窗口大小w = 5 w=5w=5,那么lost这个词就可以attend到casino

空洞滑窗,窗口大小w = 5 , d = 5 w=5,d=5w=5,d=5,那么lost这个词就没办法attend到casino

是否attend到casino这个词,对于这句话意思的理解有着至关重要的影响

再回到空洞滑窗本身,其实相比于传统滑窗,它看到token的数量并没有增加,无非是通过间隔一定数量的token来达到视野范围扩大的效果。然而就像我上面举的例子,这些被间隔的token是否就不重要呢?似乎要打一个问号
 

融合全局信息的滑窗机制 (Global+sliding window)

  我们知道BERT类的语言模型在fine-tune时,实现方式略有不同。比如,对于文本分类任务,我们会在整个输入的前面加上[CLS]这个token;而对于QA任务,我们则会将问题与文本进行拼接后进行输入。在Longformer中,作者也希望能够根据具体任务的不同,在原本local attention的基础上添加少量的global attention。例如,在分类任务中会在[CLS]初添加一个global attention(对应下图第一行第一列全蓝);而在QA任务上会对question中的所有token添加global attention。如下图所示,对于添加了global attention的token,我们对其编码时要对整个序列做attention,并且编码其它token时,也都要attend到它

Results

 

作者在text8和enwiki8两个字符级任务上对Longformer进行了实验。实验中每一层采用了不同的窗口大小,具体来说:底层使用较小的滑窗,以构建局部信息;越上层滑窗越大,以扩大感受野。训练时,理想状况当时是希望使用GPU所能承受最大的w ww和sequence length,但为了加快训练速度,作者采用的是多阶段训练法:从较短的序列长度和窗口大小开始,后续每个阶段将窗口大小和训练长度增加一倍,并将学习率减半。作者一共训练了5个阶段,第一个阶段sequence length是2048,最后一个阶段是23040

实验结果如下所示,Longformer在这两个数据集上皆达到了SOTA(注:测试指标为BPC,bits-per-character,BPC越小性能越好)

作者通过实验,对滑窗机制的设置进行了进一步讨论,如下表所示

  • 第一组实验(前三行)讨论的是:如果不同层采用不同的窗口大小,是否可以提高性能?结果表明,由底至高层递增窗口大小,可以提升性能;反之则降低
  • 第二组实验(后两行)讨论的是:采用空洞滑窗机制是否可以提高性能?结果是肯定的

 

MLM Pretraining
作者以RoBERTa为基础,采用Longformer的方法在以下四个文档级语料上进行预训练,并且设定每一层都采用固定大小为512的滑动窗口,暂时不添加global attention。为支持长文本,论文中作者把position embedding扩展到了4096的大小

全局+滑动窗口(global+sliding window)
Bert
应用于具体任务时,实现方式略有不同:
对于文本分类任务,会在文本序列前添加[CLS]这一特殊token;
而对于QA类任务,则会将问题与文本进行拼接后输入。
Longformer
作者也希望能够根据具体任务的不同,在local attention的基础上添加少量的global attention。
比如,在分类任务上就会在[CLS]处添加一个global attention
而在QA任务上会对question中的所有token添加global attention。
对于添加了global attention的token,对其编码时要对整个序列做attention。并且,编码其他所有token时,也要attention。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值