新潮狼网站建设,莱芜金点子信息港房屋出租,wordpress主题怎么破解,广州宣布5条优化措施Longformer#xff1a;处理长文档的Transformer模型
摘要
基于Transformer的模型由于自注意力操作的二次复杂度#xff0c;无法处理长序列。为了解决这一限制#xff0c;我们引入了Longformer#xff0c;其注意力机制与序列长度呈线性关系#xff0c;使其能够轻松处理数…Longformer处理长文档的Transformer模型
摘要
基于Transformer的模型由于自注意力操作的二次复杂度无法处理长序列。为了解决这一限制我们引入了Longformer其注意力机制与序列长度呈线性关系使其能够轻松处理数千个标记或更长的文档。Longformer的注意力机制是对标准自注意力的直接替代结合了局部窗口注意力和任务驱动的全局注意力。借鉴先前关于长序列Transformer的研究我们在字符级语言建模上评估了Longformer并在text8和enwik8上取得了最先进的结果。与大多数先前工作不同我们还对Longformer进行了预训练并在各种下游任务上进行了微调。我们的预训练Longformer在长文档任务上始终优于RoBERTa并在WikiHop和TriviaQA上创造了新的最先进结果。最后我们介绍了Longformer-Encoder-DecoderLED这是一种支持长文档生成式序列到序列任务的Longformer变体并在arXiv摘要数据集上展示了其有效性。
1 引言
TransformerVaswani等2017在包括生成式语言建模Dai等2019Radford等2019和判别式语言理解Devlin等2019在内的广泛自然语言任务中取得了最先进的结果。这一成功部分归功于自注意力组件它使网络能够从整个序列中捕捉上下文信息。尽管强大自注意力的内存和计算需求随序列长度呈二次增长使得处理长序列变得不可行或非常昂贵。 为了解决这一限制我们提出了Longformer这是一种改进的Transformer架构其自注意力操作与序列长度呈线性关系使其适用于处理长文档图1。这对于长文档分类、问答QA和共指消解等自然语言任务是一个优势现有方法通常将长上下文分割或缩短为较小的序列以适应BERT风格预训练模型的典型512标记限制。这种分割可能会导致跨分区信息丢失现有方法通常依赖复杂架构来解决这种交互问题。相比之下我们提出的Longformer能够使用多层注意力构建整个上下文的表示减少了对任务特定架构的需求。
最近的工作解决了Transformer在长序列上的计算效率问题见表1。然而它们主要关注自回归语言建模LM而长文档Transformer在迁移学习设置中应用于文档级NLP任务的情况Dai和Le2015Peters等2018Howard和Ruder2018Devlin等2019仍然未被充分探索。我们填补了这一空白并展示了Longformer的注意力机制可以作为预训练Transformer中自注意力机制的替代并在多个文档NLP任务中带来收益。
Longformer的注意力机制结合了窗口化的局部上下文自注意力和任务驱动的全局注意力编码了任务的归纳偏差。通过消融实验和对照试验我们展示了两种注意力类型都是必不可少的——局部注意力主要用于构建上下文表示而全局注意力使Longformer能够构建完整的序列表示以进行预测。
我们首先在自回归字符级语言建模上评估了Longformer使用窗口化和新的扩张注意力模式组合使模型能够在现代GPU上处理长达32K字符的序列。我们在text8和enwik8基准数据集上取得了最先进的结果展示了Longformer在长文档建模中的有效性。
然后为了评估Longformer替代现有预训练模型完整自注意力操作的能力我们使用掩码语言建模MLM目标对其进行预训练从RoBERTaLiu等2019发布的检查点继续。预训练后我们通过微调将其应用于下游语言任务并展示了Longformer在文本分类、QA和共指消解等广泛文档级自然语言任务上始终优于RoBERTa并在其中两个数据集上取得了最先进的结果。
最后我们介绍了一种Longformer变体它不是仅编码器的Transformer架构而是遵循类似于原始Transformer模型Vaswani等2017的编码器-解码器架构旨在用于序列到序列seq2seq学习Sutskever等2014。我们称这种模型为Longformer-Encoder-DecoderLED它在编码器网络上使用Longformer的高效注意力模式使其能够处理长文档seq2seq任务如摘要生成。我们在arXiv摘要数据集Cohan等2018上展示了LED的有效性。
2 相关工作
长文档Transformer 表1总结了最近关于长文档的工作。探索了两种自注意力方法。第一种是从左到右ltr的方法将文档分块从左到右处理。虽然这种模型在自回归语言建模中取得了成功但它们不适合需要双向上下文的任务的迁移学习方法。
我们的工作属于另一种通用方法即定义某种形式的稀疏注意力模式避免计算完整的二次注意力矩阵乘法。与我们的注意力模式最相似的模型是Sparse TransformerChild等2019它使用了一种由BlockSparseGray等2017提供的8x8块大小的扩张滑动窗口。我们的实现§3还包括一个自定义CUDA内核但它比BlockSparse更灵活和可维护后者是用C实现的并且是为特定版本的TensorFlow设计的。我们还引入了适用于常见NLP任务的额外任务驱动全局注意力模式§3并展示了它们在迁移学习设置中对良好性能的重要性。
一些模型尝试了自回归语言建模以外的任务这是一个进步因为主要关注语言建模作为主要评估可能导致开发出适用性有限的模型。BPTransformerYe等2019在机器翻译MT上进行了评估但没有探索预训练-微调设置。分块注意力Qiu等2019对其模型进行了预训练并在问答QA上进行了评估。然而评估有限因为它不包括语言建模并且QA数据集相对较短因此该模型在长文档任务上的有效性仍未得到探索。
长文档的任务特定模型 许多任务特定方法被开发出来以绕过BERT等预训练Transformer模型的512标记限制。最简单的方法是截断文档常用于分类Xie等2019。另一种方法是将文档分块为512长度的块可以重叠分别处理每个块然后使用任务特定模型组合激活Joshi等2019。第三种方法在多跳和开放域QA任务中流行使用两阶段模型第一阶段检索相关文档传递给第二阶段进行答案提取Clark和Gardner2017Chen等2017。所有这些方法都因截断或两阶段方法的级联错误而遭受信息丢失。相比之下Longformer可以处理长序列而无需截断或分块使我们能够采用更简单的方法将可用上下文连接起来并一次性处理。
一些同期工作探索了与Longformer类似的思路在Transformer中使用局部全局注意力并对其进行预训练以用于长文档自然语言任务。特别是ETCAinslie等2020使用类似的局部全局注意力代替完整自注意力以扩展Transformer到长文档。与Longformer不同ETC使用相对位置嵌入我们仅在自回归LM设置中使用引入了额外的训练目标CPC损失进行预训练并以略微不同的方式配置全局注意力。它在包括阅读理解和分类在内的多个任务上展示了强大的结果。GMATGupta和Berant2020使用了类似的思路输入中的少数全局位置作为全局内存。BigBirdZaheer等2020是ETC的扩展评估了包括摘要生成在内的额外任务。重要的是通过理论分析BigBird展示了稀疏Transformer是序列函数的通用逼近器并保留了完整自注意力的这些特性。
3 Longformer
原始的Transformer模型具有自注意力组件其时间和内存复杂度为 O ( n 2 ) O(n^{2}) O(n2)其中 n n n是输入序列长度。为了解决这一挑战我们根据“注意力模式”对完整的自注意力矩阵进行稀疏化该模式指定了相互关注的输入位置对。与完整的自注意力不同我们提出的注意力模式与输入序列呈线性关系使其在处理较长序列时更加高效。本节讨论该注意力模式的设计和实现。
3.1 注意力模式
滑动窗口 鉴于局部上下文的重要性Kovaleva等2019我们的注意力模式采用围绕每个标记的固定大小窗口注意力。使用多层这样的窗口注意力可以产生较大的感受野其中顶层可以访问所有输入位置并能够构建包含整个输入信息的表示类似于CNNWu等2019。给定固定窗口大小 w w w每个标记关注每侧 1 2 w \frac12w 21w个标记图2b。该模式的计算复杂度为 O ( n × w ) O(n\times w) O(n×w)与输入序列长度 n n n呈线性关系。在具有 ℓ \ell ℓ层的Transformer中顶层的感受野大小为 ℓ × w \ell\times w ℓ×w假设所有层的 w w w固定。根据应用的不同可能有助于为每层使用不同的 w w w值以在效率和模型表示能力之间取得平衡§4.1。
扩张滑动窗口 为了在不增加计算量的情况下进一步增加感受野滑动窗口可以“扩张”。这类似于扩张CNNvan den Oord等2016其中窗口具有大小为扩张 d d d的间隙图2c。假设所有层的 d d d和 w w w固定感受野为 ℓ × d × w \ell\times d\times w ℓ×d×w即使 d d d值较小也可以达到数万个标记。在多头注意力中每个注意力头计算不同的注意力分数。我们发现每个头具有不同扩张配置的设置可以提高性能允许一些没有扩张的头专注于局部上下文而其他具有扩张的头专注于较长的上下文。
全局注意力
在自然语言任务中最先进的BERT风格模型中最佳的输入表示与语言建模不同并且因任务而异。对于掩码语言建模MLM模型使用局部上下文来预测被掩码的词而对于分类任务模型将整个序列的表示聚合到一个特殊标记中在BERT的情况下是[CLS]。对于问答QA任务问题和文档被连接在一起使得模型可以通过自注意力机制将问题与文档进行比较。
在我们的模型中窗口化和扩张注意力不足以灵活地学习任务特定的表示。因此我们在少数预选的输入位置上添加了“全局注意力”。重要的是我们使这种注意力操作对称即具有全局注意力的标记会关注序列中的所有标记而序列中的所有标记也会关注它。图2d展示了一个滑动窗口注意力与自定义位置上的少数标记的全局注意力的示例。例如在分类任务中全局注意力用于[CLS]标记而在QA任务中全局注意力则用于所有问题标记。由于这些标记的数量相对于 n n n较小且独立因此结合局部和全局注意力的复杂度仍然是 O ( n ) O(n) O(n)。虽然指定全局注意力是任务特定的但这是向模型注意力中添加归纳偏差的一种简单方法并且比现有的任务特定方法使用复杂架构来组合较小输入块的信息要简单得多。
全局注意力的线性投影
回想一下给定线性投影 Q , K , V Q,K,V Q,K,VTransformer模型Vaswani等2017按如下方式计算注意力分数 Attention ( Q , K , V ) softmax ( Q K T d k ) V (1) \text{Attention}(Q,K,V)\text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V\tag{1} Attention(Q,K,V)softmax(dk QKT)V(1) 我们使用两组投影 Q s , K s , V s Q_s,K_s,V_s Qs,Ks,Vs来计算滑动窗口注意力的注意力分数 Q g , K g , V g Q_{g},K_{g},V_{g} Qg,Kg,Vg来计算全局注意力的注意力分数。额外的投影提供了灵活性来建模不同类型的注意力我们展示了这对于在下游任务上获得最佳性能至关重要。 Q g , K g , V g Q_g,K_g,V_g Qg,Kg,Vg都使用与 Q s , K s , V s Q_s,K_s,V_s Qs,Ks,Vs匹配的值进行初始化。
3.2 实现
在常规的Transformer中注意力分数如公式1所示进行计算。其中昂贵的操作是矩阵乘法 Q K T QK^T QKT因为 Q Q Q和 K K K都有 n n n序列长度个投影。对于Longformer扩张滑动窗口注意力仅计算 Q K T ~ QK^{\tilde{T}} QKT~的固定数量的对角线。如图1所示与完整自注意力的二次增长相比这导致内存使用量呈线性增长。然而实现它需要一种带状矩阵乘法形式而现有的深度学习库如PyTorch/Tensorflow并不支持这种操作。图1比较了三种不同实现方式的性能loop是一种内存高效的PyTorch实现支持扩张但速度极慢仅用于测试chunks仅支持非扩张情况用于预训练/微调设置cuda是我们使用TVMChen等2018实现的高度优化的自定义CUDA内核用于语言建模实验更多细节见附录A。
4 自回归语言建模
自回归或从左到右的语言建模大致定义为给定输入序列中已有的前序标记/字符估计当前标记/字符的概率分布。该任务被认为是自然语言处理中的基础任务之一最近关于使用Transformer建模长序列的研究主要依赖此任务作为其核心评估指标Dai等2019Rae等2020Sukhbaatar等2019。类似地我们在自回归语言建模上开发并评估了我们的模型。
4.1 注意力模式
对于自回归语言建模我们使用扩张滑动窗口注意力。借鉴Sukhbaatar等2019的研究我们在不同层中使用不同的窗口大小。具体来说我们在较低层使用较小的窗口大小随着层数的增加逐渐增大窗口大小。这使得顶层能够学习整个序列的高层次表示而较低层则捕捉局部信息。此外这种设计在效率较小的窗口大小由于非零值较少而计算成本更低和性能较大的窗口大小具有更强的表示能力通常会带来性能提升之间取得了平衡。
我们在较低层中不使用扩张滑动窗口以最大化其学习和利用即时局部上下文的能力。对于较高层我们仅在2个注意力头上使用少量逐渐增加的扩张。这使得模型能够直接关注远距离的标记而不会牺牲局部上下文。
4.2 实验设置
为了与之前的工作进行比较我们专注于字符级语言建模text8和enwik8Mahoney2009。
训练 理想情况下我们希望在现代GPU内存允许的范围内使用最大的窗口大小和序列长度来训练模型。然而我们发现模型需要大量的梯度更新来首先学习局部上下文然后才能学会利用更长的上下文。为此我们采用分阶段训练策略在多个训练阶段中逐步增加注意力窗口大小和序列长度。具体来说在第一阶段我们从较短的序列长度和窗口大小开始然后在每个后续阶段将窗口大小和序列长度加倍并将学习率减半。这使得训练速度更快同时将最耗时的部分最长的序列和窗口大小留到最后。
我们总共训练了5个阶段初始序列长度为2,048最后一个阶段的序列长度为23,040详见附录B中每个阶段的详细配置以及其他超参数。 评估
我们使用长度为32,256的序列进行评估。借鉴Dai等2019的方法我们将数据集分割为大小为32,256的重叠序列步长为512并报告序列中最后512个标记的性能。
4.2.1 结果
表2和表3总结了在text8和enwik8数据集上的评估结果。我们在text8和enwik8上分别使用小型模型取得了新的最先进结果BPC每字符比特数分别为1.10和1.00证明了我们模型的有效性。
对于大型模型鉴于这些实验的高成本并参考最近的研究Kitaev等2020Rae等2020我们仅在enwik8上进行了评估。表3显示Longformer在性能上优于可比的Transformer-XL模型与可比的Sparse TransformerChild等2019性能相当并与参数数量超过其两倍的近期模型性能相当或略低。
值得注意的是Adaptive SpanSukhbaatar等2019和Compressive TransformerRae等2020并不适合预训练-微调范式正如第2节所讨论的那样。 4.2.2 消融研究
为了展示我们注意力模式设计选择的重要性我们尝试了不同的变体并报告了它们的对照实验结果。为了使消融研究更易于管理我们在text8上使用小型模型的第一阶段配置对每种配置进行了150K步的训练然后在开发集上报告BPC每字符比特数性能。
表4的上半部分展示了每层窗口大小配置方式的影响。我们观察到从底层到顶层逐渐增加窗口大小会带来最佳性能反向配置会导致性能下降而使用固定窗口大小其他配置窗口大小的平均值则性能介于两者之间。表4的下半部分展示了添加扩张的影响。与完全不使用扩张相比在两个注意力头上添加一些扩张会带来一定的性能提升。
5 预训练与微调
当前许多NLP任务的最先进系统通过对预训练模型进行任务监督微调例如BERT来实现。我们的主要目标之一是开发适用于长文档任务的此类模型。为此我们在文档语料库上对Longformer进行了预训练并在六个任务上进行了微调包括分类、问答和共指消解。最终模型能够处理长达4,096个标记的序列比BERT长8倍。
我们使用掩码语言建模MLM对Longformer进行预训练目标是恢复序列中随机掩码的标记。由于MLM预训练成本高昂我们从RoBERTaLiu等2019发布的检查点继续预训练同时仅进行必要的修改以支持Longformer的注意力机制。需要注意的是我们的注意力模式可以插入任何预训练的Transformer模型中而无需更改模型架构。 注意力模式我们使用窗口大小为512的滑动窗口注意力因此计算量与RoBERTa相同。
位置嵌入RoBERTa使用学习的绝对位置嵌入最大位置为512。为了支持更长的文档我们添加了额外的位置嵌入以支持最多4,096个位置。为了利用RoBERTa的预训练权重我们没有随机初始化新的位置嵌入而是通过多次复制RoBERTa的512个位置嵌入来初始化它们。分析表明BERT的注意力头对局部上下文包括前一个或后一个标记有很强的学习偏好Clark等2019。使用复制初始化保留了这种局部结构除了分区边界外。尽管方法简单但我们发现这种方法非常有效见表5使得Longformer预训练能够在少量梯度更新后快速收敛。
继续MLM预训练我们使用fairseqOtt等2019在自建的长文档语料库上对Longformer进行预训练语料库详情见附录C。我们训练了两种模型规模基础模型和大模型。两种模型均以序列长度4,096、批量大小64218个标记、最大学习率3e-5、500步线性预热和3次多项式衰减进行65K次梯度更新训练。其余超参数与RoBERTa相同。
表5展示了我们训练语料库开发集上的BPC。第一行显示使用RoBERTa-base的BPC为1.846与RoBERTa论文中报告的1.880 BPC相当 表明我们的训练语料库与RoBERTa的训练语料库分布接近。接下来的两行显示了Longformer在预训练前的性能分别使用随机初始化的位置嵌入和复制的位置嵌入。显著差异表明复制初始化的重要性而RoBERTa BPC与初始化BPC之间的较小差异表明我们的滑动窗口注意力与RoBERTa权重配合良好。接下来的两行展示了继续预训练的影响。训练2K步后BPC从1.957提高到1.75365K步后进一步降至1.705表明模型正在学习更好地利用滑动窗口注意力和更长的上下文。RoBERTa-large和Longformer-large也观察到类似的模式。
冻结RoBERTa权重我们还尝试在冻结所有RoBERTa权重的情况下预训练Longformer仅训练新的位置嵌入。这种配置的动机是完美保留RoBERTa在短文档上的性能。此配置的BPC为1.850从初始化的1.957下降但高于所有权重可训练时的1.705。
6 任务
我们将Longformer应用于多个长文档任务包括问答QA、共指消解和分类。表6显示评估数据集的上下文显著长于512个wordpiece子词。我们的主要目标是评估我们的注意力机制是否可以作为BERT风格模型中标准自注意力机制的替代并在强基线模型上进行对照实验。我们还希望评估是否可以用更简单的模型替代BERT有限上下文所需的复杂任务特定模型这些简单模型只需将所有可用上下文连接成一个序列。
我们的基线模型是基于RoBERTa的模型它将上下文分解为尽可能长的片段分别通过RoBERTa处理然后连接激活以进行进一步处理。对于QA任务我们还将问题连接到每个片段以便RoBERTa可以根据问题对上下文的表示进行条件化。Longformer变体将RoBERTa的自注意力机制替换为我们在预训练期间使用的窗口注意力并添加任务驱动的全局注意力。全局注意力使用额外的线性投影§3.1。
6.1 问答
我们使用了三个数据集WikiHopWelbl等2018、TriviaQAJoshi等2017Wikipedia设置和HotpotQAYang等2018干扰项设置。
对于WikiHop和TriviaQA我们遵循BERT的简单QA模型Devlin等2019将问题和文档连接成一个长序列通过Longformer处理然后使用数据集特定的预测层。WikiHop使用分类层预测候选答案而TriviaQA使用Clark和Gardner2017的损失函数预测答案范围。我们为WikiHop的问题标记和候选答案以及TriviaQA的问题标记添加了全局注意力。
HotpotQA是一个多跳问答数据集涉及从10个维基百科段落中提取答案范围和证据句子其中2个段落是相关的其余是干扰项。我们使用两阶段模型首先选择最相关的段落然后将它们传递到第二阶段进行答案提取。两个阶段都将问题和上下文连接成一个序列通过Longformer处理然后使用任务特定的预测层。我们以多任务方式训练模型联合预测相关段落、证据句子、答案范围和问题类型是/否/范围。需要注意的是该模型比最近的最先进模型更简单后者通常包含复杂的任务特定架构例如Tu等2019Chen等2019Tu等2020Groeneveld等2020。有关模型和超参数的更多详细信息请参见附录D。
6.2 共指消解
我们使用了OntoNotesPradhan等人2012年数据集并采用了Joshi等人2019年提出的模型该模型是对Lee等人2018年系统的改进用BERT替换了ELMo。Longformer系统是对基线模型的直接适配通过用Longformer替换RoBERTa并扩展序列长度来实现。在此任务中我们没有使用全局注意力机制。
6.3 文档分类
我们在IMDBMaas等人2011年和Hyperpartisan新闻检测Kiesel等人2019年数据集上进行了评估。IMDB是一个标准的情感分类数据集包含电影评论。虽然该数据集中的大多数文档较短但约有13.6%的文档超过了512个词片段见表6。Hyperpartisan数据集中的文档相对较长且规模较小仅有645个文档这使得它成为测试Longformer在有限数据上适应能力的良好选择。我们在[CLS]标记上使用了全局注意力机制。
6.4 结果
主要结果 表7总结了所有微调实验的结果。我们观察到Longformer在大多数任务上 consistently 优于RoBERTa基线。在需要长上下文的任务上如WikiHop和Hyperpartisan其性能提升尤为明显。对于TriviaQA由于局部上下文通常足以回答问题因此改进较为有限。在HotpotQA的情况下支持事实的辅助监督使得模型能够轻松找到相关上下文然后专注于局部上下文导致性能提升较小。这与WikiHop形成对比后者仅包含中间推理链的远程监督我们的方法通过在整个上下文中进行推理而表现出色。在IMDB和OntoNotes数据集上性能提升较小。对于IMDB数据集中大多数文档较短因此预期改进较小。对于OntoNotes我们发现任何两个提及之间的距离通常较小因此基线模型能够在不考虑跨块交互的情况下将提及拼接成共指链。 Longformer-large 在问答任务中的表现 我们还评估了 Longformer-large 在长上下文问答任务中的表现。表 8 显示我们的 Longformer-large 在 WikiHop 和 TriviaQA 上以较大优势分别为 3.6 和 4 分取得了新的最先进成果而在 HotpotQA 上它的表现略低于当前的最先进模型Fang 等人2020 年相差 1 分。表 9 展示了 HotpotQA 的详细结果并与已发表和未发表的同期模型进行了比较。Longformer 在已发表的排行榜上排名第二优于除 HGNFang 等人2020 年之外的所有其他已发表结果。该任务中所有已发表的高性能模型Tu 等人2019 年Fang 等人2020 年Shao 等人2020 年都使用了 GNNKipf 和 Welling2017 年或实体图网络这些方法似乎为该任务编码了重要的归纳偏差并可能进一步改进我们的结果。尽管如此Longformer 表现强劲优于所有其他方法包括最近的非 GNN 方法Glaß 等人2019 年Shao 等人2020 年Groeneveld 等人2020 年。 6.5 WikiHop 的消融实验
表 10 展示了在开发集上对 WikiHop 进行的消融研究。所有结果均使用 Longformer-base 模型并在除特别说明外使用相同超参数的情况下微调了五个 epoch。Longformer 从以下方面受益更长的序列、全局注意力机制、用于全局注意力的独立投影矩阵、掩码语言模型MLM预训练以及更长的训练时间。此外当配置与 RoBERTa-base 相同时序列长度512n2 注意力机制Longformer 的表现略逊于 RoBERTa-base这证实了性能提升并非来自额外的预训练。当仅解冻额外的位置嵌入并使用 RoBERTa 模型进行预训练时性能略有下降这表明 Longformer 能够在特定任务的微调中学习利用长距离上下文尤其是在像 WikiHop 这样的大型训练数据集上。
7 Longformer-Encoder-Decoder (LED)
最初的 TransformerVaswani 等人2017 年由编码器-解码器架构组成专为序列到序列任务Sutskever 等人2014 年设计例如摘要生成和翻译。虽然仅编码器的 Transformer 在各种 NLP 任务中表现优异但预训练的编码器-解码器 Transformer 模型例如 BARTLewis 等人2020 年和 T5Raffel 等人2020 年在摘要生成等任务中取得了显著成果。然而这些模型无法高效扩展到输入较长的序列到序列任务中。
为了促进长序列建模以支持序列到序列学习我们提出了一种 Longformer 变体该变体同时包含编码器和解码器 Transformer 堆栈但在编码器中使用 Longformer 的高效局部全局注意力模式而非完整的自注意力机制。解码器则使用完整的自注意力机制关注所有编码后的 token 以及之前解码的位置。我们将此模型称为 Longformer-Encoder-Decoder (LED)其计算复杂度随输入长度线性增长。由于预训练 LED 成本较高我们从 BART 初始化 LED 参数并在层数和隐藏层大小方面完全遵循 BART 的架构。唯一的区别是为了处理更长的输入我们将位置嵌入扩展到 16K token从 BART 的 1K token 扩展而来并通过重复复制 BART 的 1K 位置嵌入 16 次来初始化新的位置嵌入矩阵如第 5 节中对 RoBERTa 的处理方式。遵循 BART 的设计我们发布了两种模型规模LED-base 和 LED-large它们的编码器和解码器堆栈分别有 6 层和 12 层。
我们在 arXiv 摘要生成数据集Cohan 等人2018 年上评估 LED该数据集专注于科学领域的长文档摘要生成。文档长度的第 90 百分位数为 14.5K token这使其成为评估 LED 的合适测试平台。LED 的编码器读取文档解码器生成输出摘要。编码器使用窗口大小为 1,024 token 的局部注意力机制并在第一个 s token 上使用全局注意力。解码器使用完整的自注意力机制关注整个编码器输出和之前解码的位置。与标准的序列到序列模型一样LED 在训练时使用教师强制策略teacher forcing基于黄金训练摘要进行训练并在推理时使用束搜索beam search。
表 11 展示了 LED-large 16K 在 arXiv 摘要生成任务中的结果。该模型仅从 BART 初始化未进行额外的预训练。 我们观察到LED 在 arXiv 数据集上取得了最先进的结果略微优于 BigBirdZaheer 等人2020 年。需要注意的是BigBird 摘要生成模型支持 4K token 的序列长度但其从 PegasusZhang 等人2020 年初始化并继续预训练而 Pegasus 是专门为摘要生成设计和预训练的模型。LED 在没有预训练或任务特定初始化的情况下仅凭借处理更长输入的能力就能略微超越 BigBird。通过预训练 LED可能会实现进一步的改进。图 3 进一步说明了序列长度的重要性表明处理更长输入的能力显著提高了结果。
8 结论与未来工作
我们提出了 Longformer这是一种基于 Transformer 的模型能够高效处理长文档并且无需对长输入进行分块或截短也无需复杂的架构来跨块整合信息从而轻松执行各种文档级 NLP 任务。Longformer 采用了一种结合局部和全局信息的注意力机制同时其计算复杂度随序列长度线性增长。Longformer 在字符级语言建模任务 text8 和 enwik8 上取得了最先进的结果。经过预训练后Longformer 在长文档任务上 consistently 优于 RoBERTa并在 WikiHop 和 TriviaQA 上创造了新的最先进成果。我们还提出了 LED这是 Longformer 的编码器-解码器变体用于建模序列到序列任务并在 arXiv 长文档摘要生成任务中取得了最先进的结果。
对于未来的工作我们希望研究其他预训练目标特别是针对 LED 的预训练目标进一步增加序列长度并探索可能受益于我们模型的其他任务。
A 实现细节
实现 Longformer 的膨胀滑动窗口注意力机制需要一种带状矩阵乘法矩阵乘法中输出除某些对角线外全为零而现有的深度学习库如 PyTorch/TensorFlow并未直接支持这种操作。图 1 比较了三种不同实现方式的运行时间和内存消耗。
Longformer-loop 是一种朴素实现通过循环分别计算每条对角线。它内存效率高因为它只计算非零值但速度极慢仅用于测试不用于实验。
Longformer-chunks 仅支持非膨胀情况。它将 Q 和 K 分块为大小为 w 且重叠大小为 1/2w 的块相乘后屏蔽对角线。由于使用 PyTorch 的单矩阵乘法操作计算效率高但内存消耗是优化实现的两倍因为它计算了一些零值。由于计算效率高此实现最适合预训练/微调场景。
Longformer-cuda 是我们使用 TVMChen 等人2018 年实现的自定义 CUDA 内核。它是我们注意力机制的完整实现内存效率最高速度与高度优化的完整自注意力机制相当。我们主要将其用于自回归语言建模实验因为其内存效率高支持最长序列并支持膨胀字符级语言建模实验所需。
Tensor Virtual Machine (TVM) 我们使用 TVM 构建自定义 CUDA 内核。TVM 是一个深度学习编译器堆栈将函数的高级描述编译为优化的设备特定代码。我们使用 TVM 在高级 Python 结构中描述带状矩阵乘法然后 TVM 生成相应的 CUDA 代码并编译为 GPU 代码。
B 字符级语言建模超参数
我们在 text8 和 enwik8 上评估两者均包含来自 Wikipedia 的 1 亿字符分为 9000 万、500 万、500 万用于训练、开发和测试。我们的模型仅指定自注意力组件的工作方式对其他 Transformer 模型设计选择不可知。我们的实现基于 Transformer-XLDai 等人2019 年代码禁用记忆机制。我们使用 Dai 等人2019 年的正弦权重相对位置嵌入。我们使用两种模型规模小型12 层512 隐藏大小和大型30 层512 隐藏大小。我们使用 apex 进行混合精度训练16 位和 32 位浮点数以减少内存消耗并加速训练但注意力计算保持在 fp32 以避免数值不稳定问题。我们使用梯度检查点Chen 等人2016 年减少内存使用并在 48GB RTX8000 GPU 上运行实验。所有超参数和阶段配置列于表 12。我们的 CUDA 内核支持自回归模式其中每个 token 仅关注前一个 token 的窗口。我们的实现还包括与膨胀滑动窗口注意力兼容的相对位置嵌入版本。
我们在 4 个 RTX8000 GPU 上运行小型模型实验 16 天在 8 个 RTX8000 GPU 上运行大型模型实验 13 天。我们的超参数搜索与表 4 中的消融实验类似在 text8 上运行配置 15 万步。我们尝试了绝对位置嵌入和学习位置嵌入、dropout 值 [0.1, 0.2]小型模型和 [0.1, 0.4]大型模型、预层归一化和后层归一化Xiong 等人2020 年、阶段 1 学习率 [2.5e-5, 5e-4, 1e-4] 的常数和余弦学习率计划以及不同的膨胀配置所有头、2 个头、无膨胀。表 12 中报告的梯度更新次数/阶段通过运行每个阶段直到验证 BPC 不再改善确定。
C 预训练数据
为了让模型在预训练中学习长依赖关系我们编译了一个长文档语料库。部分数据源也包含在原始 RoBERTa 预训练中包括图书语料库Zhu 等人2015 年和英文维基百科。我们还加入了 Realnews 数据集Zellers 等人2019 年中超过 1200 个 token 的文档的三分之一以及 Stories 语料库Trinh 和 Le2018 年的三分之一。我们的目标是包含长短文档的混合使模型既能学习长依赖关系又不会忘记原始 RoBERTa 预训练中的信息。预训练数据的统计信息见表 13。
D 任务特定模型细节
所有问答和分类模型均使用 PyTorch-Lightning 实现。我们使用所有数据集的官方训练/开发/测试分割除了 Hyperpartisan 新闻数据集我们随机分为 80/10/10 用于训练/开发/测试。
WikiHop WikiHop 中的实例包括问题、答案候选2 到 79 个、支持上下文3 到 63 段和正确答案。数据集未提供多跳推理链的中间注释要求模型从间接答案监督中推断。
为了将数据准备为 Longformer 和 RoBERTa 的输入我们首先使用 RoBERTa 的 wordpiece 分词器对问题、答案候选和支持上下文进行分词。然后我们将问题和答案候选与特殊 token 连接为 [q] 问题 [/q] [ent] 候选 1 [/ent] … [ent] 候选 N [/ent]。上下文也使用 RoBERTa 的文档分隔符 token 连接为 上下文 1 … 上下文 M 。特殊 token [q]、[/q]、[ent]、[/ent] 被添加到 RoBERTa 词汇表中并在任务微调前随机初始化。
在准备好输入数据后我们按如下方式计算每个模型顶层的激活值。 我们将问题和答案候选拼接起来并尽可能多地拼接上下文内容直到达到模型的序列长度限制RoBERTa 为 512Longformer 为 4096。然后将序列输入模型收集输出激活值并重复此过程直到所有上下文内容都被处理完毕对于 Longformer-large 模型由于内存限制我们仅包含前 4096 长度的序列。接着将所有块的激活值拼接成一个长序列。对于 Longformer我们对整个问题和答案候选序列使用全局注意力机制。
在预测阶段我们为每个 [ent] 附加一个线性层输出单个 logit。然后对每个候选在所有块中的 logit 取平均值应用 softmax 函数并使用交叉熵损失函数与正确答案候选进行比较。
训练使用 Adam 优化器并在前 200 次梯度更新中进行线性热身以达到最大学习率LR然后在剩余的训练过程中进行线性衰减。我们使用梯度累积来实现有效批量大小为 32 个实例每 250 次梯度更新检查一次开发集准确率并报告最高的开发集准确率。其他超参数如 dropout、权重衰减与 RoBERTa 预训练保持一致。
总的来说我们进行了最少的超参数试验但为了公平比较 Longformer 和 RoBERTa我们对 Longformer-base 和 RoBERTa-base 进行了相同的超参数搜索。这包括对学习率LR在 [2e-5, 3e-5, 5e-5] 范围内和训练轮数epochs在 [5, 10, 15] 范围内进行网格搜索。最佳的 Longformer-base 配置使用了 lr3e-5 和 15 个 epochs。我们对 Longformer-large 进行了两次超参数试验学习率为 3e-5训练轮数分别为 5 和 155 个 epochs 的模型在开发集上达到了 77.6 的更高准确率并被提交到公共排行榜进行测试集评估。所有模型均在单个 RTX8000 GPU 上训练Longformer-base 训练 5 个 epochs 大约需要一天时间。
TriviaQA TriviaQA 数据集包含超过 10 万个问题、答案和文档三元组用于训练。文档是维基百科文章答案是文章中提到的命名实体。问题的答案范围未标注但通过简单的文本匹配找到。
与 WikiHop 类似我们使用 RoBERTa 的分词器对问题和文档进行分词然后将输入格式化为 [s] 问题 [/s] 文档 [/s]。
我们将文档截断为 4096 个 wordpiece以避免处理速度过慢。之后我们以类似于 WikiHop 的方式获取 RoBERTa 和 Longformer 的激活值如上所述。我们对所有问题 token 使用全局注意力机制。
在预测阶段我们添加一个层来预测答案范围的开始和结束位置。由于训练数据是远程监督的没有标注的答案范围我们使用 Clark 和 Gardner2017 年的损失函数该函数类似于 OR 操作模型只需正确预测一个答案范围而不是所有范围。
最佳配置的超参数列于表 14。其他超参数与 RoBERTa 的类似。在超参数搜索中我们仅为 RoBERTa 基线调整了学习率LR尝试了 [3e-5, 5e-5, 1e-4]然后使用最佳值 3e-5 进行所有后续实验未进一步调整。我们使用最佳配置训练了 Longformer-large 一次并将其输出提交到排行榜。我们在 32GB V100 GPU 上运行实验。小型模型在 4 个 GPU 上训练需要 1 天而大型模型在 8 个 GPU 上训练需要 1 天。
HotpotQA HotpotQA 数据集涉及从 10 篇维基百科文章的 10 个段落中回答问题其中 2 个段落与问题相关其余为干扰项。它包括答案范围提取和证据句子识别两个任务。我们的 HotpotQA 模型将答案范围提取和证据提取结合在一个联合模型中。我们发现使用类似设置的两阶段 Longformer 模型性能更高该模型首先识别相关段落然后找到最终答案范围和证据。这主要是因为先去除干扰段落可以减少最终证据和范围检测的噪声正如该数据集的最新方法Fang 等人2020 年所发现的那样。
与 WikiHop 和 TriviaQA 类似为了将数据准备为 Longformer 的输入我们将问题和所有 10 个段落连接成一个长上下文。我们特别使用以下带有特殊 token 的输入格式[CLS] [q] 问题 [/q] hti 标题1 h/ti 句子1,1 [s] 句子1,2 [s] ... hti 标题2 h/ti 句子2,1 [s] 句子2,2 [s] ...其中 [q]、[/q]、hti、h/ti、[s]、[p] 是分别表示问题开始和结束、段落标题开始和结束以及句子的特殊 token。这些特殊 token 被添加到 Longformer 词汇表中并在任务微调前随机初始化。对于 Longformer我们对问题 token、段落标题开始 token 以及句子 token 使用全局注意力机制。模型在段落标题开始 token 上添加额外的前馈层以预测相关段落并在句子 token 上添加前馈层以预测证据句子。
在训练第一阶段模型后我们为训练集和开发集预测相关段落分数。然后保留原始分数高于预设阈值-3.0的最多 5 个段落并从上下文中删除其他段落。接着我们在缩短后的上下文上训练第二阶段模型。对于答案范围提取我们使用 BERT 的 QA 模型Devlin 等人2019 年并在第一个特殊 token[CLS]上添加问题类型是/否/范围分类头。对于证据提取我们在句子和段落 token 的表示上应用两层前馈网络以获取相应的证据预测分数并使用二元交叉熵损失训练模型。
在证据提取的推理阶段我们使用类似于 Groeneveld 等人2020 年的约束解码策略确保证据句子来自恰好两个段落这是该数据集的设置。我们将范围、问题分类、句子和段落损失结合起来以多任务方式训练模型使用损失的线性组合。我们的实验在 RTX8000 GPU 上进行每个 epoch 的训练在 4 个 GPU 上大约需要半天时间。我们使用 Adam 优化器进行训练采用线性热身1000 步和线性衰减。我们使用 3e-5 和 5e-5 的学习率以及 3 到 7 个 epoch 进行最少的超参数调整发现学习率为 3e-5 和 5 个 epoch 的模型效果最佳。我们对 RoBERTa 基线也进行了相同的超参数搜索。其余超参数见表 14。
共指消解模型细节 共指消解模型是对 Joshi 等人2019 年基于 BERT 的粗到细模型的直接适配。在使用 RoBERTa 的 wordpiece 分词器对每个文档进行预处理后它将每个文档分割为不重叠的段每段长度不超过最大序列长度然后连接激活值用于粗到细聚类阶段以形成共指簇。
RoBERTa-base 的最大序列长度为 384这是在 [256, 384, 512] 范围内经过三次试验后选择的使用了原始实现中的默认超参数。对于 Longformer-base序列长度为 4096。与原始实现类似预训练的 RoBERTa 参数和随机初始化的任务参数使用不同的学习率。任务参数使用较大的学习率允许优化器从随机初始化的值进一步调整而不会破坏预训练 RoBERTa 参数中的信息。
超参数搜索的范围非常有限主要包括对 RoBERTa 学习率LR在 [1e-5, 2e-5, 3e-5] 范围内和任务学习率在 [1e-4, 2e-4, 3e-4] 范围内进行网格搜索以确保 RoBERTa 和 Longformer 之间的公平比较。Longformer-base 的最佳配置是 RoBERTa 学习率为 1e-5任务学习率为 1e-4。所有其他超参数与原始实现中的相同。训练在单个 GPU 上大约需要 10 小时。
我们的实现是一种超级 hack涉及 PyTorch 和 TensorFlow 共享单个进程和 GPU。为了避免在 PyTorch 中重新实现 TensorFlow 中复杂的粗到细逻辑该逻辑涉及 Lee 等人2018 年最初发布的高度优化的自定义 GPU 内核我们设计了一个系统其中模型的较低 Transformer 部分在 PyTorch 和 TensorFlow 之间传递激活值和梯度。输入张量首先通过 PyTorch 中的 Transformer 运行从顶层收集激活值从 GPU 传输到 CPU然后从 CPU 传输到 TensorFlow 并返回到 GPU 以运行粗到细聚类并计算损失。然后在 TensorFlow 中反向传播梯度到 Transformer 的顶部并反转该过程以将梯度传输到 PyTorch以便通过模型的其余部分进行反向传播。为参数更新维护了具有相同学习率计划的单独优化器。与运行模型的总体成本相比这种方法中的开销是最小的。
文本分类 对于分类任务我们遵循 BERT 的方法在第一个 [CLS] token 上使用简单的二元交叉熵损失并为 [CLS] 添加全局注意力机制。我们使用 Adam 优化器批量大小为 32并采用线性热身和衰减热身步数为总训练步数的 0.1。对于 IMDB 和 Hyperpartisan 新闻数据集我们对学习率 [3e-5, 5e-5] 和训练轮数 [10, 15, 20] 进行了网格搜索发现学习率为 3e-5 和 15 个 epochs 的模型效果最佳。实验在单个 RTX8000 GPU 上进行。