发现于中:通过校准位置注意力偏差提升长上下文 RAG
自从写了关于 Liu 等人原始发现的日志以来,我一直在思考“迷失在中部”(lost-in-the-middle)的问题:给大语言模型(LLM)传递长上下文,它会非常稳定地忽略埋在中间的证据。《发现于中:通过校准位置注意力偏差提升长上下文利用率》("Found in the Middle: Calibrating Positional Attention Bias Improves Long Context Utilization",Hsieh 等人,ACL Findings 2024, arXiv:2406.16008)提供了一个我见过的最直接且实用的解决方案:一种无需训练的推理时校准方法,通过从模型的注意力权重中减去位置偏差,可以恢复高达 15 个百分点的 RAG 准确率。
论文解读
Hsieh 等人从一个诊断性观察开始:即使是经过长上下文训练的大语言模型,也表现出持久的 U 型注意力模式。输入开头和结尾的标记(Tokens)无论是否相关,都会获得不成比例的高 关注度,而中间的标记则被系统性地低估。作者从实证角度将此现象与“迷失在中部”的准确率下降联系起来,而不是将其视为一个独立的现象。
他们的修复方案在概念上非常优雅。他们将注意力分解为两个叠加部分:相关性(我们需要的)和位置偏差(我们不需要的)。为了分离偏差项,他们在每个位置向相同的上下文传递一个“虚拟”(dummy)文档——即无信息的填充内容,并记录由此产生的注意力分布。该虚拟文档的注意力近似于纯粹的位置先验。从真实注意力得分中减去它,剩下的残差就能更好地反映真实的相关性:
校准注意力 = Attn(document, k) − Attn(dummy, k)
然后,在最终答案生成步骤之前,使用重新缩放的得分对检索到的文档进行重新排序或重新加权。至关重要的一点是,这不需要任何训练。校准在推理时应用于最后 16 个解码器层和所有注意力头。成本是增加 O(K) 次前向传递,其中 K 是检索到的文档数量——虽然开销不小,但可以预见。
核心观点
- U 型注意力偏差是模型架构固有的,即使在明确使用长上下文目标训练的模型中依然存在。
- 在相同的检索上下文中传递虚拟(空/噪声)文档可以隔离位置先验;减去它可以在不进行任何微调的情况下消除偏差。
- 在 NaturalQuestion 数据集上(K=20,标准文档放在中间),校准后的 Recall@3 从 20.52% 跃升至 68.32%;在 K=10 时,从 36.38% 提升至 74.27%。
- 当标准文档位于上下文中部时,端到端 QA 准确率提高了 6-15 个百分点;在 24 个实验配置中的 22 个中都有所改善。
- 该方法优于六个基准方案:原始注意力(vanilla attention)、查询生成排序(query-generation ranking)、相关性生成提示(relevance-generation prompting)、注意力排序(attention sorting, Peysakhovich & Lerer 2023)、提示词重排序(prompt reordering)以及 LongLLMLingua-rk。
- 该方法在 NaturalQuestion(基于维基百科的 2,655 个真实查询)和 SynthWiki(990 个由 GPT-4 生成的合成条目)上进行了评估。
哪些观点站得住脚,哪些还有待商榷
核心结果非常惊人,我相信它是可信的。对于位于上下文中间的标准文档,Recall@3 出现 20.52%→68.32% 的差距,这并不是那种在审查下会消失的数字——它衡量的是注意力分布方式中真实存在的东西。无需训练的设计是一个真正的实践优势:你可以将其应用在任何现有的 RAG 流水线上,而无需触碰模型权重。
即便如此,我也有一些保留意见。首先,“虚拟文档”方法假设位置偏差在大致位置上是可分离且可叠加的——这是一种线性分解,作者自己也指出这可能过于简化。真实的注意力偏差可能会以非线性的方式与内容相互作用。其次,O(K) 的额外前向传递被评价为“可接受”,但从未针对延迟或成本进行基准测试。在 K=20 检索量的生产系统中,你每运行一个查询就要执行 21 次前向传递,而不是 1 次。对于处理数百个交易的 Beancount 代理来说,这个倍数至关重要。
第三——这也是最有趣的限制——作者指 出位置偏差在某些任务中实际上可能是有用的。例如,近因偏差(Recency bias)可能是让模型正确加权近期账目分录而非旧分录的原因。不分青红皂白地消除偏差可能会损害位置作为有效信号的任务。这一点得到了承认,但未进行研究。
最后,实验使用了 NaturalQuestion 和合成数据集。金融领域的特定文档——密集的表格、跨年度的申报文件、具有重复结构的账目分录——与开放领域的维基百科段落非常不同。在声称这种校准适用于金融 RAG 之前,需要在这些分布上进行验证。
为什么这对金融 AI 很重要
直接联系非常明确:自 DocFinQA 以来的每篇日志都在围绕同一个问题。当 Beancount 代理检索 20 条相关的账目分录来回答“根据银行对账单核对三月账目”之类的问题时,检索窗口中间的分录所获得的注意力系统性地低于上下文顶部和底部的分录。这不是检索失败——而是生成侧的失败,无论如何改进检索排序都无法修复。
“发现于中”校准是一种看似合理的缓解方案,它不需要对底层模型进行重新训练,并且可以直接应用于任何账目 QA 流水线的生成步骤。O(K) 的成本担忧是现实存在的,但尚在可控范围内——对于中等规模的模型,20 个文档的检索窗口仍在实际应用范围内。在部署它之前,我想看到的是在 Beancount 结构化数据上的特定验证:位置校正是有助于统一性能,还是会无意中抑制让近期交易比旧交易更可靠的近因信号?
更广泛的原理——即注意力机制会独立于内容相关性编码位置 先验,且这些先验可以在不重新训练的情况下被校准消除——是值得记住的。它为其他偏差的类似校准打开了大门:Token 频率偏差、输入长度归一化、生成中的冗余偏差。
延伸阅读
- "Mitigate Position Bias in LLMs via Scaling a Single Hidden States Channel" (arXiv:2406.02536, ACL Findings 2025) —— 建议缩放单个隐藏状态维度,而不是减去注意力得分;值得直接与“发现于中”的方法进行比较。
- "Large Language Models for Anomaly and Out-of-Distribution Detection: A Survey" (arXiv:2409.01980, NAACL 2025) —— 阅读列表中的下一篇;将 AnoLLM、CausalTAD 和 AD-LLM 等研究串联成一个统一的分类体系。
- Liu et al., "Lost in the Middle: How Language Models Use Long Contexts" (arXiv:2307.03172, TACL 2023) —— “发现于中”所响应的原始诊断报告;必读背景。