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

这一章我们来唠唠如何优化BERT对文本长度的限制 。BERT使用的Transformer结构核心在于注意力机制强大的交互和记忆能力 。不过Attention本身O(n^2)的计算和内存复杂度,也限制了Transformer在长文本中的应用 。
之前对长文档的一些处理方案多是暴力截断 , 或者分段得到文本表征后再进行融合 。这一章我们看下如何通过优化attention的计算方式,降低内存/计算复杂度,实现长文本建模 。Google出品的Efficient Transformers: A Survey里面对更高效的Transformer魔改进行了分类,这一章我们主要介绍以下5个方向:

  1. 以Transformer-XL为首的片段递归
  2. Longformer等通过稀疏注意力,降低内存使用方案
  3. Performer等通过矩阵分解 , 降低attention内积计算复杂度的低秩方案
  4. Reformer等可学习pattern的注意力方案
  5. Bigbird等固定pattern注意力机制

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

文章插图
Transformer-xl
  • paper: Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context
  • github:https://github.com/kimiyoung/transformer-xl
  • Take Away: 相对位置编码 + 片段递归机制
    Bert不完全手册9. 长文本建模 BigBird & Longformer & Reformer & Performer

    文章插图
为了突破Transformer对固定长度建模的限制 , Transformer-xl提出了相对位置编码和片段递归的方案 , 后续也被XLNET沿用~
  1. 片段递归
片段递归的思路其实很早就有,不过之前的方案多是保留上一个片段的last hidden state,作为当前片段的补充信息 。而Transformer-xl则是直接保留并cache了上个片段的所有hidden state,和当前片段进行拼接,梯度更新时只更新当前片段的隐藏层 。
具体的Attentenion计算中如下,\(\tau\)是片段,\(n\)是hidden layer,\(\circ\)是向量拼接,\(SG()\)是不进行梯度更新的意思 。于是当前片段Q,K,V是由上个片段的隐藏层和当前片段的隐藏层拼接得到 。每个片段完成计算后会把隐藏层计算结果进行存储 , 用于下个片段的计算,用空间换时间,既避免了重复计算 , 又使得新的片段能保留大部分的历史片段信息 。这里的历史片段信息并不一定只使用T-1,理论上在内存允许的情况下可以拼接更多历史片段~
Bert不完全手册9. 长文本建模 BigBird & Longformer & Reformer & Performer

文章插图
  1. 相对位置编码
片段递归如果和绝对位置编码一起使用会存在问题,因为不同片段相同位置的绝对位置编码相同,模型无法区分它们来自不同的片段 。因此作者提出了相对位置编码 。之前在讨论绝对位置编码不适用于NER任务时有分析过相对位置编码>>中文NER的那些事儿5. Transformer相对位置编码&TENER代码实现,这里我们再回顾下~
Bert不完全手册9. 长文本建模 BigBird & Longformer & Reformer & Performer

文章插图
绝对位置编码是直接加到词向量上,在Attention计算中进行交互 。把内积展开可以得到如上形式 , 包括4个部分:Query和Key的纯语义交互,各自的位置信息和语义的交互,以及反映相对距离的位置交互 。
Bert不完全手册9. 长文本建模 BigBird & Longformer & Reformer & Performer

文章插图
Transformer-XL的相对位置编码和以上的展开形式基本一一对应,也使用了三角函数的编码方式 , 只需要两点调整
  • key对应的绝对位置编码\(p_j\)替换为两个token相对位置i-j的相对位置编码\(R_{i,j}\)
  • query的位置编码\(P_iW_q\)替换成两个learnable的参数u和v
和以上绝对位置编码的Attention计算对比:
  • 语义交互不变
  • 位置交互:绝对位置编码内积替换为相对位置编码对应的全局位置偏置, 在表征距离的同时加入了方向信息
  • query位置*key语义:因为交互是计算一个query token对全部key token的attention,所以这里的位置编码部分是个常量,作者替换为了trainable的参数u,于是这部分有了更明确的含义就是key对应的全局语义偏置
  • query语义*key位置: 替换为query语义 * query和key的相对位置编码,也就是语义和位置交互
【Bert不完全手册9. 长文本建模 BigBird & Longformer & Reformer & Performer】结合片段递归和相对位置编码 , Transformer-xl突破了Transformer对固定文本长度的限制 。同时片段递归和以下4种Transformer优化方案是正交的关系,可以在以下的四种方案中叠加使用片段递归去优化长文本建模

推荐阅读