LatentPress:超越文本与视觉的上下文压缩 LatentPress: Context Compression Beyond Text and Vision
用小型适配器把长上下文写成连续软令牌,让冻结LLM直接读取,无需重建文本。
前置知识
软令牌(soft tokens / 连续上下文压缩)
把一段文本压缩成若干个连续向量(而不是离散词元),直接作为语言模型的输入。这些向量不在词表内,无法直接阅读,但模型可以把它们当作“隐形的上下文”处理。Gist、AutoCompressor、ICAE 都属于这一家族:训练一个压缩器把长提示变成少量连续向量,再让解码器基于这些向量回答问题。
LatentPress 的本质就是把对话历史和长文档写成软令牌,理解软令牌的工作方式是读懂其 WRITE/READ 接口设计的前提。
输入嵌入接口(inputs_embeds)
语言模型的第一层操作是把离散词元查表映射成嵌入向量,之后所有注意力计算都只作用于这些向量。因此可以把任意连续向量拼接到嵌入序列里,绕过 tokenizer 直接喂给模型(HuggingFace 的 inputs_embeds 参数)。模型权重无需任何修改。
LatentPress 的软令牌正是通过这个接口注入冻结解码器的,这是“冻结读取器、零改动推理”的技术基础。
前向 KL 散度蒸馏(forward KL)
一种蒸馏损失:让学生在给定输入下的输出分布 $p_{\text{comp}}$ 逼近老师的分布 $p_{\text{full}}$,即最小化 $\mathrm{KL}(p_{\text{full}} \| p_{\text{comp}})$。与前向重构不同,它对齐的是完整的下一词元分布,而不只是目标序列的对数似然。
LatentPress 用它把“读完整上下文”的教师行为蒸馏进“读压缩上下文”的写入器,是其训练目标 $\mathcal{L}=\mathcal{L}_{\text{rec}}+\lambda\mathcal{L}_{\text{fkl}}$ 的一半。
压缩率(compression ratio)
原始文本词元数与注入的连续向量数之比,例如 $\rho = |C| / \sum_i \lceil n_i / k_i \rceil$,其中 $n_i$ 是第 $i$ 段的长度、$k_i$ 是该段每 $k_i$ 个词元池化为 1 个向量的速率。8× 压缩意味着存储和读取成本约为原来的 1/8。
全文所有实验都围绕“准确率–压缩率”权衡曲线展开,不掌握这个指标就无法解读论文的主结果图。
LongMemEval 与 oracle evidence 设置
LongMemEval 是测试聊天助手长期记忆的基准,含 500 个问题,考查跨会话聚合、时间推理、知识更新和拒答等能力。oracle 设置指每个问题只提供标注好的“证据会话”而非完整多会话干扰堆,从而隔离“检索”与“读取/表征”两个问题。
论文的主实验就在该设置下进行,理解 oracle 的含义才能知道结果说明了“压缩后读取”能力而非检索能力。
研究动机
长期运行的助手会积累远超承受能力的对话历史:指令、多轮对话、计划、工具调用、环境反馈层层堆积,而后续决策往往只依赖一小部分。现有压缩方案都在“机器可读”上付出代价。其一,文本摘要:在LongMemEval上整体准确率仅0.184(无压缩对照0.490),因为摘要式改写丢掉精确用户事实——abstention类虽高达0.967,时间推理与多会话类崩塌到0.016–0.017。其二,视觉压缩(DeepSeek-OCR):把文本渲染成图像再光学重建,但推理前必须经自回归OCR解码,随压缩加深性能单调退化(0.426→0.390→0.312),单会话重建平均约934毫秒。其三,软令牌方法(Gist、AutoCompressor、ICAE):要么微调整个解码器,要么训练LLM规模LoRA编码器,ICAE在17.28×下跌至0.174,且自回归编码使每条对话写入耗时350–700毫秒。换言之,现有接口要么丢信息、要么重建慢、要么训练代价大。
本文的目标是本文提出一个更直接的问题:长上下文能否被写成一个紧凑的连续表示,让一个完全冻结的语言模型不经任何文本重建就直接读取?为此作者把上下文使用拆成两个阶段——WRITE(把文本映射为紧凑状态)和 READ(把该状态经由输入嵌入接口提供给冻结解码器做下游问答),并用四个实用标准来检验这个接口是否成立:准确率(压缩后读取应保持甚至超过原文)、写入成本(应接近实时)、读取成本(应显著快于读原文)、可训练足迹(应远小于解码器规模)。最终目标是确立“连续软令牌”作为一种面向机器的、独立于文本和视觉之外的第三种上下文接口,而非打造一个完整的记忆系统。
与已有工作不同的是,软令牌压缩本身不是新事物,LatentPress 的独特切入在于三点组合。其一,下游解码器完全冻结,只训练一个与读取器匹配的小型适配器(4.196M–26.220M 参数,约为解码器的 0.1%),而 Gist 需全量微调解码器、ICAE 需训练 LLM 规模的 LoRA 编码器。其二,软令牌在推理时直接被消费,绝不解码回文本——这与 ICAE 的自编码器式重建和 DeepSeek-OCR 的光学重建形成本质区别,使写入退化为单次前向传播。其三,压缩率是变量而非定值:对话利用角色结构(用户轮无损、助手轮压缩),文档用统一速率,而以往方法(AutoCompressor、ICAE)均为全局统一速率。作者刻意把“每段压缩多少”留给手工启发式而非学习策略,把贡献明确钉在接口本身,这是与优化压缩调度的先前工作的清晰分工。
核心方法
直觉上,给模型看的压缩上下文没必要人可读:既然消费方是冻结LLM,最短路径是把历史直接写成其嵌入空间里的连续向量。技术上,设上下文 $x=(x_1,\ldots,x_T)$ 为分段序列(对话轮或文档块),冻结解码器 $f_\theta$ 回答问题 $q$:先由小型可训练写入器把 $x$ 映射为短连续向量序列 $m$,再注入解码器 $$m = \mathrm{WRITE}_\phi(x; \pi), \qquad y = f_\theta[m;\ \mathrm{emb}(q)]$$ 其中 $\phi$ 是写入器参数,$\pi=(k_1,\ldots,k_T)$ 指定每段压缩率。写入器复用冻结解码器最底部 $L=2$ 层Transformer作编码器(深拷贝以防梯度扰动读取器),其上是线性适配器 $A\in\mathbb{R}^{d\times d}$(单位阵初始化,使写入器从接近原始嵌入出发)。每个位置的融合为 $h_i = H(E_i, c_i)$,$E_i$ 为字面输入嵌入、$c_i$ 为上下文抽象特征;$h_i$ 池化成软令牌,经inputs_embeds注入,解码器前向过程零改动。
核心创新是把贡献定义为“轻量级 WRITE/READ 接口”而非某个压缩算法,这个接口由三个属性同时刻画:冻结读取器、直接消费软令牌、可变长压缩。与已有方法的本质区别在于:Gist/AutoCompressor/ICAE 都需要训练解码器或 LLM 规模组件,而 LatentPress 只训练 $d\times d$ 的线性头;ICAE 和视觉压缩在推理时要先把向量/图像解码回文本再读,LatentPress 从不重建,写入是单次前向传播;xRAG 虽然也冻结读取器,但把单条独立检索的段落压成单个 token,LatentPress 则写入完整多轮历史和整个长文档,并能对结构化段落分配不同速率。另一个关键设计是角色感知调度:用户轮 $k_{\text{user}}=1$ 完全无损保留原始嵌入,助手轮以 $k_{\text{assistant}}\in\{8,16,32\}$ 池化——依据是 LongMemEval 的答案承载信息高度集中在用户陈述的个人事实里,这一调度让对话级压缩比(4.62–7.70×)由角色与长度混合自然涌现,而非预设全局预算。
方法步骤详情
流程分四步。第一步构造写入器:深拷贝冻结解码器底部 $L=2$ 层作编码器,叠加单位阵初始化的线性适配器 $A\in\mathbb{R}^{d\times d}$,解码器与借用层全部冻结,仅训适配器(Qwen2.5-7B 12.849M、Qwen3-8B 16.781M、Qwen3-1.7B 4.196M、Qwen2.5-14B 26.220M 参数)。第二步确定压缩调度 $\pi$:对话用角色规则($k_{\text{user}}=1$ 无损保留用户轮原始嵌入,$k_{\text{assistant}}\in\{8,16,32\}$ 池化助手轮),文档用统一 $k\in\{4,8,16\}$。第三步训练:在 2000 条 UltraChat 对话(无 QA 标签)上优化 $\mathcal{L}=\mathcal{L}_{\text{rec}}+\lambda\mathcal{L}_{\text{fkl}}$($\lambda=1.0$):$\mathcal{L}_{\text{rec}}$ 是给定压缩上下文的教师强制交叉熵,$\mathcal{L}_{\text{fkl}}$ 是全上下文与压缩上下文下一词元分布的前向 KL,把教师行为蒸馏给写入器;AdamW、学习率 $1\times10^{-4}$、1000 步、块长 2048、bf16 解码器配 fp32 头;任务自适应时换用目标域 QA 三元组训练同一头部。第四步推理:软令牌后接问题嵌入,经 inputs_embeds 一次性送入冻结解码器,贪心解码直接产出答案,全程无文本重建。
技术新颖性
技术新颖性可从四个维度评估。架构上,“借用冻结解码器底部 2 层 + 单位阵初始化线性头”的读取器匹配写入器是新的设计点:消融显示冻结借用层反而全面优于微调它们(0.476/0.478/0.504 对 0.454/0.460/0.438),说明保留读取器原始表征比拟合训练分布更重要——这本身就是有价值的反直觉发现。监督上,重构加前向 KL 的双重目标针对“压缩上下文应恢复教师行为”这一目标定制,区别于 ICAE 的纯自编码重构。调度上,角色感知速率把“哪些信息值钱”这一领域知识显式编码进压缩规则,消融证明学习到的表征不可替代:同样调度下用直接池化替换学习写入器,准确率从 0.476 降到 0.325。定位上,作者坦承压缩调度是手工启发式而非学习组件、$H$ 用的是轻量实例化而非学习式逐词元融合,这种“先验证接口、再优化调度”的克制叙述方式,让接口层面的结论(软令牌可直接作机器上下文接口)不受具体调度优劣的干扰,是一种干净的研究声明。
实验结果
实验沿准确率、写入、读取、足迹四轴展开。LongMemEval(500 题、oracle 证据)上无压缩证据仅 0.490,LatentPress 在 Qwen2.5-7B 达 0.476/0.478/0.504(4.62×/6.27×/7.70×,5 种子均值),7.7 倍压缩反超原文;同协议 ICAE 为 0.452 至 0.174(4.12–17.28×),DeepSeek-OCR 单调退化 0.426→0.312,文本摘要仅 0.184,统一速率变体仅 0.06–0.12。跨 Qwen2.5-7B/8B/1.7B(规模差 4.7×)结论一致:比统一池化高 0.34–0.45,Qwen3-1.7B 领先 OCR(0.434 对 0.264)。长文档(LongBench-QA)域内自适应在温和压缩下超过全上下文基线:Qwen2.5-14B 从 47.93 升至 57.99(4×)与 52.18(8×),Qwen2.5-7B 43.80→49.06,Qwen3-8B 30.80→39.62,但 16× 全部跌破基线;跨域零迁移仅 4× 略超原始。效率:写入 43 毫秒/对话(H100、批 8),约为 OCR(约 934 毫秒)的 1/22、摘要与 ICAE 的 1/8–15;读取 0.43–0.49 秒/例,较原文快 5.0–9.2×、缓存 OCR 快 5.5–9.4×;端到端冷启动快 6.0–13.7×。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| LongMemEval 对话记忆问答(Qwen2.5-7B,500 题 oracle 证据) | LLM 判分准确率 | 0.504±0.024 @ 7.70× 压缩(ka=32) | 无压缩 oracle 证据 0.490;DeepSeek-OCR 0.312 @ 9.34×;ICAE 0.318 @ 8.96×;文本摘要 0.184 @ 12.06× | 压缩 7.7 倍仍超无压缩基线 +0.014;较最强视觉基线高 0.192 |
| LongBench-QA 长文档问答(域内自适应,Qwen2.5-14B) | 官方 overall F1 (%) | 57.99 @ 4×(8× 为 52.18) | 原始全上下文 47.93;16× 时降至 40.30 | 4× 压缩下 +10.06 分,超过自身未压缩读取器 |
| LongBench-QA 长文档问答(域内自适应,Qwen3-8B) | 官方 overall F1 (%) | 39.62 @ 4× | 原始全上下文 30.80;DeepSeek-OCR b1024 约 33.41 | +8.82 分于未压缩基线 |
| 写入成本(LongMemEval 单对话编码,H100,批 8) | 毫秒/对话 | 43 ms(单次前向传播) | DeepSeek-OCR 重建 844–1056 ms(均值约 934);文本摘要 407–645 ms;ICAE 350–700 ms | 比 OCR 快约 22×,比摘要/ICAE 快 8–15× |
| 读取成本(LongBench-QA 30 例热加载推理,f8 工作点) | 秒/例 | 0.43–0.49 s | 原始全上下文 2.44–4.14 s;缓存 OCR(b640)2.71–4.34 s | 较原始上下文快 5.0–9.2×,较缓存 OCR 快 5.5–9.4× |
| 同场对比 ICAE(LongMemEval,Qwen2.5-7B,冻结读取器) | LLM 判分准确率 | 0.476 @ 4.62×(user-fact 0.938) | ICAE 0.452 @ 4.12×(user-fact 0.548) | 相同冻结读取器协议下整体高 0.024,用户事实类高 0.390 |
局限与改进
作者明确承认的边界有三条。第一,LongMemEval 采用 oracle 证据设置,检索被理想化地跳过——更长、含干扰项的 LongMemEval-S/M 堆超出了写入器训练所见的长度,会混淆压缩与检索,与检索器的完整集成留待未来。第二,压缩调度是手工指定的启发式:角色规则(用户无损/助手压缩)和统一速率都未经学习,“何时写、写多少”的学习策略留作开放问题,16× 下性能全面崩塌正是固定调度撞上瓶颈的表现。第三,效率结论限于所测模型、输出长度与批处理策略,且只与需要重建的路线比较,未与同样单次前向写入的软令牌方法比写入速度之外的综合效率。我的补充观察:Qwen3-8B 的读数在更压缩时反而降低部分源于格式病态(JSON 包裹、 泄漏、空输出、复读循环)而非纯语义损失,说明高压缩下的行为稳定性依赖解码器鲁棒性;域内结果依赖 QA 三元组监督,弱化了对通用对话表征蒸馏的依赖;判分虽用官方 Llama-3.1-70B,但 abstention 类占比高会抬高整体分数的解释空间。
独立分析的弱点
第一,固定压缩调度在长文档上是明显短板:16×时所有读取器跌破原始基线(Qwen3-8B从39.62跌至26.12),而失败模式分析显示相当部分是解码病态(JSON包裹、空输出、复读循环、泄漏)而非信息本身丢失——改进方向是格式约束解码或压缩后状态的格式校准,更根本的是用学习式逐段策略替代手工 $\pi$,例如在延迟/显存预算下用强化学习优化下游答案奖励(论文在C.1消融后亦如此建议)。第二,角色规则对结构先验过强:角色对调消融把准确率打到0.087,一旦角色标签缺失或出错(真实系统中用户/助手边界常被工具调用、系统注入打破),接口会灾难性失效,应把“哪些词元无损保留”交给基于重要性的学习器(如TIP式词元训练价值信号)。第三,域内与跨域监督的落差(Qwen2.5-14B域内52.18对跨域37.08@8×)暴露域敏感性,可在多域混合QA上训练通用写入器。第四,$H$ 仍是轻量固定融合,“学习式字面/上下文融合”的框架潜力未兑现。第五,oracle设置回避的检索交互(压缩表示与检索器协同、干扰堆鲁棒性)在真实系统不可避免。
未来方向
作者提出的方向有四个:一是动态压缩——用学习策略逐段选择压缩率,在延迟或显存预算约束下以强化学习优化下游答案奖励,可借鉴学习式提示压缩与词元重要性信号(TIP、LLMLingua 系列),这将取代手工的角色规则与统一速率;二是学习式逐词元融合 $H$,把字面嵌入与上下文抽象的加权融合从固定实例化升级为可学习模块;三是把写入器扩展到更多读取器与非文本上下文,如工具调用轨迹、多模态与具身痕迹,论文反复强调接口天然支持“超越文本与视觉”;四是与检索、记忆更新、冲突解决等完整记忆系统(MemGPT、Mem0、Generative Agents)集成——LatentPress 提供的软令牌表征可以嵌入这类流水线作为存储层。基于成果还可延伸:把前向 KL 蒸馏与 Coconut 式潜空间推理结合,让模型在连续记忆上进行多步思考;研究压缩状态的缓存与多读取器复用(OCR 缓存已展示跨读取器复用的经济性,软令牌目前是读取器绑定的,绑定式写入器的服务化摊销是实际问题);以及在 LongMemEval-S/M 干扰堆上联合训练“压缩+检索”,检验表示在真实 haystack 下的缩放行为。
复现评估
复现条件相当好。代码已开源(GitHub: HJSang/LatentPress),附录给出全部配置:冻结解码器+深拷贝底部2层编码器+单位阵初始化 $d\times d$ 线性头,AdamW、学习率 $1\times10^{-4}$、1000步、块长2048、批大小1、bf16解码器/fp32头,训练仅2000条UltraChat对话(无QA标签),评估在固定500题LongMemEval上以温度0贪心解码,判分用官方模型库的Llama-3.1-70B-Instruct(vLLM FP8双卡)。算力门槛低:可训练参数仅4.2M–26.2M(约解码器0.1%),训练仅1000步,单卡H100即可复现主表。注意事项:跨读取器泛化需按读取器重训压缩头;DeepSeek-OCR基线重建用批量vLLM(作者提示顺序解码需约15小时,批量后几分钟;b1024在500题全批遇CUDA-graph非法内存访问需enforce_eager);LongBench-QA域内实验为5个训练种子的均值±标准差,但端到端墙钟为单次运行无方差;个别附录表(如逐子集完整结果)需对照代码仓库核实。
论文图表