5.9 Longformer解读
Posted 炫云云
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5.9 Longformer解读相关的知识,希望对你有一定的参考价值。
Transformer的问题
传统Transformer-based模型在处理长文本时存在一些问题, 因为它们均采用"我全都要看"型的attention机制,即每一个token都要与其他 所有token进行交互, 无论是空间还是时间复杂度都高达 O ( n 2 ) O\\left(n^{2}\\right) O(n2) ,从而它无法一次处理较长的文本。
BERT的处理方法是,将文本截断为512的长度,如此一来,虽然模型可以分段处理,但数据的预处理也是相当麻烦的。
为了解决这个问题, 之前有些工作是将长文本切分为若干个较短的文本段落, 然后逐个处理, 例如Transformer-XL。但这会导致不同的文本段落之间无法进行交互, 因而必然存在大量的信息丢失。当然, 我们也可以通过添加一些其它机制来加强文本段落之间的交互,但这种新机制实现起来要么很复杂, 要么是针对特定任务的, 通用性不强。
本文提出的Longformer, 改进了Transformer传统的self-attention机制。提出结合局部自注意力和全局自注意力
具体来说,每一个token只对固定窗口大小附近的token进行局部注意力 。并且Longformer针对具体任务,在原有局部注意力的基础上增加了一种全局注意力
稀疏自注意力
作者共提出了三种新的attention机制,这三种方法都很好的降低了传统self-attention的复杂度,它们分别是滑窗机制、膨胀滑窗机制、融合全局信息的滑窗机制,对应于图1的
b
,
c
,
d
b , c , d
b,c,d
图
1
图1
图1
- 滑窗机制 (Sliding window) : 对于每一个token, 只对其附近的w个token计算attention计算复杂度与文本序列长度 n n n 成线性关系, 为 O ( w ∗ n ) O(w * n) O(w∗n) 。作者认为, 根据应用任务的不同可以对Transformer每一层施以不同的窗口大小 w w w, 对模型表示能力可能有潜在帮助。
读到这里的, 大家可能和我一样, 误认为这个窗口 w w w 应该比较小, 估计在16 64这个量级。但看到实验部分会发现, 作者在具体实 现的时候, 设置的窗口大小 w w w 为512, 和Bert的Input限制完全一样。所以, 大家不要存有“Longformer比Bert还要更轻量”的错觉。
-
膨胀滑窗机制 (Dilated sliding window) : 在对每一个进行token编码时, 普通滑窗机制只能考虑到长度为 w w w 的上下文。作者进一步提出膨胀滑窗机制,在不增加计算负荷的前提下,拓宽视野范围。
其做法借鉴了膨胀卷积的思想1。如图1c所示,在滑动窗口中,被 attend到的两个相邻token之间会存在大小为d的间隙。当transformer的层数为 l l l时, 则每个token的视野范围可达到 l ∗ d ∗ w ∘ l * d * w_{\\circ} l∗d∗w∘ 实验表明,由于考虑了 更加全面的上下文信息, 膨胀滑窗机制比普通的滑窗机制表现更佳。
- 融合全局信息的滑窗机制(Global+sliding window):
我们知道Bert一类的语言模型在应用于具体任务时,实现方式略有不同。比如,对于文本分类任务,我们会在文本序列前添加[CLS]这一特殊token;而对于QA类任务,则会将问题与文本进行拼接后输入。
在Longformer中,作者也希望能够根据具体任务的不同,在局部attention的基础上添加少量的全局attention。比如,在分类任务上就会在[CLS]处添加一个全局attention,而在QA任务上会对question中的所有token添加全局attention。如图1d所示,对于添加了全局attention的token,我们对其编码时要对整个序列做attention。并且,编码其他所有token时,也都要attend到它。
自定义CUDA内核
由于现有的深度学习库中并没有能直接实现膨胀滑窗机制的接口,为此作者直接自定义了CUDA内核操作,用于实现Longformer的attention pattern。如下图所示,Longformer的内存消耗与文本长度成线性关系(红线)。用自定义CUDA来实现Longformer,相比于用Naive Pytorch来实现(蓝线),运行速度加快了六倍。
参考
Longformer: The Long-Document Transformer
blog.csdn.net/xixiaoyaoww/article/details/107398795
以上是关于5.9 Longformer解读的主要内容,如果未能解决你的问题,请参考以下文章