来源:机器之心
本文约1700字,建议阅读5分钟Unlimiformer 可以被注入到任何现有的编码器 - 解码器 transformer 中,能够处理长度不限的输入。

Transformer 是时下最强大的 seq2seq 架构。预训练 transformer 通常具有 512(例如 BERT)或 1024 个(例如 BART)token 的个上下文窗口,这对于目前许多文本摘要数据集(XSum、CNN/DM)来说是足够长的。

但 16384 并不是生成所需上下文长度的上限:涉及长篇叙事的任务,如书籍摘要(Krys-´cinski et al.,2021)或叙事问答(Kociskýet al.,2018),通常输入超过 10 万个 token。维基百科文章生成的挑战集(Liu*et al.,2018)包含超过 50 万个 token 的输入。生成式问答中的开放域任务可以从更大的输入中综合信息,例如回答关于维基百科上所有健在作者的文章的聚合属性的问题。图 1 根据常见的上下文窗口长度绘制了几个流行的摘要和问答数据集的大小;最长的输入比 Longformer 的上下文窗口长 34 倍以上。

在这些超长输入的情况下,vanilla transformer 无法进行缩放,因为原生注意力机制具有平方级的复杂度。长输入 transformer 虽然比标准 transformer 更高效,但仍需要大量的计算资源,这些资源随着上下文窗口大小的增加而增加。此外,增加上下文窗口需要用新的上下文窗口大小从头开始重新训练模型,计算上和环境上的代价都不小。

在「Unlimiformer: Long-Range Transformers with Unlimited Length Input」一文中,来自卡内基梅隆大学的研究者引入了 Unlimiformer。这是一种基于检索的方法,这种方法增强了预训练的语言模型,以在测试时接受无限长度的输入。

论文链接:

https://arxiv.org/pdf/2305.01625v1.pdf

Unlimiformer 可以被注入到任何现有的编码器 - 解码器 transformer 中,能够处理长度不限的输入。给定一个长的输入序列,Unlimiformer 可以在所有输入 token 的隐藏状态上构建一个数据存储。然后,解码器的标准交叉注意力机制能够查询数据存储,并关注前 k 个输入 token。数据存储可以存储在 GPU 或 CPU 内存中,能够次线性查询。

Unlimiformer 可以直接应用于经过训练的模型,并且可以在没有任何进一步训练的情况下改进现有的 checkpoint。Unlimiformer 经过微调后,性能会得到进一步提高。本文证明,Unlimiformer 可以应用于多个基础模型,如 BART(Lewis et al.,2020a)或 PRIMERA(Xiao et al.,2022),且无需添加权重和重新训练。在各种长程 seq2seq 数据集中,Unlimiformer 不仅在这些数据集上比 Longformer(Beltagy et al.,2020b)、SLED(Ivgi et al.,2022)和 Memorizing transformers(Wu et al.,2021)等强长程 Transformer 表现更好,而且本文还发现 Unlimiform 可以应用于 Longformer 编码器模型之上,以进行进一步改进。

Unlimiformer 技术原理

由于编码器上下文窗口的大小是固定的,Transformer 的最大输入长度受到限制。然而,在解码过程中,不同的信息可能是相关的;此外,不同的注意力头可能会关注不同类型的信息(Clark et al.,2019)。因此,固定的上下文窗口可能会在注意力不那么关注的 token 上浪费精力。

在每个解码步骤中,Unlimiformer 中每个注意力头都会从全部输入中选择一个单独的上下文窗口。通过将 Unlimiformer 查找注入解码器来实现:在进入交叉注意力模块之前,该模型在外部数据存储中执行 k 最近邻 (kNN) 搜索,在每个解码器层中的每个注意力头中选一组 token 来参与。

编码

为了将比模型的上下文窗口长度更长的输入序列进行编码,本文按照 Ivgi et al. (2022) 的方法对输入的重叠块进行编码 (Ivgi et al. ,2022),只保留每个 chunk 的输出的中间一半,以确保编码过程前后都有足够的上下文。最后,本文使用 Faiss (Johnson et al., 2019) 等库对数据存储中的编码输入进行索引(Johnson et al.,2019)。

检索增强的交叉注意力机制

在标准的交叉注意力机制中,transformer 的解码器关注编码器的最终隐状态,编码器通常截断输入,并仅对输入序列中的前 k 个 token 进行编码。

本文不是只关注输入的这前 k 个 token,对于每个交叉注意头,都检索更长的输入系列的前 k 个隐状态,并只关注这前 k 个。这样就能从整个输入序列中检索关键字,而不是截断关键字。在计算和 GPU 内存方面,本文的方法也比处理所有输入 token 更便宜,同时通常还能保留 99% 以上的注意力性能。

图 2 显示了本文对 seq2seq transformer 架构的更改。使用编码器对完整输入进行块编码,并将其存储在数据存储中;然后,解码时查询编码的隐状态数据存储。kNN 搜索是非参数的,并且可以被注入到任何预训练的 seq2seq transformer 中,详情如下。

实验结果

长文档摘要

表 3 显示了长文本(4k 及 16k 的 token 输入)摘要数据集中的结果。

在表 4 的训练方法中,Unlimiformer 能够在各项指标上达到最优。

书籍摘要

表 5 显示了在书籍摘要上的结果。可以看到,基于 BARTbase 和 PRIMERA,应用 Unlimiformer 都能取得一定的改进效果。

编辑:文婧

GPT-4的32k输入框还是不够用?Unlimiformer把上下文长度拉到无限长相关推荐

  1. 李沐论文精读系列四:CLIP和改进工作串讲(LSeg、GroupViT、VLiD、 GLIPv1、 GLIPv2、CLIPasso)

    文章目录 一.CLIP 1.1 简介 1.1.1 前言 1.1.2 模型结构 1.1.3 模型效果 1.1.3.1 对自然分布偏移的鲁棒性 1.1.3.2 StyleCLIP 1.1.3.3 CLIP ...

  2. 密码学的骰子——随机数

    做开发的工程师们应该或多或少都接触过随机数,可能认为它就是一个随机生成的数字嘛,使用时也很简单,只要调用开发语言提供的函数即可.但实际上随机数后面还是有着比较复杂但也有趣的知识点的. 根据一般定义,随 ...

  3. 大模型时代,腾讯云“复制”腾讯|WAIC2023

    点击关注 文|郝鑫 编|刘雨琦 刚过去的WAIC(世界人工智能大会)俨然成为了大模型厂商的成果汇报大会. 百度文心大模型升级到3.5版本,训练速度提升2倍,推理速度提升30倍:华为云发布盘古大模型3. ...

  4. 后GPT 3.0时代,主流大模型技术精要详解,走向AGI之路的大门已开

    转载自 | 机器之心 来源 | 知乎 作者 | 张俊林 洋洋洒洒近三万字,中国中文信息学会理事.中科院软件所博士.新浪微博机器学习团队新技术研发负责人的张俊林回顾了大型语言模型(LLM)的发展历程.技 ...

  5. 数云融合|探究GPT家族的进化之路:GPT-3、GPT-3.5和GPT-4的比较分析

    目录 一.GPT三大版本介绍 (一)GPT-3 (二)GPT-3.5 (三) GPT-4 二.GPT 三大版本对比 (一)GPT-4 与 GPT-3 的功能对比 GPT-3 与 GPT-4 中的tok ...

  6. GPT:你知道这五年我怎么过的么?

    时间轴 GPT 首先最初版的GPT,来源于论文Improving Language Understanding by Generative Pre-Training(翻译过来就是:使用通用的预训练来提 ...

  7. ChatGLM2-6B发布,C-Eval超GPT4,支持32k上下文!

    自清华大学数据挖掘实验室(THUDM)3月开源ChatGLM-6B已经过去了3个多月,最近他们又带来了性能全面提升的"船新"版本-ChatGLM2-6B.别看名字变化小,其实更新的 ...

  8. MBR和GPT概要学习

    MBR和GPT概要学习 1.     MBR和GPT 大家所最为熟知的分区方式同时也是最主流的主要有两种:MBR(Master Boot Record)和GPT(GUID Partition Tabl ...

  9. html 输入框自动缩短 一行内显示,JQuery UI组合框自动补全功能改进版(即时全部显示+input内容保存)...

    JQuery UI Autocomplete(自动补全)功能在input前端设计中非常有用,最近一个项目正好用到,仔细研究了下组合框(combobox)的自动补全部分,官方地址是:https://jq ...

最新文章

  1. AI应用落地哪家强?CSDN AI Top 30+案例评选等你来秀!
  2. 【原创】在CentOS 5.7上通过YUM安装Erlang的坑爹经历(更新)
  3. Spring和SpringMVC整合
  4. 微软发布 .NET Core 卸载工具,适用于 Windows 和 Mac
  5. Python+matplotlib绘制三维图形5个精选案例
  6. Java项目转换成Web项目
  7. ipv6 华为交换机 路由配置_华为路由器单臂路由的配置方法及小案例
  8. 基于java的铁路售票系统(火车票预订)ssh框架
  9. kuangbin专题 专题1 简单搜索
  10. linux下安装卸载永中office步骤,永中集成Office For Linux安装图文指南及简介
  11. 三线压力传感器原理_压力传感器接线图及原理介绍
  12. 什么才是【Python】中的鸭子类型和猴子补丁
  13. 地对地导弹地对地导弹地对地导弹
  14. DDD(Domain-Driven Design 领域驱动设计) 与产品设计
  15. teambition、Tower、worktile 、trello 等任务管理工具哪个好?
  16. Vue表格实现隔行变色
  17. 国产安路FPGA(一)-TD软件使用及问题记录
  18. 1.JAVA基础汇总
  19. git-rebasegit-squash
  20. 微信小程序:小程序开发测试时候使用http请求

热门文章

  1. 互联网的成本:不要低估背后的隐性成本
  2. 7-4 例4-3游泳池改造预算分数 10
  3. mysql创建函数执行sql语句_MySQL mysql_query 函数执行SQL语句
  4. matlab 固有频率 振型,请教如何求出有阻尼系统的固有频率及相应振型矩阵
  5. 英语的口腔---后部发声方法
  6. 三、ModBus协议实战分析
  7. Eclipse decompile jode
  8. org.apache.jasper.JasperException:解决办法!
  9. 操作系统 | 实验一 进程控制
  10. python使用xlwings提取excel表中所有单元格的数据