BEAVER:不用训练也能把12万token压到3000,还比LLMLingua快26倍?
论文标题:BEAVER: A Training-Free Hierarchical Prompt Compression Method via Structure-Aware Page Selection
作者:Zhengpei Hu, Kai Li, Dapeng Fu, Chang Zeng, Yue Li, Yuanhao Tang, Jianqiang Huang
论文链接:https://arxiv.org/abs/2603.19635
代码链接:https://cslikai.cn/BEAVER/
🎯 核心摘要
大模型处理长文档有两个老大难问题:慢——自注意力 \(O(L^2)\) 复杂度导致128k token的预填充延迟高得离谱;笨——塞太多上下文进去反而"迷路"(Lost in the Middle效应),关键信息被淹没。现有的提示压缩方法要么靠困惑度逐token砍(砍完语法碎片化,上下文断裂),要么靠训练专用编码器(换个模型就得重训)。
BEAVER 换了个思路:不在token级别动刀,而是把长文档切成"页",用双路池化把每页压成一个向量,再用语义+词法混合打分选出最重要的页面。整个过程零训练、零额外参数,128k上下文压缩延迟仅1.2秒——比 LongLLMLingua 快 26.4倍。在 RULER 多针检索任务上,BEAVER 拿到 83.7 分,几乎是 LLMLingua-2(47.9)的两倍。
定位上看,这不是什么"颠覆性突破",而是一个工程设计精巧的免训练方案,核心贡献在于把"逐token筛选"升级为"结构化页面选择",用张量操作替代串行计算,在速度和检索准确率上取得了不错的平衡。
📖 问题出在哪:现有压缩方法的三种病
假设你是一个律师,手上有一份300页的合同文档,客户问你:"第127条里关于iPhone 17 Pro的促销价是多少?" 你不可能逐字读完300页再回答——你得先快速定位到相关段落,然后仔细阅读。
大模型面临同样的问题。把12万token的文档全塞给GPT,不仅贵、慢,效果可能还不如只喂相关段落。于是就有了"提示压缩"这个方向。但现有方案各有各的毛病:

图1:三种压缩范式的效果对比。注意看(A)中LongLLMLingua把"20%"压缩成了"a2%"——语法被破坏后模型直接答错了;(B)中LLMLingua-2保留了关键词但丢失了"普通客户需加价20%"的逻辑链;而(C)中BEAVER保持了完整句子结构,模型正确算出了$899 + 20% = $1,078.80
三种范式的核心区别:
| 范式 | 代表方法 | 原理 | 核心问题 |
|---|---|---|---|
| 无监督统计 | Selective-Context, LongLLMLingua | 用困惑度/自信息量给每个token打分,砍掉低分token | 逐token删除破坏语法结构,压缩后文本碎片化 |
| 有监督学习 | LLMLingua, LLMLingua-2 | 训练专用编码器做token级分类(留/删) | 需要训练数据,换模型/领域迁移性差 |
| 免训练结构化 | BEAVER | 页面级选择 + 句子边界平滑 | 粒度较粗,可能保留少量冗余 |
🏗️ 方法详解:BEAVER 的三板斧
BEAVER 的名字来自"河狸"——一种擅长用树枝搭建精密水坝的动物。类比过来,BEAVER 把长文档当作一条河流,不是逐滴过滤(token级),而是用结构化的"坝体"(页面)来拦截和选择关键水段。
整体架构由三个模块组成:Segmenter(分段器)→ PageEncoder(页面编码器)→ QueryPlanner(查询规划器)。

图2:BEAVER 完整流程。上半部分是编码过程(Segmenter + PageEncoder),下半部分是选择过程(QueryPlanner + Sentence Smoother)。注意颜色编码:黄色=Anchor页(开头元数据)、红色=Flow页(查询前的连续窗口)、橙色=Flash页(远距离高分页面)
第一板斧:Segmenter——把token序列变成二维"书页"
传统方法把长文档看成一维token流,逐个打分。BEAVER 的做法更接近人类阅读习惯——先翻书,按自然段落分页。
具体来说,Segmenter 以换行符为天然分隔符,用贪心策略将连续段落打包成固定容量 \(M\) 的"页面"。如果某个段落超过 \(M\) 个token,就拆分到多个页面。最终输出一个二维页面索引矩阵 \(\mathbf{P}\),空位用 \(-1\) 填充。
这一步的关键参数是页面容量 \(M\)。消融实验显示 \(M=64\) 是最优值——太小(\(M=32\))会切碎段落,太大(\(M=128\))会把不相关内容混在同一页,分辨率下降。
第二板斧:PageEncoder——双路池化捕获全局语义和局部特征
每一页的token嵌入需要被压缩成单个页面向量。BEAVER 设计了双路池化策略,分别捕获两种不同类型的信息:
路径一:加权均值池化(捕获全局语义)
不是简单求平均,而是用 In-Context ITF(逆词频) 加权:
直觉解释:在当前文档中出现频率越低的词,信息量越大,权重越高。这跟信息检索中的经典 TF-IDF 思想一脉相承,但区别在于它是上下文内统计(in-context),而非全局语料库统计。
路径二:最大池化(捕获局部显著特征)
其中 \(B_{i,j}\) 是有效位掩码,\(\beta\) 是一个很小的负数,防止padding位被选中。Max Pooling 的作用是捕获页面中最突出的局部特征——即使一页中只有一个关键实体名,它也能被保留下来。
最终用线性融合:\(\hat{\mathbf{p}}_i = \gamma \boldsymbol{\mu}_i + (1-\gamma) \mathbf{m}_i\),其中 \(\gamma=0.7\),即全局语义占主导。
为什么需要双路?想象一页合同中99%是格式化模板,只有一句"赔偿金额不超过500万"是关键信息。均值池化会被大量模板文本稀释,Max Pooling 则能抓住这个异常突出的特征。两者互补。
第三板斧:QueryPlanner——语义+词法+结构先验的三重选择
有了每页的向量表示,下一步是根据用户查询选出最相关的页面。QueryPlanner 设计了混合打分机制:
语义得分(向量空间匹配):
词法得分(精确关键词匹配):
混合得分:\(s_{mix}(i) = \lambda \cdot s_{sem}(i) + (1-\lambda) \cdot s_{lex}(i)\),其中 \(\lambda=0.7\)。
为什么要混合?消融实验给出了明确答案:纯语义匹配(Semantic Only)掉 6.0 分,纯词法匹配(Lexical Only)掉 3.1 分。语义匹配擅长捕捉"意思相近但用词不同"的段落,词法匹配则在精确实体检索(如具体人名、数字)上更靠谱。
除了按分数排名,BEAVER 还引入了三种结构先验(Structural Priors)来保证选择的鲁棒性:
| 策略 | 说明 | 消融掉的影响 |
|---|---|---|
| Anchor | 固定选取开头 \(k_{anc}=4\) 页 | 保留文档标题、元信息等全局上下文。去掉后暴跌 -21.7 分 |
| Flow | 查询前的连续 \(w_{flow}=4\) 页窗口 | 类似"工作记忆",保留查询附近的上下文。去掉后跌 -8.1 分 |
| Flash | 按混合分数选Top-k远距离页面 | 捕获散落在文档各处的关键证据。去掉后跌 -2.7 分 |
Anchor 的影响最大——这说明长文档的开头往往包含了理解全文所必需的元信息(目录、摘要、背景说明等),直接砍掉开头是灾难性的。
句子级平滑:压缩后的"缝合"
页面选中后,BEAVER 还做了一步关键操作:将选中区域向外扩展到最近的句子边界。

图3:句子级平滑。被选中的页面区域(橙色框)自动扩展到完整句子,避免出现"I never said"这样的断头句
这个操作看起来简单,但消融结果显示它贡献了 1.6 分的提升——因为它保证了压缩后的文本在语法上是完整的,LLM 不用对着碎片化的文本做"脑补"。
🧪 实验结果:四个基准的全面评测
实验设置
- 后端LLM:gpt-3.5-turbo-instruct
- 嵌入模型:Qwen3-8B embeddings
- 压缩预算:2,000 / 3,000 token
- 四大基准:LongBench(4,750样本)、ZeroSCROLLS(4,378样本)、RULER(13任务,4k-128k合成上下文)、L-Eval(2,197样本)
主实验:LongBench + ZeroSCROLLS
| 方法 | 类型 | SingleDoc | MultiDoc | Summ. | FewShot | Synth. | Code | AVG | 延迟(s) | 加速比 |
|---|---|---|---|---|---|---|---|---|---|---|
| Selective-Context | 无监督 | 16.2 | 34.8 | 24.4 | 15.7 | 8.4 | 49.2 | 24.8 | 47.1 | 0.3× |
| LongLLMLingua | 无监督 | 39.0 | 42.2 | 27.4 | 69.3 | 53.8 | 56.6 | 48.0 | 6.1 | 2.6× |
| LLMLingua | 有监督 | 22.4 | 32.1 | 24.5 | 61.2 | 10.4 | 56.8 | 34.6 | 5.9 | 2.6× |
| LLMLingua-2 | 有监督 | 29.8 | 33.1 | 25.3 | 66.4 | 21.3 | 58.9 | 39.1 | 3.7 | 4.2× |
| BEAVER | 免训练 | 40.7 | 37.6 | 22.1 | 57.4 | 38.2 | 57.1 | 42.2 | 3.0 | 5.2× |
| 原始Prompt(无压缩) | - | 39.7 | 38.7 | 26.5 | 67.0 | 37.8 | 54.2 | 44.0 | 15.6 | - |
几个值得关注的点:
- SingleDoc QA 是 BEAVER 的强项:40.7 分甚至超过了无压缩的原始 Prompt(39.7),说明压缩掉噪音信息反而有利于模型聚焦关键内容
- FewShot 是短板:57.4 vs LongLLMLingua 的 69.3,掉了12分。页面级压缩在需要保留完整 few-shot 示例时粒度太粗
- Summarization 也偏弱:22.1 分,因为摘要任务需要全局信息覆盖,而 BEAVER 的选择策略天然倾向于局部高相关段落
RULER:多针检索的碾压性优势
| 方法 | S-1 | S-2 | S-3 | Key-1 | Key-2 | Key-3 | Val | Qry | VT | FWE | QA-1 | QA-2 | AVG |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| LLMLingua | 100.0 | 5.0 | 4.0 | 7.0 | 6.0 | 12.0 | 6.0 | 4.8 | 59.4 | 90.7 | 15.0 | 37.0 | 28.9 |
| LongLLMLingua | 100.0 | 6.0 | 4.0 | 9.0 | 2.0 | 3.0 | 7.8 | 7.3 | 60.4 | 91.3 | 19.0 | 36.0 | 28.8 |
| LLMLingua-2 | 27.0 | 86.0 | 27.0 | 72.0 | 11.0 | 2.0 | 80.3 | 82.3 | 3.4 | 95.3 | 45.0 | 43.0 | 47.9 |
| BEAVER | 100.0 | 100.0 | 100.0 | 99.0 | 88.0 | 41.0 | 99.8 | 99.8 | 78.2 | 93.7 | 50.0 | 55.0 | 83.7 |
RULER 是合成的"大海捞针"任务,BEAVER 在这里的表现堪称碾压:
- 单针检索(S-1/S-2/S-3)全部满分或接近满分
- 多键检索(Key-1/Key-2)从 LLMLingua-2 的 72.0/11.0 飙到 99.0/88.0
- 整体平均 83.7 vs 次优 47.9,领先近 36 分
这个结果合理吗?RULER 是合成数据,"针"的位置和内容都是精心设计的。页面级选择对这类"特定信息精准检索"天然友好——目标信息集中在少数页面,选对页面就等于全选对。但在真实场景中,信息分布往往更分散,优势不会这么极端。
L-Eval:跨域泛化
| 方法 | Coursera | QA | QuALITY | SFictionQA | TPO | LongFQA | Legal | AVG |
|---|---|---|---|---|---|---|---|---|
| LLMLingua | 58.9 | 50.0 | 60.9 | 65.1 | 34.3 | 21.9 | — | 48.5 |
| LongLLMLingua | 62.2 | 51.0 | 65.6 | 71.0 | 37.7 | 21.3 | — | 51.5 |
| LLMLingua-2 | 64.4 | 55.0 | 66.4 | 73.2 | 45.0 | 23.7 | — | 54.6 |
| BEAVER | 64.4 | 56.9 | 76.6 | 74.0 | 44.7 | 28.8 | — | 57.6 |
在 L-Eval 上领先 LLMLingua-2 约 3 分。特别是在 SFictionQA(科幻小说问答)上 76.6 vs 66.4,领先 10 分——长篇小说的章节结构与 BEAVER 的页面划分天然契合。
效率对比:线性增长 vs 超线性膨胀

图4:延迟对比。横轴是上下文长度(16k到128k),纵轴是压缩延迟(毫秒)。BEAVER 在128k时延迟仅约1200ms,而 LongLLMLingua 需要约31700ms——差距达26.4倍
BEAVER 的延迟优势来源于操作全是张量化的:嵌入提取、池化、余弦相似度计算都可以高效并行。而 LongLLMLingua 需要逐token计算困惑度,这是串行的自回归过程,上下文越长越慢。
🔬 消融实验:每个组件都在干什么
| 配置 | S-Doc | M-Doc | Avg. | Δ |
|---|---|---|---|---|
| BEAVER(完整) | 40.7 | 37.6 | 39.2 | — |
| 页面大小 M=32 | 38.5 | 36.3 | 37.4 | -1.8 |
| 页面大小 M=128 | 37.5 | 36.1 | 36.8 | -2.4 |
| 去掉 Max Pooling | 39.2 | 33.7 | 36.5 | -2.7 |
| 去掉 Mean Pooling | 39.2 | 34.0 | 36.6 | -2.6 |
| 去掉多token查询 | 38.3 | 34.3 | 36.3 | -2.9 |
| 换用 LLaMA3 嵌入 | 39.4 | 38.2 | 38.8 | -0.3 |
| 去掉 ITF 加权 | 35.7 | 37.3 | 36.5 | -2.7 |
| 仅语义匹配 | 36.5 | 29.9 | 33.2 | -6.0 |
| 仅词法匹配 | 38.8 | 33.4 | 36.1 | -3.1 |
| 去掉句子平滑 | 40.4 | 34.7 | 37.6 | -1.6 |
| 仅 Flow 策略 | 33.3 | 28.8 | 31.1 | -8.1 |
| 仅 Anchor 策略 | 15.0 | 20.0 | 17.5 | -21.7 |
| 仅 Flash 策略 | 39.7 | 33.2 | 36.4 | -2.7 |
几个关键发现:
- 换嵌入模型影响极小(LLaMA3 只掉 0.3 分),说明 BEAVER 对嵌入模型不敏感,跨模型迁移能力强
- 仅 Anchor 策略暴跌 21.7 分——光保留开头而不根据查询选择内容,等于瞎压
- 仅语义掉 6 分 是所有 QueryPlanner 消融中最严重的,说明词法精确匹配是不可或缺的补充
- 双路池化缺一不可,各掉 2.6-2.7 分,验证了 Mean+Max 互补的设计直觉
跨模型可扩展性

图5:RULER 上的性能保持率(相对于不压缩的Dense上界)。BEAVER 在 Qwen3-0.6B 上竟然保持了 98% 的性能——小模型受压缩影响反而最小,这有点反直觉
0.6B 模型保持率最高(98%),可能的解释是:小模型本身处理长上下文能力弱,Dense 性能就不高,压缩后反而通过去除噪音提升了信噪比。
🤔 批判性分析:BEAVER 的边界在哪
优势确实明显
- 零训练成本:不需要准备训练数据、不需要微调,拿来就用。这在实际工程部署中价值很大
- 速度碾压:128k 上下文 26.4 倍加速,且延迟线性增长
- 检索能力突出:在需要"大海捞针"的场景下效果极好
但也有几个需要冷静看待的问题
问题一:RULER 的高分有多少含金量?
RULER 是合成基准,"针"的分布相对规律。83.7 的高分在一定程度上是因为页面级选择与"信息集中在少数页面"的合成场景高度匹配。在真实文档中——信息散落在大量段落的各个角落、需要多跳推理来关联——页面级粒度可能不够精细。论文自己也承认了这个局限:"retrieval mechanism struggles with deep multi-hop reasoning...where supporting evidence shares little direct overlap"。
问题二:FewShot 和 Summarization 的掉分不容忽视
LongBench 上 FewShot 掉了近 12 分(vs LongLLMLingua)、Summarization 掉了 5 分。这两类任务的共同特点是需要广覆盖——few-shot 需要完整保留示例,摘要需要全局信息。页面级选择天然倾向于"精准但局部",在需要"全面但宽泛"的场景下会吃亏。
问题三:超参数敏感性
\(M=64\)、\(\gamma=0.7\)、\(\lambda=0.7\)、\(k_{anc}=4\)、\(w_{flow}=4\) ——这些超参数是在实验中调出来的,论文承认"requires manual adjustment across drastically different domains"。免训练不代表免调参。
问题四:对 LLMLingua 系列的比较是否充分?
LLMLingua-2 虽然需要训练,但训练一次后可以跨任务使用。而 BEAVER 的免训练优势在面对固定领域部署时可能并不突出——如果你就是做法律文档问答,花一次训练成本换更高的准确率可能更划算。
💡 工程启示
-
"结构化"是长文档压缩的正确方向:比起逐token打分,利用文档的自然结构(段落、章节、页面)做选择,既能保持语义完整性,又能用张量操作加速
-
语义+词法混合检索的普适性:这个思路在 RAG 系统中同样适用。单纯的向量检索在精确实体匹配上容易翻车,加入 BM25 风格的词法匹配能显著提升鲁棒性
-
Anchor + Flow + Flash 的选择策略可借鉴:保留文档头部元信息(Anchor)、查询附近上下文(Flow)、全局高分段落(Flash)——这种三路选择策略可以直接应用到 RAG 的 chunk 重排序中
-
ITF 加权的轻量替代:相比传统的 TF-IDF 需要全局语料库统计,In-Context ITF 只需要当前文档的词频就能工作,在实时系统中更实用
📝 总结
BEAVER 把提示压缩从"逐token删删删"升级到了"结构化页面选择",核心贡献是一套免训练、张量化、可并行的压缩框架。在检索类任务上效果拔群(RULER 83.7 分),速度快了一个数量级(26.4倍),跨模型泛化能力也不错。
但这不是万能药。在需要广覆盖的 few-shot 和摘要任务上有明显短板,多跳推理场景下的表现也有待验证。它更适合"长文档 + 精准检索" 这类场景——比如合同审查、技术文档问答、知识库搜索——而非通用的长上下文压缩方案。
从方法论层面看,BEAVER 验证了一个有价值的设计思想:在token和document之间存在一个更合适的压缩粒度——"页面",它既保留了结构完整性,又具备足够的语义区分度。这个思路值得在更多场景中探索。
📊 附录:三个真实案例对比
以下是论文提供的三个详细案例,直观展示了不同压缩方法的差异。
案例1:QA任务——iPhone 15 Pro 定价查询

案例1:查询"普通用户购买iPhone 15 Pro (256GB)的价格"。正确答案是\(1,078.80(\)899 + 20%加价)。只有BEAVER通过保留完整的加价规则和价格信息,让LLM得出了正确答案
案例2:摘要任务——政府报告总结

案例2:总结众议院规则报告。BEAVER保持了"72小时可用性要求"、"豁免条件"和"两个立法日"等复杂程序性逻辑的完整性
案例3:Few-Shot 数学推理

案例3:包含15个数学Word Problem的Few-Shot Prompt。BEAVER 保留了完整的 Chain-of-Thought 示例块("Let's think step by step..."),LLM 通过真正的上下文学习(而非零样本猜测)得出正确答案
觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注公众号:机器懂语言