Bert不完全手册9. 长文本建模 BigBird & Longformer & Reformer & Performer( 二 )


Longformer

  • paper: Longformer: The Long-Document Transformer
  • github:https://github.com/allenai/longformer
  • 中文预训练模型:https://github.com/SCHENLIU/longformer-chinese
  • Take Away: 滑动窗口稀疏注意力机制

Bert不完全手册9. 长文本建模 BigBird & Longformer & Reformer & Performer

文章插图
Longformer的3点主要创新是
  1. 滑动窗口attention(图b)
解决attention计算复杂度最简单直观的方案,就是把原本all-2-all的attention计算限制到适当的window size(w)内,这样对于长度为n的序列,原本O(n^2)的复杂度就缩减到了O(n*w) 。因为attention本质是引入当前token的上下文信息,但token其实很难和八丈远外的内容进行交互,所以合理的窗口选择并不会损失太多的信息,并且和stack-cnn相同更高的layer会拥有更大的感知野 。Longformer这里选择了512作为窗口大?。?attention的复杂度和BERT相同 。
  1. 空洞滑窗attention(图C)
和Dilated-CNN相同,这里作者也采用了dilation来扩大相同计算量下的感知野 。不过感觉这里和CNN还是有些区别,图像使用Dilation因为单一像素本身信息有限,需要通过kernel来提取图片局部特征,而对文本序列来说 , 每个token就是最小粒度的信息元包含信息更多,因此dilation会带来更多的信息损失 。不过作者在使用过程中也加了一些tricks,包括对多头的不同头使用不同的dilation策略,以及底层layer不使用dilation保留更多信息 , 更高层使用更大的dilation扩大感知野 。不过在后面的消融实验中空洞滑窗的效果提升并不十分显著 。
  1. 任务导向全局attention(图d)
以上局部attenion在一些任务中存在不足,例如QA任务中可能问题无法和上下文进行完整交互,以及分类任务中CLS无法获得全部上下文信息 。因此作者在下游任务微调中加入了针对部分token的全局attention 。因此在下游微调时,需要进行全局交互的token,会用预训练的Q,K,V进行初始化,不过会用两套线性映射的参数分别对全局和滑动窗口的Q,K,V进行映射 。
Longformer的预训练是在Roberta的基础上用长文本进行continue train 。原始Roberta的position embedding只有512维 , 这里longformer把PE直接复制了8遍,得到4096维度的PE用于初始化,这样在有效保留原始PE局部信息的同时,也和以上512的window-size有了对应 。至于longformer的效果,可以直接看和下面BigBird的对比 。
Bigbird
  • paper: Big Bird:Transformers for Longer Sequences
  • github: https://github.com/google-research/bigbird
  • Take Away: 使用补充固定token计算全局注意力

Bert不完全手册9. 长文本建模 BigBird & Longformer & Reformer & Performer

文章插图
又是一个非常清新脱俗的模型起名~ 大鸟模型和longformer相比增加了随机注意力机制,不过感觉主要的创新是对全局注意力机制进行了改良,提出了固定注意力patten的ETC全局注意力机制 。
  1. 随机注意力机制
在滑动窗口注意力之外 , 模型会每行随机采样r个token来进行交互,不过这里的随机注意力并不和以下的ETC全局注意力一同使用~
  1. 全局注意力
只使用滑动窗口注意力+随机注意力,作者发现效果和BERT相比还是有所损失,因此加入了全局注意力 。和longformer的区别在于,Bigbird除了支持对部分已有token(一般是序列的第一个和最后一个字符)进行全局attention之外,简称Bigbird-ITC 。还支持加入额外token(类似CLS)来做全局注意力,简称Bigbird-ETC,ETC不和随机注意力一同使用 。从下游任务效果上来看ETC的效果略好于ITC+随机注意力 , 效果对比基本是用的BigBird-ETC,不过这也限制了BigBird只能用在NLU场景~
整体效果 , 在QA和长文本摘要任务上上Bigbird基本是新SOTA
Reformer
  • paper: REFORMER: THE EFFICIENT TRANSFORMER
  • github: https://github.com/google/trax/tree/master/trax/models/reformer
  • Take Away: LSH搜索序列中的高权重token , 做固定长度局部注意力计算
先来看下原始Transformer的空间复杂度: \(max(b*l* d_{ffn}, b *n_{h} * l^2)*n_{l}\) 。其中b是batch,l是文本长度,\(d_{ffn}\)是Feed Forward层大小,\(n_{h}\)是多头的head size,\(n_l\)是层数 。Reformer引入了三个方案来降低Transformer的计算和内存复杂度

推荐阅读