把一篇几万字的长文档丢给大模型,问一个藏在正文中间的问题,答案常常对不上——这不是模型偷懒,而是一种被反复观测到的现象:长上下文里,开头和结尾的内容被盯得紧,中段容易糊成一片,连成一条 U 型曲线。本文拆解这条曲线背后的机制与应对办法。
先看现象:注意力权重怎么分布
研究者让模型处理几万字输入,再把每个位置分到的注意力权重画出来,得到的分布两头高、中间低,形状像一个 U。开头部分通常是系统提示和任务说明,模型要靠它定方向;结尾部分是当前问题,模型要围着它生成答案。中段既不定方向、也不直接产出,分到的权重自然稀薄。进来的是完整长序列,发生的是按 Query 与 Key 的相似度分配权重,出去的就是这条两头高的曲线——它不是什么故障,是分配规则的直接结果。
为什么中段最吃亏
三个原因叠加。一是位置惯性:训练数据里大量任务的关键信息就在开头结尾,模型学会了把预算优先拨给这两处。二是梯度竞争:每个位置的权重要和其他所有位置抢同一份 softmax 预算,开头结尾频繁被需要,中段很少被点名,抢到的份额越来越小。三是逐层衰减:一层糊一点,层数多了误差累积,到深层时中段表示已被稀释。Kimi、秘塔AI搜索的长文档功能,内部都在和这条曲线较劲,具体缓解手段以官方技术报告为准。
三条原因各自怎么压低中段,一行对一条。
| 成因 | 机制上怎么起作用 | 中段为什么受害最深 |
|---|---|---|
| 位置惯性 | 训练数据里大量任务的关键信息就在开头结尾,模型学会把预算优先拨给这两处 | 中段既不定方向、也不直接产出,很少被点名 |
| 梯度竞争 | 每个位置的权重要和其他所有位置抢同一份 softmax 预算 | 开头结尾频繁被需要,中段抢到的份额越来越小 |
| 逐层衰减 | 一层糊一点,层数多了误差累积 | 到深层时中段表示已被稀释 |
糊掉的中段会犯什么错
典型症状是张冠李戴:把中段 A 段落的事实安到 B 段落头上,或者干脆回答「文档未提及」。用户以为模型读了全文,其实它读得很不均匀。辨别方法也简单:换个问法,把同一个中段信息挪到开头或结尾再问一遍,正确率立刻不一样——能复现这个落差,基本就是撞上了 U 型效应,而不是模型不认识这个词。
还有一种更隐蔽的表现是「静默删减」:模型未必答错,却可能当没看见中段内容,答案只复述开头结尾的信息,用户稍不留意就漏掉了关键细节。批量处理长文档时,这类错误比明显的事实错误更难排查,因为它不吵不闹,看着还挺完整。
长文档使用自查清单
- 关键指令放开头,关键问题放结尾,别埋中间
- 中段重点信息可在提问时换种问法复述一遍
- 超长文档先切段摘要,再让模型基于摘要作答
- 答案涉及具体条款时,要求模型给出原文位置
把曲线掰平的几条路
使用侧的办法是排布信息:指令前置、问题后置、中段要点在提问时带一句复述。模型侧的办法是改结构:调整位置编码让中段位置获得更均匀的表示,训练时专门补充中段问答样本,把曲线的谷底垫高。为什么同一个词在不同句子里向量不同那篇讲的上下文相关表示,在这里体现为同一段落处在不同位置、拿到的表示质量不同;剪枝是怎么决定剪谁的那类瘦身手段如果误伤了与位置相关的连接,也会让曲线更难掰平。
换个问法再问U 型注意力三句
- 所有模型都有这条曲线吗?:长短不同、训练数据不同,谷底深度不同,但只要用 softmax 分配注意力且训练分布偏斜,这条曲线就会出现,只是程度差异。
- 窗口标称很长,为什么中段还是糊?:装得下和看得清是两回事,U 型效应恰恰在长输入下才显著,窗口大小决定容量,注意力分布决定有效读取。
- 让模型「再读一遍」有用吗?:有一点用,复述相当于给中段信息换了个更靠前的位置,但更稳的做法是切段摘要,参考量化等级的梯度是怎么排的同一层的部署取舍一起评估。
带走一个判断:长文档别把宝押在中段,开头定方向、结尾提问题、中段做复述,三段各就各位。


