Longformer:超越RoBERTa,为长文档而生的预训练模型

星标/置顶小屋,带你解锁

最萌最前沿的NLP、搜索与推荐技术

文 | ChrisCao, 小轶


前言

今天要与大家分享的是AllenAI今年发表的最新工作,Longformer——一种可高效处理长文本的升级版Transformer。作者团队提供了开源代码,大家可快速复现,直接用于自己的任务。

传统Tranformer-based模型在处理长文本时有着天然的劣势。因为传统模型采用的是“全连接”型的attention机制,即每一个token都要与其他所有token进行交互。其attention复杂度高达。此前的解决办法是将长文切分为若干个较短的text span,然后逐个处理。这就导致不同的text span之间无法进行交互,因而必然存在大量information loss。当然,我们也可以通过添加一些其他机制来加强这种text span之间的交互。但这种新增机制实现起来通常比较复杂,而且往往是task-specific的,通用性不强。

本文提出的Longformer,改进了Transformer的传统attention机制:对于每一个token,只对固定窗口大小的附近token计算local attention,并结合具体任务,计算少量的global attention。该方法的优点包括:

  • 复杂度低,将attention机制的复杂度降至

  • 通用性强,可用于各类文档级任务

  • 部署容易,作者在cuda内核上直接实现了Longformer的attention pattern,并提供了开源代码。

Longformer在两个字符级语言建模任务上都取得了SOTA的效果。并且,作者用Longformer的attention方法继续预训练RoBERTa。训练得到的语言模型在多个长文档任务上进行fine-tune后,性能全面超越Roberta。该预训练模型也已开源,大家可以很方便地直接应用于自己的任务。

原文链接:
https://arxiv.org/pdf/2004.05150.pdf

Github:
https://github.com/allenai/longformer

Arxiv访问慢的小伙伴也可以在订阅号 「夕小瑶的卖萌屋」 后台回复关键词 【0716】下载论文PDF~

模型

作者共提出了三种新的attention pattern,来降低传统self-attention的复杂度,分别是滑窗机制膨胀滑窗机制融合全局信息的滑窗机制。下图展示了传统attention与这三种attention pattern的示意图。接下来将为大家分别讲解。

1. 滑窗机制(Sliding window): 对于每一个token,只对其附近的w个token计算attention计算复杂度与文本序列长度成线性关系,为。作者认为,根据应用任务的不同可以对Transformer每一层施以不同的窗口大小,对模型表示能力可能有潜在帮助。

读到这里的,大家可能和我一样,误认为这个窗口应该比较小,估计在16~64这个量级。但看到实验部分会发现,作者在具体实现的时候,设置的窗口大小为512,和Bert的Input限制完全一样。所以,大家不要存有“Longformer比Bert还要更轻量”的错觉。

2. 膨胀滑窗机制(Dilated sliding window): 在对每一个进行token编码时,普通滑窗机制只能考虑到长度为的上下文。作者进一步提出膨胀滑窗机制,在不增加计算负荷的前提下,拓宽模型“视场”。其做法借鉴了空洞卷积的思想[1]。如下图所示,在滑动窗口中,被attend到的两个相邻token之间会存在大小为d的间隙。当transformer的层数为l时,则视场范围可达到。实验表明,由于考虑了更加全面的上下文信息,膨胀滑窗机制比普通的滑窗机制表现更佳。

3. 融合全局信息的滑窗机制(Global+sliding window): 我们知道Bert一类的语言模型在应用于具体任务时,实现方式略有不同。比如,对于文本分类任务,我们会在文本序列前添加[CLS]这一特殊token;而对于QA类任务,则会将问题与文本进行拼接后输入。在Longformer中,作者也希望能够根据具体任务的不同,在local attention的基础上添加少量的global attention。比如,在分类任务上就会在[CLS]处添加一个global attention,而在QA任务上会对question中的所有token添加global attention。如下图所示,对于添加了global attention的token,我们对其编码时要对整个序列做attention。并且,编码其他所有token时,也都要attend到它。

实验

自定义CUDA内核

由于现有的深度学习库中并没有能直接实现膨胀滑窗机制的接口,为此作者直接自定义了CUDA内核操作,用于实现Longformer的attention pattern[2]。如下图所示,Longformer的内存消耗与文本长度成线性关系(红线)。用自定义CUDA来实现Longformer,相比于用Naive Pytorch来实现(蓝线),运行速度加快了六倍。

Longformer在字符级别任务上的表现

作者在text8和enwik8两个字符级任务上对Longformer进行实验。实验中,模型每一层采用了不同的窗口大小:底层使用较小的滑窗,以建模局部信息;在高层使用较大的滑窗,以扩大感受野。训练时,理想状况下当然是希望使用GPU所能承受的最大的window size和sequence len。但为了加快训练速度,作者采用的是一种阶段式的训练方式:在学习更长的上下文之前,先学好局部的上下文。在第一阶段,先设置较短的序列长度和窗口大小。在后续阶段,window size和sequence length增加一倍,学习率减半 实验结果如下图所示,Longformer在这两个数据集上皆达到了SOTA效果(注:测试指标为BPC,bits-per-character;BPC越小,性能越优)。

作者通过实验,对滑窗机制的设置进行了进一步的讨论。如下表所示:

  • 表中第一组实验(前三行)讨论的是:如果transformer的不同层采用不同窗口大小,是否可以提高性能?实验结果表明,由底层至高层递增窗口大小,可提升性能;递减则反而性能降低。

  • 第二组实验(后两行)是对膨胀滑窗机制的消融实验,证明了增加间隙后的滑窗机制,性能可以有小幅度提升

Longformer用于预训练

MLM Pretraining

作者采用Longformer的方法在以下四个文档级语料上进行预训练,从而得到适于文档级NLP任务的语言模型。作者并没有完全从头预训练一个随机初始化的模型,而是以RoBERTa为基础,采用MLM(masked language modeling)的方法继续预训练。预训练时,每一层都采用固定的大小为512的滑动窗口,暂不添加global attention。为支持长文本,论文作者把position embedding扩展到了4096个。

预训练结束后,在多个文档级任务上再进一步对预训练模型做fine-tuning。fine-tuning时会根据任务增加global attention:共设置两套映射矩阵,一套用于局部自注意力,另一套用于全局注意力。实验表明,Longformer全面超越了RoBERTa的表现。

消融实验

为了证明Longformer更优异的性能并不是因为对RoBERTa额外的预训练带来的,作者做了一组消融实验。采用了与RoBERTa完全相同的序列长度和attention机制,在继续预训练后并没有在文档级任务上取得更优的性能。


卖萌屋成立了自然语言处理、搜索技术、推荐系统、算法岗求职等方向大群和知识图谱与信息抽取、智能问答、对话系统等垂类讨论群。不仅可以认识众多志同道合的优秀小伙伴,而且还有若干卖萌屋美丽小姐姐(划掉)、顶会审稿人、大厂研究院、知乎大V等你来撩哦。后台回复关键词【入群】即可获取入口。

记得扫描下方二维码关注并星标置顶,我才能来到你面前哦。

参考文献

[1] Dilated CNN:CV中常用的图像编码方式,可拓宽模型编码时的感受野。paper原文链接:https://arxiv.org/abs/1511.07122。另可参考知乎讨论“如何理解空洞卷积(dilated convolution)?”,链接:https://www.zhihu.com/question/54149221。

[2] TVM: 关于如何自定义CUDA内核:这里作者使用了TVM (tensor virtual machine)(tvm.apache.org),2018年由华盛顿大学的SAMPL组贡献的开源项目。TVM为不同的深度学习框架和硬件平台实现了统一的编译栈,从而实现将不同框架的深度学习模型到硬件平台的快速部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480232.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工程实践:基于规则句法的事件关系与主谓宾三元组抽取项目实现

目前,知识图谱在学术界如火如荼地进行,但受限于知识图谱各个环节中的性能问题,还尚未能够在工业界大规模运用。而与知识图谱中以实体为知识节点,实体关系为实体关系边对知识进行组织不同,以事件作为节点,事…

论文浅尝 | LightRNN:存储和计算高效的 RNN

链接:https://arxiv.org/pdf/1610.09893.pdf动机在NLP任务中使用RNN已经被证明是很有用的模型方法。但是传统的RNN在NLP中的应用有一个很大的限制:RNN的输出输入Embedding占用的空间太大,比如1024维10M词表大小的Embedding矩阵就要占掉40GB&a…

阿里最全Java面试100题汇总:涵盖天猫、蚂蚁金服等面试题!含答案~

【阿里天猫、蚂蚁、钉钉面试题目】 1、微信红包怎么实现。 2、海量数据分析。 3、测试职位问的线程安全和非线程安全。 4、HTTP2.0、thrift。 5、面试电话沟通可能先让自我介绍。 6、分布式事务一致性。 7、nio的底层实现。 8、jvm基础是必问的,jvm GC原理&a…

ACL2020 奇葩论文标题大赏

星标/置顶小屋,带你解锁最萌最前沿的NLP、搜索与推荐技术文 | 灵魂写手rumor酱编 | 不拖更的夕小瑶又是一年一度的ACL,之前通过卖萌屋Arxiv服务已经零零碎碎看了一些,还是准备刷一下论文list,看看哪篇能让我的模型效果一飞冲天。…

字符串匹配算法(BF RK)

文章目录1. BF(Brute Force)暴力匹配BF代码2. RK(Rabin-Karp)算法RK代码3. 思考题:(二维匹配)1. BF(Brute Force)暴力匹配 BF算法的思想,在主串中&#xff0…

用Python寻找最优投资组合

原文地址:https://www.jianshu.com/p/2a25dfd465e9 现代投资组合理论(Modern Portfolio Theory,MPT)告诉我们投资者应该分散投资来实现最小化风险最大化投资回报。大邓刚开始学习这方面知识,用了将近一天的时候才搞懂M…

技术动态 | 事理图谱,下一代知识图谱

本文转载自公众号:DataHorizon。 人工智能与认知智能当前人工智能时代下,机器与人类之间的博弈一直在进行着。如图1所示,从1926年达特茅斯会议的召开标志人工智能诞生到深度学习模型在…

头条Java后台3面(含答案):事务+List集合+慢查询SQL+Redis+秒杀设计

头条Java一面 1.讲讲jvm运行时数据库区 2.讲讲你知道的垃圾回收算法 3.jvm内存模型jmm 4.内存泄漏与内存溢出的区别 5. select、epoll 的区别?底层的数据结构是什么? 6.mysql数据库默认存储引擎,有什么优点 7.优化数据库的方法&#xf…

CNN卷积神经网络(吴恩达《卷积神经网络》笔记一)

CNN 卷积网络说明卷积 Convolution填充 Padding步长 StrideRGB图像卷积池化 Pooling完整CNN为什么人们喜欢用卷积神经网络?实例分析说明 关于CNN的基础知识:卷积、填充、步长、池化、完整的深度CNN网络可以参考 链接: AI学习笔记——卷积神经网络&#…

字符串匹配算法(BM)

文章目录1. BM(Boyer-Moore)算法1.1 坏字符规则1.2 好后缀规则1.3 两种规则如何选择2. BM算法代码实现2.1 坏字符2.2 好后缀2.3 完整代码2.4 调试3. 总结1. BM(Boyer-Moore)算法 思想:有模式串中不存在的字符&#xf…

SQL 数据分析常用语句

1 基础查询 • 2 字符串数字日期时间 • 3 聚合数据查询 • 4 子查询 • 5 联接组合查询 • 6 高级查询 • 7 更新数据 阅读提醒:点击图片放大可看清晰的 1 基础查询 2 字符串数字日期时间 3 聚合数据查询 4 子查询 5 联接组合查询 6 高级查询 7 更新数据 参考资料 …

开源词法分析工具LAC重大升级!打造属于自己的个性化分词器!

星标/置顶小屋,带你解锁最萌最前沿的NLP、搜索与推荐技术文 | 匿名大佬编 | 北大小才女小轶本文将为大家介绍如何使用百度开源的词法分析工具LAC实现个性化分词(附代码),并展示LAC在各数据集上惊艳的性能表现。背景介绍分词是中文…

老刘说NLP:这几年的NLP历程回顾,以及关于NLP(知识图谱等)落地的思考

得语言者,得天下。得语言资源者,分天下。得语言逻辑者,争天下。 前言 只有把自己所思考的,所认识的东西,以文字的方式记录下来,才是对自己成长最好的记录方式。 是的,距离上一次动手写博客或者…

Redis系列教程(一):Redis缓存的设计、性能、应用与数据集群同步

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上…

论文浅尝 | 提取计数量词丰富知识库

OpenKG 祝各位读者新年快乐!论文标题:Enriching Knowledge Bases with Counting Quantifiers论文链接:https://link.springer.com/content/pdf/10.1007%2F978-3-030-00671-6_11.pdf发表会议:ISWC 2018论文源码:https:/…

RNN循环神经网络(吴恩达《序列模型》笔记一)

1、为什么选择序列模型 2、数学符号 用1来代表人名,0来代表非人名,句子x便可以用y[1 1 0 1 1 0 0 0 0]来表示 3、循环网络模型 值得一提的是,共享特征还有助于减少神经网络中的参数数量,一定程度上减小了模型的计算复杂度。 …

字符串匹配算法(KMP)

文章目录1. KMP由来2. KMP算法基本原理3. 代码4. Leetcode 28. 实现 strStr()1. KMP由来 上一节说的BM算法是最高效、最常用的字符串匹配算法。最知名的却是KMP,它3位作者(D.E.Knuth,J.H.Morris,V.R.Pratt)&#xff0…

常用的SQL语句

常用的SQL语句 一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server 1 --- 创建 备份数据的 device 2 3   USE master 4 5   EXEC sp_addumpdevice disk, te…

论文浅尝 | 用对抗学习做知识表示(NAACL2018)

论文链接:https://arxiv.org/pdf/1711.04071.pdf代码链接:https:// github.com/cai-lw/KBGAN 本文针对在生成负样本时有大部分负样本可以很好地和正样本区分开,对训练的影响不大,提出了使用生成对抗网络(GANs&#xff…

为什么搜索与推荐场景用AUC评价模型好坏?

星标/置顶小屋,带你解锁最萌最前沿的NLP、搜索与推荐技术文 | 吴海波在互联网的排序业务中,比如搜索、推荐、广告等,AUC(Area under the Curve of ROC)是一个非常常见的评估指标。网上关于AUC的资料很多,知…