序列模型与Transformer

上下文长度(context length)

/ KON-tekst length /

上下文长度,是模型一次能在脑中端着的文本上限——它的工作记忆,以词元(大致是词片)来衡量。这扇窗里的一切,注意力都能取用;落在窗外的一切,则形同不存在。如果一段对话、一份文档或一个代码库超出了上下文长度,最旧的材料就会被丢弃,或必须被摘要掉。一个上下文为 4000 词元的模型,读的是几页纸;一个上下文达百万词元的模型,原则上能端着一整本书。

这个上限存在,有两个相连的原因。其一,模型是在某个长度以内的序列上训练的,超出之后它对位置的感觉会退化。其二,标准注意力让每个词元都与其他每个比较,所以上下文翻一倍,注意力的工作量与内存大致要翻两番——这让超长上下文无论是搭建还是运行都货真价实地昂贵。近来的模型借助更便宜的注意力变体与更好的位置方案,把上下文拉得极长,但每一次扩展,都是与那个平方代价的搏斗。

这里有一条至关重要的诚实话:一个标得很大的上下文长度,并不等于能可靠地用上它。模型常受「中段迷失」之累,对长输入的开头与结尾保持锐利的注意,却对中段一带掠过,埋在那里的一个事实可能被整个错过。一扇 20 万词元的窗,不保证模型真能找到并用上坐在第 10 万词元处的东西。评判长上下文的宣称,永远要看在深处实测的召回,而非那个头条数字。

你把一份 300 页的合同粘进聊天机器人,问它第 150 页上的一个条款。即便整份文件塞得进上下文窗,模型也可能答得自信却错——它把中段掠过了。同样的问题若问第 1 页或最后一页,通常就答对了。

塞得进窗,并不等于被可靠地读到。

标称的上下文长度是一个天花板,而非一项保证。有充分记录的「中段迷失」效应意味着:埋在文档中段的事实,即便塞得下,也常被错过。把一个大的上下文数字当作「可能性的上界」,而绝不要当作「模型会全部用上」的证明。

又称
context window上下文长度上下文長度context size上下文窗口