20倍压缩比!微软提出大模型提示压缩框架LLMLingua

news2024/11/18 8:50:43

近期,越来越多研究在探索大型语言模型(LLM)在实际应用中的推理和生成能力。随着 ChatGPT 等模型的广泛研究与应用,如何在保留关键信息的同时,压缩较长的提示成为当前大模型研究的问题之一。

图片

为了加速模型推理并降低成本,微软的新文章提出了一种粒度粗到细的提示压缩方法 LLMLingua,它在对齐后采用了经过良好训练的较小语言模型,通过给提示动态分配不同的压缩比率,在高压缩比率下保持语义完整性。虽然 token 级的压缩提示的格式难以被人类理解,但 LLM 可以很好地进行解释。

图片

图片

实验证明,这种方法在 20 倍的压缩下性能损失仍较小,这不仅能够降低计算成本,还为处理 LLM 中更长的上下文提供了潜在解决方案。

论文题目:
LLMLingua: Compressing Prompts for Accelerated Inference of Large Language Models

论文链接:
https://arxiv.org/abs/2310.05736

Demo 地址:
https://huggingface.co/spaces/microsoft/LLMLingua

代码地址:
https://aka.ms/LLMLingua


为了加速模型推理,有研究在尝试修改 LLM 的参数(如压缩),但在只能通过 API 访问 LLM 的情况下,这些方法可能并不适用,因此需要考虑从提示方面着手解决问题。

之前有工作指出,自然语言本质上是冗余的,并且 LLM 可以有效地从被压缩文本中还原源文本。因此,近期的一些方法将长提示压缩为短提示,旨在通过保留基本信息的同时减少原始提示的长度,来加速模型推理。

比如今年新提出的 Selective-Context 方法,首先使用小型语言模型计算原始提示中每个词汇单元(如句子、短语或 token)的自身信息,然后删除较少信息的内容来压缩提示。然而,它不仅忽视了被压缩内容之间的相互依赖关系,还忽略了目标 LLM 与用于提示压缩的较小语言模型之间的对应关系

什么是困惑度(perplexity)?

通常指在自然语言处理中,对语言模型性能的一种度量。它衡量了语言模型在给定一段文本后对下一个词预测的不确定性或困惑程度。一般来说,困惑度越低,模型的性能越好,因为它表示模型对下一个词预测的自信程度。

在本文中,困惑度被用作衡量提示信息复杂度的标准。较低困惑度的 token 在语言模型的预测中贡献的不确定性较小,因此可能被认为是相对冗余的信息,在压缩中被删除也不太影响语义信息

LLMLingua

整体来说,本文所提出的 LLMLingua 框架旨在通过更精细地控制压缩过程,确保在减小提示长度的同时有效保留原始提示信息。模型框架如图 1 所示。

图片

▲图1 LLMLingua 框架

  1. 压缩比例控制器:其主要作用是动态地为提示中的不同部分分配不同的压缩比例,同时在高度压缩的情况下保持语义的完整性。

  2. 迭代提示:旨在在进行压缩的同时保留提示中的知识。

  3. 对齐方法:用于解决小型语言模型与黑盒大型语言模型之间存在的概率分布差距。

压缩比例控制器

该模块用于给提示的不同部分动态地分配不同的压缩比例,从而实现在高度压缩的情况下保持语义完整性,有以下两个主要设计动机:

  • 不同部分的影响力差异:提示中的指令和问题对生成的结果有直接影响,因为它们应包含生成下一个答案所需的所有必要信息。相反,如果提示中包含多个示例,传达的信息可能会冗余。因此,该模块根据提示中的不同部分,通过给示例动态分配更小的压缩比例,给指令和问题更大的压缩比例,以更好地实现信息保留。

  • 压缩率与语言完整性的平衡:当需要更高压缩率时,使用 token 级的 dropout 可能使压缩后的提示过于简单,从而失去原始提示的重要信息。为了在高度压缩的情况下保持一定程度的语言完整性,该模块引入了句子级的丢弃,特别是在存在多个冗余示例的情况下,还可以执行示例级的控制,以满足压缩的需求。

图片

▲算法1 压缩比例控制器

如算法 1 所示:

  • 动态分配压缩比例:针对提示中的不同部分,根据某些标准动态地分配不同的压缩比例。这样,模型可以有选择地保留对语义贡献较大的部分,同时更好地压缩相对较不重要的部分。

  • 示例级压缩:在动态分配的压缩比例下,进行粗粒度的示例级压缩。这意味着在高度压缩的情况下,模型仍然可以保持提示的整体语义完整性,而不仅仅是单个 token 的压缩。

迭代 token 级提示压缩(ITPC)

该模块用于在压缩提示的过程中迭代处理每个 token,更细粒度地压缩提示内容,以更准确地保留关键的上下文信息。

图片

▲算法2 ITPC 算法

该算法的步骤可以描述为:

  1. 将提示分段: 首先,将目标提示分成多个段落或片段。每个段落通常包含不同部分的信息,如指令、演示和问题。

  2. 计算困惑度: 使用较小的语言模型计算每个段落的困惑度。困惑度反映了模型对段落中 token 序列的预测难度,即上下文的复杂性。

  3. 迭代压缩: 对每个段落执行迭代的 token 级压缩算法。在每次迭代中,将当前段落的压缩结果与下一段落连接起来,以更准确地估计条件概率。这有助于缓解条件独立性假设的局限性,使得压缩后的提示更接近原始提示。

  4. 概率估计与过滤: 利用计算到的条件概率估计每个 token 的重要性,并根据设定的阈值进行过滤。这一步旨在保留压缩提示中具有关键信息的 token,同时舍弃不太重要的 token。

分布对齐

该模块用于解决较小语言模型(LM)与黑盒 LLM 之间的概率分布差距,以提升对提示进行压缩的效果。以下是该模块的主要步骤和目标:

  1. 较小 LM 的优化:从预训练的小型语言模型  开始,通过在 LLM 生成的数据上进行指令微调来优化小型 LM,使其更好地模拟 LLM 的分布。

  2. 概率分布估计:使用优化后的小型 LM 生成提示的分布。这一步旨在通过小型 LM 更准确地估计原始提示和压缩提示的分布。

  3. 对齐处理:基于生成的分布,进行对齐处理,使小型 LM 生成的提示分布更加接近 LLM 的提示分布。这有助于缩小两者之间的分布差距,提升压缩质量。

实验

在四个不同领域的数据集上评估对提示压缩的性能。具体而言,评估使用了 GSM8K(推理和上下文学习)、BBH(推理和上下文学习)、ShareGPT(对话理解),以及 Arxiv-March23(摘要)。

图片

▲表1 不同目标压缩比下对话和摘要任务中的性能比较

实验结果如表 1 和表 2 所示,可以看出,在几乎所有实验中,我们提出的方法始终明显优于先前的方法。

图片

▲表2 在数学推理和上下文学习任务中的性能比较

  • 在推理和上下文学习任务(GSM8K 和 BBH)中,本文方法在 1-shot 约束条件下表现略高于 full-shot 方法,同时在高压缩比(5 倍和 3 倍)下效果不错,有效地保留了原始提示的推理信息。在 half-shot 和 quarter-shot 约束下,性能略有下降,但也很不错。

  • 在上下文理解任务(ShareGPT 和 Arxiv-March23)中,本文方法实现了 9 倍和 3.3 倍的加速比(acceleration ratios),同时保持高 BERTScore F1,成功地保留了初始提示的语义信息。

在具有一定难度的推理和 ICL 任务上,本文的方法相对于 Selective-Context 方法也有着显著的性能提升。尤其是在 GSM8K 上,也证明了能有效保留推理信息。

消融实验

图片

▲表3 在 1-shot 约束下 GSM8K 数据集上的消融结果

结论

本研究通过从粗粒度到细粒度的策略,提出了一种名为 LLMLingua 的基于小型语言模型困惑度的提示压缩算法,它由三个关键模块组成:压缩比例控制器、迭代 token 级压缩以及对齐。作者在四个数据集上对其进行了大量实验,

图片

▲图3 在 GSM8K 上不同压缩比()下各种提示压缩方法的性能比较

如图 3 所示,随着压缩比例的提高,尤其是在 25 倍到 30 倍的范围内,所有方法在性能上都会明显下降。但与其他方法相比,本文的方法在导致性能下降时,明显更偏向于更高的压缩比,这可能受提示长度、任务类型和涉及句子数量等多种因素制约。

因此,即使在极端的压缩比例下,该方法仍然能够有效地保持原始提示的信息,这对于在实际应用中研究不同限制和资源约束下的提示至关重要。

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

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

相关文章

ViewBinding与DataBinding(视图绑定与数据双向绑定)

前言:心中纵是有所盼 严寒没有减 风很冷 我的手已渐蓝 前言 控件查找对于Android开发来说也是一部血泪史,一直为更有效的方案进行了多种方案的研究和探讨。findViewById() 过于繁琐,强制转换不安全;butterkniife 会存在众多臃肿的…

【【UART 传输数据实验】】

UART 传输数据实验 通信方式在日常的应用中一般分为串行通信(serial communication)和并行通信(parallel communication)。 我们再来了解下串行通信的特点。串行通信是指数据在一条数据线上,一比特接一比特地按顺序传…

随笔记录-springboot_LoggingApplicationListener+LogbackLoggingSystem

环境:springboot-2.3.1 加载日志监听器初始化日志框架 SpringApplication#prepareEnvironment SpringApplicationRunListeners#environmentPrepared EventPublishingRunListener#environmentPrepared SimpleApplicationEventMulticaster#multicastEvent(Applicati…

字符设备驱动的加载与卸载

一. 简介 前面几篇文章编写了 字符设备驱动模块加载与卸载框架代码,设置了开发板启动方式。文章地址如下: 字符设备驱动框架的编写-CSDN博客 字符设备驱动模块的编译-CSDN博客 字符设备驱动的加载与卸载前工作-CSDN博客 本文学习如何加载与卸载驱动…

windows10 固定电脑IP地址操作说明

windows10 固定电脑IP地址操作说明 一、无线网络的IP地址设置方法二、有线网络的IP地址设置方法 本文主要介绍,windows10操作系统下,不同的网络类型,对应的电脑IP地址设置方法。 一、无线网络的IP地址设置方法 在桌面右下角,点击…

st.pp.normalize_total(data) # NOTE: no log1p

这段代码在使用 stlearn 包中的 st.pp.normalize_total 函数对数据进行总体计数标准化。标准化后,每个细胞的总计数都将等于 median(total_counts)。 NOTE: no log1p 这行注释表示在标准化后,数据不会进行 log1p 转换。log1p 转换将每个计数值增加 1&a…

Java如何创建线程?到底有几种方式创建线程?

文章目录 继承Thread类实现Runnable接口实现Callable接口匿名内部类形式的线程创建实现接口 VS 继承Thread到底有几种创建线程的方式?参考 继承Thread类 定义一个线程类,重写实现run方法(因为 Thread类也实现了 Runable接口),在其中定义线程…

Pytorch神经网络的参数管理

目录 一、参数访问 1、目标参数 2、一次性访问所有参数 3、从嵌套块收集参数 二、参数初始化 1、内置初始化 2、自定义初始化 3、参数绑定 在选择了架构并设置了超参数后,我们就进入了训练阶段。此时,我们的目标是找到使损失函数最小化的模型参数…

矩阵式键盘实现的电子密码锁

#include<reg51.h> //包含51单片机寄存器定义的头文件 sbit P14P1^4; //将P14位定义为P1.4引脚 sbit P15P1^5; //将P15位定义为P1.5引脚 sbit P16P1^6; //将P16位定义为P1.6引脚 sbit P17P1^7; //将P17位定义为P1.7引脚 sbit soundP3^7; //将so…

新媒体宣传与广州迅腾文化传播有限公司:品牌知名度提升的新动力

新媒体宣传与广州迅腾文化传播有限公司&#xff1a;品牌知名度提升的新动力 随着科技的飞速发展和互联网的普及&#xff0c;新媒体已经成为现代社会不可或缺的一部分。新媒体平台具有传播速度快、覆盖面广的特点&#xff0c;为企业品牌宣传提供了前所未有的机会。广州迅腾文化…

黑马点评07 秒杀优化 加阻塞队列

实战篇-22.秒杀优化-异步秒杀思路_哔哩哔哩_bilibili 1.流程回顾 1.1超卖问题 判断秒杀时间&#xff0c;加乐观锁&#xff08;比较标记/版本&#xff09;&#xff0c;检查库存是否大于0 1.2一人一单问题 看看数据库里有没有这个这个人下的订单&#xff1a; 1.单机模式中…

自动化测试 (五) 读写64位操作系统的注册表

自动化测试经常需要修改注册表 很多系统的设置&#xff08;比如&#xff1a;IE的设置&#xff09;都是存在注册表中。 桌面应用程序的设置也是存在注册表中。 所以做自动化测试的时候&#xff0c;经常需要去修改注册表 Windows注册表简介 注册表编辑器在 C:\Windows\regedit…

第二百一十五回 如何创建单例模式

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"分享三个使用TextField的细节"沉浸式状态样相关的内容&#xff0c;本章回中将介绍 如何创建单例模式.闲话休提&#xff0c;让我们一起Talk Flutter吧。 …

@KafkaListener 注解配置多个 topic

见如下示例 主要见 KafkaListener 中 topics 属性的配置 其中 ${xxxx.topic1} 为从springBoot 配置文件中读取的属性值 KafkaListener(topics {"${xxxx.topic1}", "${xxxx.topic2}"}, groupId "${xxxx.groupId}",containerFactory "xxx…

易点易动打通OA系统,实现固定资产高效管理

近年来,随着信息化建设的不断深入,OA系统在企业管理工作中的应用也日趋广泛。传统的固定资产管理存在数据分散,管理效率低等问题。深度整合易点易动和OA系统,可以打通各系统之间的数据通道,实现固定资产通过OA系统的全流程管理。这不仅可以提升管理效率,减轻人工管理成本,也更方…

部署LVS的NAT模式

实验准备 #负载调度器# 192.168.116.40 #内网 12.0.0.100 #外网 先添加双网卡 #web服务器# 192.168.116.20 #web1 192.168.116.30 #web2 #nfs共享服务# 192.168.116.10 #nfs systemctl stop firewalld setenforce 0 1.nfs共享文件 1…

Python-Selenium-使用 pywinauto 实现 Input 上传文件

当前环境&#xff1a;Win10 Python3.7 pywinauto0.6.8&#xff0c;selenium3.14.1 示例代码 from pywinauto import Desktop import osapp Desktop() dialog app[打开] dialog[Edit].set_edit_text(os.getcwd() .\\example-01.jpg) dialog[Button].click() 其他方法&…

接口测试的工具(3)----postman+node.js+newman

1.安装newman&#xff1a;输入命令之后 一定注意 什么都不要操作 静静的等待结束就行了。 2.安装失败的对此尝试不行 在用下面的方法 解压一下就行了 3.验证是否成功 多次尝试是可以在线安装成功的

SpringCloudAliBaba篇之Seata:分布式事务组件理论与实践

1、事务简介 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在关系数据库中&#xff0c;一个事务由一组SQL语句组成&#xff0c;事务具有4个属性&#xff1a;原子性、一致性、隔离性、持久性。这四个属性通常称为ACID原则。 原子性(atomici…

在非联网、无网络环境下,fpm的安装和生成RPM包的使用案例

文章目录 前言1、安装fpm1.1、安装Ruby环境1.2、gem 安装 fpm 2、fpm使用2.1、fpm常用参数2.2、fpm使用案例2.2.1、fpmFirstDemo文件夹2.2.3、编写脚本文件2.2.4、生成RPM包2.2.5、RPM安装与卸载测试 前言 由于fpm采用Ruby语言开发&#xff0c;因此在使用之前需要先在您的虚拟…