长上下文技术:突破窗口限制的方法

把整本书、整个代码库塞进一次对话,是很多人的梦想。但上下文窗口越大,问题不只是「能不能装下」,还有「装下后模型还看不看得清、算得起不算不起」。长上下文技术研究的正是:在有限资源下,让模型真正用好很长的输入。

为什么长不等于好

经典注意力对序列长度是平方级复杂度,文本翻倍,计算与显存开销大约翻四倍。更麻烦的是「中间迷失」现象:当信息夹在超长上下文中部,模型更容易忽略它。于是工程上真正要解决的,是效率与有效利用这两件事,而不是单纯把窗口数字推大。

位置编码与高效注意力

要让模型感知更长位置,位置编码是关键一环。旋转位置编码(RoPE)等方案让相对位置信息更易外推,配合线性偏置注意力(ALiBi)这类给近端更高权重的设计,能在不重训的情况下撑起更长序列。另一类是稀疏与分块注意力,只让每个 token 关注局部窗口加少量全局 token,把平方复杂度压到近似线性。

上下文压缩与摘要

与其全量保留,不如在进模型前先瘦身:

  • 压缩型方法把早期 token 逐步聚合为少量摘要向量,保留要义、丢掉冗余。
  • 分层或分块处理先把长文档切成片段分别编码,再在上一层汇总。
  • 训练时配合长序列课程,让模型逐步适应更长的依赖距离。

这些手段降低了对原生超长窗口的硬依赖。

检索增强作为外挂

很多场景下,与其死磕上下文长度,不如用检索增强生成(RAG):先把长资料切成片段存入向量库,需要时只把最相关的几段喂给模型。这把「长度问题」转化为「检索精度问题」,既省钱又可控。它和长上下文并非替代关系,常组合起来——长窗口负责精读,检索负责粗筛。

小结

长上下文技术的核心不是把窗口数字做大,而是让模型在长输入下既算得起、又看得准。它依赖更友好的位置编码、稀疏分块注意力、上下文压缩,以及把长资料交给检索增强来分担。理解这些手段的取舍,比单纯追求更大的上下文数字更有意义。

参考与延伸阅读

  • Su et al. RoFormer / 旋转位置编码(2021),以及线性偏置注意力 ALiBi(Press et al., 2022)等位置编码改进。已核验。
  • 检索增强生成(Lewis et al., RAG, 2020)作为长上下文的重要补充。已核验。
  • 各模型实际支持的上下文长度与分块实现不同,以官方技术报告为准。待核实。
本文累计阅读