Longformer: The Long-Document Transformer

与reformer都是解决长序列问题:

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

由于self-attention机制,无法处理长序列,用reformer里面的例子就是:计算量与句子长度的平方成正比,比如64K个token的句子,经过self-attention之后用float32存储需要16GB。

提出:随序列长度线性增加的注意力机制,将a local windowed attention(局部窗口注意力---构建上下文表示)task motivated global attention(任务驱动全局注意力---用于构建预测的完整序列表示)结合。

定义了某种形式的稀疏注意力模式,避免了计算全部的注意力矩阵,与这种方法相似的是Sparse Transformers,使用8*8的Dilated(空洞)滑动窗口。

处理长文本的一些方法:

  • Bert直接截取最多512个token进行处理;
  • 把文档分割成512个token大小的块,分开处理,然后将activations与特定的任务结合起来此文
  • 使用两阶段模型,第一阶段检索相关文档,第二阶段进行答案提取;

所有的两阶段的方法都会因为截断(truncating)或则分块(chunking)而丢失信息,Longformer可以处理长序列而不用截断或分块。

Longformer

根据一种“attention pattern”来稀疏化full self-attention矩阵,该模式指定了一对相互注意的输入位置。

Attention Patten

Sliding Window(滑动窗口)

滑动窗口attention,即对每个token采用固定大小的窗口计算局部attention

固定的窗口大小为w,每个token计算其两边各w/2个tokens。计算的复杂度为O(n\times w),计算的规模随序列长度线性增加。Transformer的层数为l,最顶层的receptive field的大小为l\times w,可以根据效率和模型的表达能力调整w的值。具体实现的时候,设置的窗口大小w=512Longformer并不轻量
 

Dilated Silding Window(空洞滑动窗口)d

 为了进一步增加receptive field而不增加计算量,可以使窗口为空洞的(从图可以看出,深蓝色的个数不变,但是范围增加了,即receptive field)。

其中,空洞的间隙为d(运气:空洞的地方信息不重要!),假设dw在每层都固定,receptive field的大小为l\times d\times w

Global Attention

sliding window attention和dilated window attention不够灵活,无法学习到基于特定任务的表示,因此对一些少数位置进行Global attention计算,即对整个序列都计算attention,并且计算attention具有对称性。

这些少数位置如何确定呢?其实要根据具体的任务决定。

在分类任务上,这个Global attention就在[CLS]的位置;而在QA任务上,就在整个问句上计算Global attention。计算Global attention的位置很少,所以复杂度还是O(n)

Autoregressive Language Modeling

  1. 每层使用不同的window size, 底层w较小,高层w越高,这样做使得高层更专注于获得更多的全局表达、底层更专注于局部attention,同时也平衡了效率和性能。
  2. 只对高层encoder的两个head使用dilated sliding window。

 

在Tensorflow和pytorch的原始实现中,并没有用于计算滑动窗口attention的专门的实现,因为这个实现需要实现矩阵乘积且只要对角线的位置的非0值需要存在内存里。

而如果用for循环又异常的慢。所以用high-level的python struct描述了这种算法,并基于TVM生成了可以在GPU上编译的代码。官方代码

 

reference

《Longformer: The Long-Document Transformer》论文笔记

Longformer详解​​​​​​​

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值