迷失在中间:大语言模型中的位置偏差及其对金融 AI 的影响
当我回想起 DocFinQA 的记录时——在处理具有 123K token 上下文的 SEC 文件时,基于检索的流水线和长上下文大语言模型都崩溃了——我留下的问题是 为什么。Liu 等人的这篇论文(TACL 2024, arXiv:2307.03172)提供了机制上的答案,事实证明,这种失效模式比我预想的更简单且更难以消除。
论文简介
Nelson F. Liu、Kevin Lin、John Hewitt、Ashwin Paranjape、Michele Bevilacqua、Fabio Petroni 和 Percy Liang 撰写的《迷失在中间:语言模型如何使用长上下文》(Lost in the Middle: How Language Models Use Long Contexts)进行了两项针对性实验:基于 NaturalQuestions-Open 的多文档问答(包含 10、20 和 30 个检索到的文档)和合成键值检索(包含 75、140 和 300 对)。在每个实验中,他们系统地改变相关文档或键值对在输入上下文中的位置——开头、中间或结尾——同时保持其他所有因素不变。研究结果非常清晰:性能呈现出一条 U 形曲线,谷值位于上下文的中间,且该曲线出现在所有受测模型中。
核心观点
- U 形曲线是真实且一致的。 在 20 个文档的问答设置中,第一位置的性能约为 75%,到第 10 个位置下降到 55% 左右,然后在第 20 个位置回升到约 72%——边缘与中心之间存在约 20 个百分点的差距。
- 所有模型都遵循同样的模式。 受测模型涵盖了闭源和开源、小型和大型:GPT-3.5-Turbo(4K 和 16K)、GPT-4、Claude-1.3(8K 和 100K)、MPT-30B-Instruct 以及 LongChat-13B。U 形曲线在每一个模型中都有体现,包括那些明确以扩展上下文窗口为卖点的模型。
- 即使是 Claude-1.3-100K 也不能幸免。 100K 上下文变体的表现与其他模型一致。长上下文窗口并不意味着模型实际上会在整个窗口内均匀地分配注意力。
- 闭卷基准线设定了一个令人冷静的底线。 没有任何文档的 GPT-3.5-Turbo 正确回答了 56.1% 的 NaturalQuestions;在仅能访问那一个相关文档的理想情况下,正确率达到了 88.3%。但在 20 个文档设置中最差的中间位置,性能甚至跌破了闭卷基准线——这意味着添加更多上下文反而起到了反作用。
- 编码器-解码器模型(Flan-T5-XXL, Flan-UL2)在训练长度内更具鲁棒性,但当上下文超出长度时也会出现性能下降。 架构差异确实有影响,但在规模扩大时,两者都会退化。
- 根本原因是因果注意力掩码(Causal Attention Masking)。 每个 token 只能关注之前的 token,因此与中间位置相比,最开头的位置在整个模型中积累了更多的总注意力权重。近因效应(Recency effects)也拉升了上下文末尾的性能。
哪些结论站得住脚,哪些不一定
这里的实验设计非常简洁:位置是唯一受控变量,任务是标准基准测试,且发现结果在多种模型家族中得到了复现。我对核心结果没有异议。
我觉得不太有说服力的是将键值检索任务作为现实应用的有效代理。UUID 到 UUID 的查找测试的是模型是否能复读出记忆的字符串,而不是它是否具备推理能力。U 形曲线在那里也出现了,这强化了位置偏差的说法,但也意味着论文混淆了两种不同的现象:精确匹配任务的检索准确性与相关段落的推理质量。我想知道,当相关文档在给出最终答案前需要多步推理时,这种 U 形曲线是会恶化还是好转,而不仅仅是逐字复述。
作者在大体上承认但未填补的一个空白是:他们从未测试过指令微调(Instruction fine-tuning)或 RLHF 是否改变了位置敏感性,只测试了更大的上下文窗口是否有影响。鉴于根本原因是架构上的(因果掩码),我怀疑指令微调无法解决这个问题,但论文并未证实这一点。