三十六:长上下文提示压缩自测题答案¶
来源:http://mp.weixin.qq.com/s?__biz=MzYyNTk3Njg1NA==&mid=2247484460&idx=1&sn=bfaaba08159df717c6c7b082d793a5fe&chksm=f01eb755c7693e4382f1c53838b041826c0f4b7e932e1b9b92b5fe285a72d60afa60ec620944#rd
参考资料¶
-
Selective Context paper:https://arxiv.org/abs/2310.06201
-
LLMLingua paper:https://arxiv.org/abs/2310.05736
-
LongLLMLingua paper:https://arxiv.org/abs/2310.06839
-
LLMLingua project:https://github.com/microsoft/LLMLingua
一、基础概念¶
1. 提示压缩解决的核心问题是什么?¶
答案: 核心问题是 prompt 太长导致 token 成本高、延迟高、上下文噪声大、关键信息被稀释。提示压缩在送入目标 LLM 前删除低价值内容,在预算内保留任务所需信息。
2. 提示压缩和摘要有什么区别?¶
答案: 摘要通常会改写文本,生成新的表达,可能引入幻觉或丢失细节。提示压缩更偏删除和保留原文 token/片段,目标是减少 token 同时尽量保持原证据。
3. 提示压缩和 RAG 是替代关系还是互补关系?¶
答案: 是互补关系。RAG 负责从大语料中找候选证据;提示压缩负责在候选证据过多或过长时进一步减少冗余 token。常见流程是 retrieve -> rerank -> compress -> answer。
4. 长上下文模型已经支持很多 token,为什么仍然需要提示压缩?¶
答案: 因为长窗口并不等于便宜、快速、无噪声。上下文越长,成本越高,注意力越容易被无关信息干扰,lost-in-the-middle 也可能让模型忽略中间证据。压缩能降低噪声和成本。
5. 什么是 compression ratio 和 keep rate?¶
答案: compression_ratio = original_tokens / compressed_tokens,表示压缩了多少倍。keep_rate = compressed_tokens / original_tokens,表示保留比例。例如 10000 token 压到 2500,压缩比是 4,保留率是 25%。
6. 哪些 prompt 部分通常不应该压缩?¶
答案: 通常不压缩 system prompt、安全规则、用户问题、输出格式要求、工具调用 schema、关键引用 ID 和必须完整遵守的约束。
二、Selective Context¶
7. Selective Context 的核心思想是什么?¶
答案: 它认为上下文中不同 token/句子信息量不同,可以根据语言模型估计的信息量删除低信息内容,保留高信息内容。
8. 什么是 token 的 self-information?¶
答案: Self-information 可写为:
越不可预测的 token,自信息越高。9. 为什么低信息量 token 可以优先删除?¶
答案: 因为低信息量 token 往往是功能词、重复表达、套话或容易从上下文恢复的内容,删除它们对任务信息损失较小。
10. Selective Context 的优点是什么?¶
答案: 优点是简单、通用、无需目标大模型参与,能在不大幅改写文本的情况下减少上下文长度。
11. Selective Context 的局限是什么?¶
答案: 局限是不一定考虑当前问题;可能保留罕见但无关的 token,也可能删除常见但关键的否定词、条件词或格式符号。
12. 为什么高 self-information 不一定等于对当前问题有用?¶
答案: 因为 self-information 衡量的是“罕见/不可预测”,不是“对当前问题有用”。一个罕见实体可能与问题无关,而一个常见词“不”可能决定答案方向。
三、LLMLingua¶
13. LLMLingua 的核心目标是什么?¶
答案: 目标是用较小语言模型压缩 prompt,使目标大模型在更少输入 token 下保持任务效果,从而降低成本和延迟。
14. 为什么 LLMLingua 使用小模型作为 compressor?¶
答案: 小模型推理便宜,适合作为前置 compressor。用小模型做重要性估计和删除决策,可以节省目标大模型的大量输入成本。
15. LLMLingua 的高层流程包括哪些模块?¶
答案: 高层流程包括 budget controller、粗粒度压缩、token-level iterative compression、生成压缩 prompt,然后送入 target LLM。
16. budget controller 的作用是什么?¶
答案: Budget controller 决定每部分 prompt 应该压到多少 token 或保留多少比例,避免压缩过度或预算分配不合理。
17. token-level iterative compression 的直觉是什么?¶
答案: 它不是一次性删大量 token,而是根据重要性逐步删除低价值 token,尽量减少压缩对语义和任务指令的破坏。
18. 小模型 compressor 和 target LLM 不一致会带来什么风险?¶
答案: 小模型认为不重要的 token,目标大模型可能依赖;小模型的语言偏好、领域知识和 tokenization 也可能不同,导致关键约束被误删。
19. LLMLingua 适合哪些场景?¶
答案: 适合长 prompt、few-shot 示例、RAG 证据冗余、对话历史压缩、成本敏感的批量推理。
20. LLMLingua 不适合或需要谨慎使用哪些场景?¶
答案: 法律、医疗、金融合规、代码、数学证明、表格、数字密集文本、工具 schema 和安全约束都要谨慎,必要时设置不可压缩区域。
四、LongLLMLingua¶
21. LongLLMLingua 相比 LLMLingua 主要改进在哪里?¶
答案: LongLLMLingua 面向长上下文场景,更强调 question-aware compression,即根据当前问题保留真正有助于回答的证据,而不是只按通用信息量压缩。
22. 什么是 question-aware compression?¶
答案: Question-aware compression 是把用户问题作为条件,评估文档、句子和 token 对回答该问题的有用性。它关注相关性和证据价值。
23. 为什么 question-aware 对长文档问答特别重要?¶
答案: 长文档中有很多信息量高但与问题无关的内容。如果不看问题,压缩器可能保留噪声、删掉答案证据。Question-aware 能把预算集中到与问题相关的证据上。
24. LongLLMLingua 的 coarse-to-fine 流程是什么?¶
答案: 流程是:先粗粒度筛选文档或段落,再筛选句子,最后做 token 级压缩。必要时保留或调整关键证据位置,再组成最终 prompt。
25. 文档级、句子级、token 级压缩分别解决什么问题?¶
答案: 文档级降低候选数量;句子级保留可能含答案的最小语义单元;token 级删除冗余词并压到预算内。三层结合能兼顾效率和精度。
26. LongLLMLingua 如何缓解 lost-in-the-middle?¶
答案: 它通过优先保留和问题相关的证据、减少无关上下文、必要时突出或重排关键片段,降低关键证据被长文本淹没的概率。
27. 在 RAG 系统中,LongLLMLingua 应该放在 rerank 前还是 rerank 后?为什么?¶
答案: 通常放在 rerank 后。先 rerank 可以把最可能相关的证据排前,减少压缩器处理的噪声;再压缩能在较高质量候选中保留关键 token。若先压缩再 rerank,可能提前删掉排序需要的信息。
28. LongLLMLingua 压缩时为什么要保留 citation id、标题和页码?¶
答案: 因为最终答案需要可追溯证据。压缩掉 citation id、标题、页码后,模型可能无法正确引用来源,也难以让用户核验答案。
五、评估与工程风险¶
29. 提示压缩有哪些常见失败模式?¶
答案: 常见失败包括删除否定词、实体、数字、条件、引用 ID;破坏表格列关系;破坏代码语义;删除输出格式;过度压缩导致语法碎片化;保留无关高信息噪声。
30. 为什么否定词、数字、实体、条件词不能轻易删除?¶
答案: 这些词往往短但决定语义。比如“不允许”和“允许”只差一个字,日期和金额决定事实,实体决定答案对象,条件词决定适用范围。误删会导致高置信错误。
31. 压缩表格和代码有什么特殊风险?¶
答案: 表格依赖行列对齐,删除列名或单元格会错配。代码依赖缩进、括号、变量和顺序,删除少量 token 就可能改变程序语义或让代码不可读。
32. 如何设计提示压缩的离线评估实验?¶
答案: 固定测试集和目标 LLM,比较原始 prompt、Selective Context、LLMLingua、LongLLMLingua。记录压缩比、token 成本、延迟、答案正确率、引用正确率、忠实性和失败样例。
33. 除了答案正确率,还应评估哪些指标?¶
答案: 还应评估 compression ratio、keep rate、成本下降、P50/P95 延迟、faithfulness、citation accuracy、关键信息保留率、格式遵循率和人工偏好。
34. 如果压缩率提升但答案质量下降,你会如何调参?¶
答案: 降低压缩比,提高保留率;设置不可压缩区域;加强 question-aware;先 rerank 再压缩;保留句子级完整性;对数字、否定、实体、引用 ID 加规则保护;按任务类型分配预算。
35. 如何为不同 prompt 区域分配压缩预算?¶
答案: 可以分区预算:system、safety、question、format 0 压缩;工具 schema 0 或低压缩;RAG evidence 高压缩;few-shot 示例中压缩;对话寒暄高压缩;关键证据低压缩。
36. 请写一个 RAG + LongLLMLingua 的生产流程。¶
答案: 生产流程:
user query
-> retrieve top-n
-> rerank top-k
-> protect instruction/question/citation metadata
-> LongLLMLingua question-aware compression
-> assemble final prompt
-> target LLM answer
-> verify citations and faithfulness
37. 请用一段面试表达完整解释 LongLLMLingua。¶
答案: 示例表达:
LongLLMLingua 是面向长上下文的提示压缩方法。LLMLingua 用小模型估计 prompt 中 token 的重要性并按预算压缩,LongLLMLingua 进一步引入 question-aware 思路,根据当前问题判断哪些文档、句子和 token 对回答最有价值。它通常采用 coarse-to-fine 流程,先粗筛文档或句子,再做 token 级压缩。它能减少 token 成本、降低噪声,并缓解 lost-in-the-middle。但压缩可能误删否定、数字、实体或引用信息,所以要用答案质量、忠实性和引用正确率一起评估。
38. 如果压缩后模型引用了错误证据,可能是什么原因?¶
答案: 可能原因:citation id 被删或错位;压缩破坏了证据与来源的对应关系;关键证据被删,只剩相似但不支持答案的片段;RAG 本身召回或 rerank 错误;模型在压缩后的碎片上下文中错误归因。
预览时标签不可点
<div class="