Unlimiformer:一个Transformers输入无限长文本思路和中文长文本摘要上的性能实验

news2024/11/28 20:56:15

Unlimiformer:一个Transformers输入无限长文本思路和中文长文本摘要上的性能实验

1、前言

在处理长文本输入时,以往方法常采用截断(如:max_len=512)、分块(将输入分成多个块,并进行逐块处理)、长文本输入的模型(如:Longformer、BigBird和Reformer等)。由于编码器上下文窗口的固定大小,Transformer 在其最大输入长度上受到限制。本文将介绍一种能输入无限长文本的思路。名为Unlimiformer,可以扩展预训练的编码器-解码器Transformer模型的输入长度,使其能够处理无限长度的输入。传统的Transformer模型因为需要对输入中的每个标记进行注意力计算,因此输入长度通常会被限制在一定的范围内。Unlimiformer通过将注意力计算分散到一个k最近邻索引中,可以处理极长的输入序列。该方法可以应用于各种长文档和多文档摘要任务中,并且可以通过注入Unlimiformer来提高已有的预训练模型的性能,而不需要额外的训练。

文章来源:https://arxiv.org/abs/2305.01625

代码链接:https://github.com/abertsch72/unlimiformer

2、Unlimiformer

2.1、Encoding

为了对超长输入序列进行编码,Unlimiformer采用了重叠块编码的方法,并使用类似Faiss的库将编码后的输入存储在数据存储器中。

2.2、Retrieval-augmented cross-attention

Retrieval-augmented cross-attention它在标准的cross-attention上进行了改进,使得decoder不仅仅只关注encoder输入序列的前k个token,而是检索了整个输入序列中的top-k个hidden states,然后针对这些top-k的hidden states进行attention计算。这种方法不仅可以检索整个输入序列,而且计算量和GPU内存的使用也比全局attention更加高效,同时保留了99%以上的attention质量。Retrieval-augmented cross-attention的具体实现过程中,引入了一个datastore来存储编码后的输入序列,使用kNN搜索来检索hidden states,同时通过Attention reformulation的方法来优化注意力计算过程,使得可以使用单个datastore来支持所有attention heads和decoder layers的检索,从而大大降低了时间和空间复杂度。图 2 显示了对任何序列到序列转换器架构的通用更改。完整的输入使用块中的编码器进行编码并存储在数据存储中;然后,在每个解码步骤中查询编码隐藏状态的数据存储。kNN 搜索步骤是非参数的,可以注入任何预训练的 seq2seq 转换器。搜索步骤将注意力重新制定为空间效率。在下面例子中,编码器的最大输入长度为 2 个标记。6 令牌输入以块编码并存储在数据存储中。在交叉注意之前,将 Unlimiformer 注入每个解码器层。在 Unlimiformer 中,执行 kNN 搜索以从数据存储为每个注意力头选择 2 个标记上下文;然后,使用整个输入序列的键和值计算交叉注意。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nxejMTQ1-1684218645822)(F:\weixin\imgs\image-20230516133046069.png)]

2.3、Attention reformulation

简单的说,Attention reformulation是一种针对transformer模型encoder-decoder结构中的attention机制进行改进的方法。具体而言,传统的transformer模型中,encoder和decoder各自有一个固定的context window,但是在不同的解码阶段,不同的信息可能是相关的,不同的attention头也可能关注不同类型的信息。因此,一个固定的context window可能会浪费精力在某些attention头并没有强烈关注的token上。Attention reformulation允许每个attention头在每个解码步骤中从完整的输入序列中选择一个独立的context window。这通过在decoder之前注入一个Unlimiformer查找来实现:在交叉注意力之前,模型在外部数据存储中执行一个k最近邻搜索,以选择每个解码器层每个attention头要关注的一组token。

3、局限性

  1. 需要一个外部的数据存储器来存储输入序列的编码表示,这会增加存储和计算成本。
  2. 需要进行KNN搜索来选择每个注意力头的上下文窗口,这也会带来一定的计算复杂度。
  3. 在处理非常长的输入序列时效果很好,但在处理较短的输入序列时可能会带来一些额外的计算开销。

4、生成式长文本摘要的插拔实践

from transformers import (
    AutoConfig,
    AutoModelForSeq2SeqLM,
    AutoTokenizer,
    EarlyStoppingCallback,
    set_seed, WEIGHTS_NAME,
)

...
# 常规定义模型
model = AutoModelForSeq2SeqLM.from_pretrained(
    model_args.model_name_or_path,
    from_tf=bool(".ckpt" in model_args.model_name_or_path),
    config=config,
    cache_dir=model_args.cache_dir,
    revision=model_args.model_revision,
    use_auth_token=training_args.use_auth_token,
)


# 转换成Unlimiformer以兼容无限长度文本输入
from unlimiformer import Unlimiformer
from random_training_unlimiformer import RandomTrainingUnlimiformer
...
model = RandomTrainingUnlimiformer.convert_model(model, **unlimiformer_kwargs)

5、中文生成式长文本摘要上的实践表现

原文仅在英文的摘要数据集上进行实验,本文在NLPCC中文长文本摘要数据集上进行了实验小试对比:

模型性能(ROUGE-L)
BART49.074
UnlimiformerBart52.45

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

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

相关文章

【EasyPoi实战系列】Spring Boot使用EasyPoi实现多Sheet导出 - 第470篇

悟纤:师傅,那个讨人厌的产品又来捣乱了~ 😒 师傅:哈哈,你又来抱怨老板设定的无休止需求了啊? 😆 悟纤:没错,这次竟然要求导出多个Sheet,这还能不能好好地活着…

十九、Sleuth整合Zipkin链路跟踪

目录 链路跟踪概述 SpringCloud Sleuth 1、架构图 2、主要概念 2.1、跟踪:Trace (一条完整链路--包含很多span(微服务接口)) 2.2、跨度:Span 2.3、标注:Annotation Sleuth整合Zipkin实现分布式链路跟踪 1、搭建zipkin环境 1.1、下载…

2023年5月中国数据库排行榜:OTO组合回归育新机,华为高斯蓄势待发展雄心

路漫漫其修远兮,吾将上下而求索。 2023年5月的 墨天轮中国数据库流行度排行 火热出炉,本月共有262个数据库参与排名。本月排行榜前十变动较大,可以用一句话概括为:openGauss 立足创新夺探花;华为云GaussDB 云上之争成赢…

单片机设计_室内环境智能监测系统(STM32 OLED ESP8266 DHT11 MQ-2 加湿器)

想要更多项目私wo!!! 一、电路设计 室内环境智能监测系统 主要功能: 1.检测空气温湿度 2.检测光照强度 3.检测烟雾浓度 4.数据显示在手机端和设备OLED屏幕上 5.当空气温度高于设定的阈值时,风扇开启 6.当空气湿度…

【Linux从入门到精通】上下文概念详解

上篇文章(进程的基本概念)我们讲解了进程后,还留下了一个上下文数据概念还没有解释。本篇文章会对上下文概念进行详解。在理解上下文概念时,同时会引出很多新的概念。我们都会对此进行详细解释,希望本篇文章会对你有所…

7款产品经理必备的交互软件

作为UI/UX设计师,我相信你或多或少接触过很多交互设计软件。 为您整理总结了几款流行的交互软件。如果您在上述交互设计软件中确实存在选择困难,希望通过阅读本文帮助您快速做出正确的选择。 即时设计 即时设计是一款「专业UI设计工具」,不…

redis从零开始(1)----基本类型:string/hash/list

认识redis NoSQL Nosql not only sql,泛指非关系型数据库,与之相对的是RDBMS(Relational Database Management System),即关系型数据库 关系型数据库:列行,同一个表下数据的结构是一样的。 非关系型数据库&#xff…

企业有必要对三方应用进行安全管控吗?

什么是三方应用? 三方应用是指由第三方开发者创建的软件应用程序,与操作系统或其他主要平台的开发公司无关。这些应用程序通常被设计为在特定平台上运行,并且具有特定的功能或服务,例如社交媒体应用程序、游戏和生产力工具等。 简…

IntersectionObserver“替代”滚动条监听

概要 IntersectionObserver 接口提供了一种异步观察目标元素与其祖先元素或顶级文档视口(viewport)交叉状态的方法。其祖先元素或视口被称为根(root)。 当一个 IntersectionObserver 对象被创建时,其被配置为监听根中…

Blender渲染分辨率如何优化设置?这些渲染技巧你要知道!

尽管 Blender不断改进其功能,随着硬件的不断进步而变得越来越复杂,该软件最好的是允许很多人免费试用它。但即使所有人都可以访问,这并不意味着Blender可以克服低端GPU的局限性。 并非所有PC都是平等的,也不是每个3D设计师都可以使…

Aho-Corasick automaton,ac自动机实现

文章目录 写在前面算法概述trie树的构建trie树的节点结构插入P串到trie树中fail指针的创建 搜索过程测试程序 写在前面 原作者的视频讲解链接:[算法]轻松掌握ac自动机_哔哩哔哩_bilibili 原作者的代码实现:data-structure-and-algorithm/aho_corasick.c…

机器视觉表面划痕检测流程

表面缺陷检测常见的检测主要有物体表面的划痕、污渍、缺口、平面度、破损、边框对齐度、物体表面的亮度、皱纹、斑点、孔等。 表面缺陷检测设备凝聚了机器视觉领域的许多技术成果,吸取了许多创新的检测理念,可以与现有生产线无缝对接检测,也…

制定进度计划是成功项目管理的必由之路

项目经理王斌接到一个新项目,与各项目干系人没有建立有效的联系,他们无法了解项目进展情况。甚至连项目团队的参与人员自身对项目整体情况也没有清楚的认识,而只管自己那一部分,整个开发过程完全是一种黑盒模式,项目组…

电视盒子哪个好?内行盘点2023最具性价比电视盒子推荐

电视盒子跟有线机顶盒相比不用每年缴费,资源也更丰富,可下载各种APP。作为电视盒子从业人员,身边亲友在选购电视盒子之前会咨询我的意见,不懂电视盒子哪个好,可以看看我总结的2023最具性价比电视盒子推荐,非…

手慢无,阿里巴巴最新出品的高并发终极笔记到底有多强?

前几天收到一位粉丝私信,说的是他才一年半经验,去面试却被各种问到分布式,高并发,多线程之间的问题。基础层面上的是可以答上来,但是面试官深问的话就不会了!被问得都怀疑现在Java招聘初级岗位到底招的是初…

MySQL-图形化界面工具 (下)

♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️树高千尺,落叶归根人生不易&…

springboot+mybatis+redis实现二级缓存

Mybatis提供了对缓存的支持,分为一级缓存和二级缓存,其查询顺序为:二级缓存>一级缓存->数据库,最原始是直接查询数据库,为了提高效率和节省资源,引入了一级缓存,为了进一步提高效率&#…

计算机网络(四下)——网络层

接上篇,这篇文章主要来写路由选择 五、路由协议 1>动态路由 1.距离向量算法(RIP协议);适用于小型网络 1》规定: 1>记录跳数(Hop count)最少的路径。 2>RIP允许一条路由最多15个路由器,距离为…

LitCTF2023 wp re最后一道 cry misc

本来不打算放了,但是比赛打都打了留个纪念社工有佬,与我无关,misc只会隐写虽然我是逆向手,但因为队友tql,所以只留给我最后一道~~我的wp向来以简述思路为主,习惯就好 Crypto Hex?Hex&#xff…

【项目设计】 负载均衡在线OJ系统

🧸🧸🧸各位大佬大家好,我是猪皮兄弟🧸🧸🧸 文章目录 一、项目介绍项目技术栈和开发环境 二、项目的宏观结构三、compile_server模块①日志模块开发,Util工具类,供所以模…