长上下文里的位置偏差
长上下文模型对开头与结尾的信息更敏感,夹在中间的内容容易被忽略,检索明明命中了却没能被用上。典型表现是答案只用了最前面一两段,后面的关键条款没有进入回答。缓解方向有两条:减少无关条数、以及把高相关内容安排在首尾位置。
基本信息
| 现象 | 相关信息在上下文中间位置利用率下降 |
|---|---|
| 来源 | 长上下文模型的位置敏感度研究 |
| 缓解手段 | 排序调整、条数压缩、逐条编号 |
| 验证方式 | 对比不同排序策略下的答案完整性 |
重排后排序策略
重排后排序策略
ranked = rerank(query, candidates, top_n=8)
# 方案一:高相关放最前
ordered = ranked
# 方案二:两端强相关、中间弱相关(示例按分数交错)
# first, last = ranked[0], ranked[1]
# ordered = [first] + ranked[2:] + [last] # 需结合模型实测选择使用要点
- 先减条数再调顺序:无关片段本身就是噪声,压缩往往比排序更有效
- 给每条片段编号并保持编号稳定,引用与复核都依赖编号
- 把最强相关放首位,因为多数模型对开头更敏感
- 排序策略效果因模型与提示词而异,必须实测而不是照搬
- 对跨段问题单独建样本,这类问题最容易暴露位置偏差
缓解手段对比
| 手段 | 做法 | 代价 |
|---|---|---|
| 条数压缩 | 只保留重排后的前几条 | 可能丢掉次要但有价值的信息 |
| 首尾放置 | 强相关放两端、弱相关居中 | 需要按模型实测验证 |
| 逐条编号 | 每条带编号并要求引用 | 回答略长,但便于核对 |
| 分段归纳 | 先分块小结再汇总 | 多一次模型调用,延迟增加 |
常见问题
- 相关片段全塞在中段:模型回答仍只引用开头内容
- 条数压到极少但未验证答案完整性,出现漏答
- 排序策略换了但评测集没变,无法确认是否真的改善
- 把无关片段混进来充数,位置偏差与噪声叠加
缓解手段要与评测一起验证:排序策略的效果因模型与提示词模板而异,换模型后需要重新确认结论是否成立。