跳到主要内容

输入上下文压缩

送进模型前如何削减 token 数又不丢关键信息

核心要点

  • 在前向传播之前删输入 token,直接降 prefill 的 $O(n^2)$ 成本
  • 硬压缩:按困惑度/自信息删原文 token(LLMLingua 系列)
  • 软压缩:把上下文编码成少量向量(Gist / ICAE / xRAG)
  • 与 KV 压缩正交:一个压输入长度,一个压已存 KV
  • 最受益场景:RAG 长文档、few-shot、长 system prompt

本文讲输入侧的 token 削减——在 prompt 进入模型前就把它变短。这区别于本章其他三种"压缩",边界见下表。

与其他"压缩"的区分

  • 注意力变体(稀疏/线性/SSM)改的是 attention 的计算复杂度 → 04-注意力机制变体
  • 架构层 KV 压缩(GQA/MQA/MLA)改的是每 token 的 KV 体积 → 05-KVCache 架构压缩
  • 推理层 KV 管理(量化/驱逐/offload)压的是已生成的 KV → 07-推理 - KV 管理
  • 本文:压的是输入 token 数本身,模型结构和 KV 机制都不动

为什么在输入侧压缩?

输入 token 数是 prefill 成本的直接自变量,砍输入比优化算/存更先一步。 attention 的 prefill 计算量随序列长度 $n$$O(n^2)$,KV 显存随 $n$ 线性增长(详见 02-第一性挑战)。把 $n$ 压到 $n'$,prefill 计算、KV 显存、API 按 token 计费三项同时下降,且对模型完全透明——不需要改权重、不需要换 attention 实现。

代价是多一道压缩开销 + 信息损失风险:压缩本身要花算力(用代理模型或编码器),删错 token 会丢关键信息。所以这类方法的核心权衡是压缩比 vs 信息保留 vs 压缩开销三者的平衡。

输入压缩分两条路线:保留原文 token 子集的硬压缩,和编码成连续向量的软压缩

硬压缩:删 token,留下的还是原文

硬压缩(hard / extractive)给每个输入单元打信息量分,删低分单元,产物仍是可读的 token 子序列,任何 LLM 直接接收。 打分依据是自信息(self-information,$-\log P(x)$)或困惑度(perplexity)——自信息低(即可预测)的 token 删掉对语义影响小。

方法打分机制压缩比性能(压缩比/损失)速度
Selective Context[1]自信息,phrase 粒度,LLaMA-7B/GPT-3 Curie 打分~2×BERTScore -0.02346 ms/段
LLMLingua[2]困惑度,粗-细两级迭代 + budget controller最高 20×GSM8K 20× 损 1.5pp;BBH 7× 损 13pp端到端 1.7-5.7× 加速
LongLLMLingua[3]question-aware 双阶段困惑度 $P(\text{doc}\mid\text{question})$ + 文档重排4×(RAG)NaturalQuestions +21.4%;LooGLE cost -94%计算量约 LLMLingua 的 2×
LLMLingua-2[4]判别式 encoder(XLM-RoBERTa)token 二分类,GPT-4 蒸馏标签~14×GSM8K 13× 损 1.1pp压缩快 3-6×,端到端 1.6-2.9×

@tbl-longctx-compress-hard 硬压缩方法对比:打分机制、压缩比、性能、速度

三个演进要点:

  • LLMLingua 是这族的奠基工作[2]:困惑度驱动的迭代压缩,配 budget controller 分配压缩预算。高压缩比下优于纯自信息的 Selective Context,但 CoT 类任务(GSM8K)比 BBH 类更耐压缩。
  • LongLLMLingua 是 RAG 专项增强[3]:用 $P(\text{doc}\mid\text{question})$ 的 question-aware 困惑度替代无条件困惑度。NaturalQuestions 4× 压缩下性能不降反升 21.4%——因为删掉无关文档反而减少了干扰。
  • LLMLingua-2 换了打分架构[4]:抛弃生成式困惑度,改用双向 encoder 做 token 二分类(标签由 GPT-4 蒸馏)。encoder 远快于 LLaMA-7B,压缩速度提升 3-6×,代价是最高压缩比受限(~14×)。适合对延迟敏感的生产 pipeline。

抽取式片段筛选是更粗的硬压缩。RECOMP[5] 分 extractive(选相关句子)和 abstractive(生成式摘要)两类,可把文档压到 6-28% token 保留而性能与全文相当,常作 token 级压缩前的粗筛。其中 abstractive(以 RECOMP-abstractive 为代表)用小模型生成摘要替代原文片段,压缩更激进,代价是摘要可能偏离原文(faithfulness 风险)。

软压缩:把上下文编码成少量向量

软压缩(soft / latent)训练一个编码器把上下文映射成少量连续向量,后续推理只条件化这些向量,不再重读原文。 压缩比远高于硬压缩,但产物是与压缩模型绑定的稠密向量,不可读、跨模型迁移成本高,且都需要训练。

方法机制压缩比需训练性能
Gist Tokens[6]改 attention mask,把 prompt 压进 1-10 个 gist token 的 KV最高 26×是(instruction FT)FLOPs -40%;1-token 版 win rate ~46-52%
AutoCompressor[7]分段,每段输出 50 个 summary vector,累积拼接40:1/段是(无监督 LM)长序列下 perplexity 持续下降
ICAE[8]LoRA encoder 压 ≤512 token 到 32-256 memory slot,冻结解码4-16×是(LoRA)4× 时 PPL +0.49;win+tie 79.2%;2.2-3.6× 加速
xRAG[9]复用检索的 document embedding,MLP bridge 映射成 1 个 token~175:1是(bridge,<0.5% 参数)Mixtral 6 任务均分 +9.7%(全文 RAG +8.0%);GFLOPs -3.53×

@tbl-longctx-compress-soft 软压缩方法对比:机制、压缩比、是否需训练、性能

关键差异在压缩粒度和绑定程度

  • Gist Tokens[6] 在 instruction 微调时改 attention mask,强迫模型把固定 prompt 压进少数 gist token 的 KV 激活。适合重复使用的固定 prompt,但每 token KV 激活约 1 MB,不适合大语料库存储。
  • AutoCompressor[7] 把长文档分段,每段产出固定数量 summary vector 并累积传递,用无监督 LM 目标训练,长上下文 perplexity 持续下降。
  • ICAE[8] 用轻量 LoRA encoder 压缩、冻结的 LLM 解码,4× 压缩下 perplexity 仅退化 0.49。
  • xRAG[9] 走极端:直接复用稠密检索已有的 document embedding,只训一个 <0.5% 参数的 MLP bridge 把它映射成单个 token,实现约 175:1 压缩,弱项是多步推理任务。

硬压缩、软压缩怎么选?和 KV 压缩是一回事吗?

输入压缩沿三个正交维度分类,且与 KV 压缩作用在不同阶段、可叠加。

分类维度:

  • 产物形态:硬压缩(离散 token,任意模型可接收)vs 软压缩(连续向量,与压缩模型绑定)。
  • 任务条件:task-aware(以 query 为条件打分,如 LongLLMLingua/RECOMP)vs task-agnostic(纯信息熵或通用蒸馏,如 LLMLingua-2/Selective Context)。task-aware 压缩比更高但需按任务调整。
  • 粒度:token 级(LLMLingua 系列)/ 句子级 extractive(RECOMP)/ 生成式 abstractive。

与 KV 压缩的边界是常见混淆点,二者作用阶段不同:

维度输入上下文压缩(本文)KV cache 压缩(05/07
作用阶段前向传播之前前向传播之中/之后
压什么输入 token 数 $n \to n'$已生成的 K/V 张量
降什么prefill 的 $O(n^2)$ 计算 + 输入计费decode 的显存与带宽
对模型完全透明(硬压缩)改架构(GQA/MLA)或改管理(量化/驱逐)

@tbl-longctx-compress-vs-kv 输入压缩与 KV 压缩的边界对比

两者正交,可叠加:先用输入压缩把 prompt 砍短,再对剩余 token 的 KV 做量化或驱逐。

什么场景用、代价是什么?

最受益的是输入里有大量低信息量内容的场景——RAG 检索结果、few-shot 示例、长 system prompt。

场景代表方法与收益
RAG 长文档LongLLMLingua[3] NaturalQuestions 4× 压缩 +21.4 EM、LooGLE cost -94%;RECOMP-Abstractive[5] 压到 4% token 而 PPL 几乎不变;xRAG[9] 175:1
长文档 QASelective Context[1] 削 50% token,BERTScore 仅降 0.023
Few-shot / ICLAutoCompressor[7] 把示例转 soft vector,准确率持平或升;LLMLingua-2[4] 2-5× 压缩带来 1.6-2.9× 端到端加速

@tbl-longctx-compress-usecase 输入压缩的典型场景与收益

代价有三类:

  • 压缩计算开销:硬压缩要跑代理模型/encoder 打分,软压缩要训练编码器;压缩本身的延迟需计入端到端。
  • 信息损失:高压缩比下硬压缩可能删掉关键 token(如 BBH 7× 压缩损 13pp),不适合需要精确回忆全文的任务。
  • 绑定与迁移:task-aware 硬压缩需按任务调整;软压缩产物与压缩模型强绑定,换目标模型要重训。

Takeaway

知识点核心结论
定位在前向传播前删输入 token,直接降 prefill $O(n^2)$ 与输入计费
硬压缩按困惑度/自信息删原文 token,产物可读、任意模型可接收(LLMLingua 系列、Selective Context)
软压缩训练编码器把上下文压成少量向量,压缩比高但与模型绑定(Gist/AutoCompressor/ICAE/xRAG)
task-aware以 query 为条件打分(LongLLMLingua)压缩比更高,RAG 场景甚至提升性能
与 KV 压缩正交:输入压缩压"输入长度",KV 压缩压"已存 KV",可叠加
最佳场景RAG 长文档、few-shot、长 system prompt 等低信息密度输入
主要代价压缩开销 + 高压缩比下的信息损失 + 软压缩的跨模型迁移成本

@tbl-longctx-compress-takeaway 全文要点

参考资料

  1. Li et al., Compressing Context to Enhance Inference Efficiency of Large Language Models (Selective Context), EMNLP 2023. https://arxiv.org/abs/2310.06201 自信息驱动的 phrase 粒度 token 删除,2× 压缩、BERTScore 降 0.023。
  2. Jiang et al., LLMLingua: Compressing Prompts for Accelerated Inference of Large Language Models, EMNLP 2023. https://arxiv.org/abs/2310.05736 困惑度驱动的粗-细两级压缩 + budget controller,最高 20× 压缩。
  3. Jiang et al., LongLLMLingua: Accelerating and Enhancing LLMs in Long Context Scenarios via Prompt Compression, ACL 2024. https://arxiv.org/abs/2310.06839 question-aware 双阶段压缩 + 文档重排,NQ 4× 压缩 +21.4%。
  4. Pan et al., LLMLingua-2: Data Distillation for Efficient and Faithful Task-Agnostic Prompt Compression, ACL 2024 Findings. https://arxiv.org/abs/2403.12968 判别式 encoder token 二分类,压缩速度提升 3-6×。
  5. Xu et al., RECOMP: Improving Retrieval-Augmented LMs with Compression and Selective Augmentation, ICLR 2024. https://arxiv.org/abs/2310.04408 extractive 与 abstractive 两类 RAG 压缩器,6-28% token 保留。
  6. Mu et al., Learning to Compress Prompts with Gist Tokens, NeurIPS 2023. https://arxiv.org/abs/2304.08467 改 attention mask 把 prompt 压进 1-10 个 gist token,最高 26× 压缩、FLOPs -40%。
  7. Chevalier et al., Adapting Language Models to Compress Contexts (AutoCompressor), EMNLP 2023. https://arxiv.org/abs/2305.14788 每段 50 个 summary vector 累积拼接,40:1 压缩。
  8. Ge et al., In-Context Autoencoder for Context Compression in a Large Language Model (ICAE), ICLR 2024. https://arxiv.org/abs/2307.06945 LoRA encoder 压到 32-256 memory slot,4× 压缩 PPL +0.49、2.2-3.6× 加速。
  9. Cheng et al., xRAG: Extreme Context Compression for Retrieval-augmented Generation with One Token, NeurIPS 2024. https://arxiv.org/abs/2405.13792 复用检索 embedding + MLP bridge 压成单 token,~175:1 压缩、GFLOPs -3.53×。