前言: 《Longformer: The Long-Document Transformer》于2020年4月发表,相较于Transformer,Longformer利用local attention和global attention在长文本任务的处理上大大减低了时间负责度和空间负责度。
论文:https://arxiv.org/pdf/2004.05150.pdf 源码:https://github.com/allenai/longformer
摘要
基于Transformer的模型不能处理长文本,因为其自注意力操作(消耗的时间和空间)会随着序列长度成平方增长。为解决这个限制,我们提出了Longformer,它使用随着序列长度线性变化的attention机制,这样便于处理上千个token甚至更多。Longformer的attention机制用窗口调节的local attention和任务驱动的global attention联合来替换标准的self-attention。我们在字符级别语言模型上评估Longformer,在text8和enwik8上取得了最好的效果。与大部分先前的研究工作做对比,我们也预训练Longformer并在各种各样的下游任务微调它。在长文档任务上我们预训练的Longformer优于RoBERTa,并且在WikiHop和TriviaQA.1上刷新最佳效果。
简介
Transformer的成功一定程度上源于自注意力机制,它使得网络可以通过整个句子学习到上下文信息。然而,这也使得内存和计算量随着max sequence的增长而呈平方增长趋势。
Longformer则可解决这一问题,那么它是如何做到的呢?Longformer是修正版的Transformer,它的attention机制,融合了窗口范围内(窗口大小可调节)局部向下文的self-attention和基于下游任务的global attention。这样self-attention操作随着文本长度呈线性增长,对于长文本的nlp问题就可以很好的处理了。而且,Longformer可以通过多个注意力层来构建对全文的理解,以减少特定任务的需求。
本文首先在自回归字符级别的语言模型上评估Longformer,该模型使用窗口和新的可扩展注意力模型的结合,使得模型在GPU上可处理32K以上长度的字符。之后,我们评估Longformer替换现有预训练模型的全self-attention操作的能力,我们在RoBERTa发布的checkpoint上,使用MLM目标进行预训练。
模型结构
原始Transformer模型的自注意力机制时间和空间复杂度是O(n2),其中n为输入序列长度,这就使得它不能有效处理长输入。与全自注意力机制不同,本文提出的注意力模式随输入长度线性增长,这就使得本文可以有效处理长输入序列。接下来,我们讨论这种注意力的设计和实现。表2展示了注意力部分的全部配置。
Sliding Window 2019年Kovaleva等人提出局部上下文的重要性,这里的注意力模式在每个token周围使用固定窗口大小注意力。使用该窗口式注意力的多个集成层会产生一个大的感受野,其中顶层可以访问所有输入位置,并且有能力构建包含整个输入信息的表示。该注意力模式,窗口大小为w,每个token和每行的12w个token关联。该模式的计算复杂度为O(n×w),它和输入序列长度n呈线性关系。为了使该注意力模式有效,w应该远远小于n。然而如上提到的,典型的集成多Transformer模型都会有一个大的感受野。这类似于CNN,在CNN中,小(卷积)核的集成层形成高级特征,这些特征由大部分输入(感受野)构建而成。在本文中,使用l层Transformer,则感受野大小为l × w(假设所有层的w是固定的)。基于应用,每层使用不同的w有助于平衡效率和模型表达能力。
实验部分
和其他transformer模型的实验一样,都会有个base版的小模型和一个相对较大的large版模型。base版模型是12层,large版模型共30层(Transformer-X有18层和24层,可以对比感受下层数增加的幅度),它们都用了512个“隐藏单元”。
实验数据集采用是text8和enwik8,从小、大模型的实验的对比数据中我们不能发现,Longformer并没有比其他模型在效果提升上有很大进步,但是其在保证模型有效性的前提下,大大减少了训练参数的大小。所以Longformer的贡献更多的应该在“模型剪枝”上。
读完类似论文,总会有个问题浮现,支持中文么?目前还没查到落地到中文的项目,但是基于这种思想落地应该不难(鄙人还没试过…)
更多内容,欢迎关注“机器爱学习”公众号~
|