上下文位置编码 CoPE 是什么?按“重要的东西”而不是按词数来计位置
上下文位置编码(Contextual Position Encoding,CoPE)是一种让位置信息随上下文动态变化的位置编码方法,由 Meta 的研究人员在 2024 年提出,论文标题是《上下文位置编码:学会计数重要的东西》。它突破了传统位置编码基于 token 计数的限制,为大语言模型提供了更灵活的位置表示。
传统位置编码的局限
Transformer 的注意力机制本身不区分词的先后顺序,需要通过位置编码告诉模型每个 token 的位置。无论是绝对位置编码,还是旋转位置编码(RoPE)等相对位置编码,本质上都是按 token 的数量来计算位置:这是第几个 token,或者两个 token 之间隔了几个 token。
问题在于,人在理解文本时,常常需要按更有意义的单位来定位:比如“第三句话说了什么”“上一段的主题是什么”“这个列表中的第五个名词是什么”。但句子和段落的长度各不相同,同样是“第三句话”,它距离当前位置的 token 数可能差别很大。只按 token 计数的模型,很难准确地完成这类定位,在一些需要计数的简单任务上也常常出错,比如数一数一段话里有几个某类的词。
CoPE 怎么做
CoPE 的核心想法是:让模型自己决定哪些 token 应该被“计入”位置。具体来说,对于当前位置的查询,CoPE 用一个门控机制,根据上下文的内容,判断前面的每一个 token 是否值得计数:门的值在 0 到 1 之间,接近 1 表示计数,接近 0 表示跳过。然后把这些门的值累加起来,就得到了一个“上下文相关”的位置值。比如,如果门只在句号这类句子结尾的标记上打开,累加得到的就是“隔了几个句子”;如果门在所有名词上打开,得到的就是“隔了几个名词”。因为累加的结果可能是小数,CoPE 会在相邻的整数位置嵌入之间进行插值,得到最终的位置编码。门控的条件由模型在训练中学习,不同的注意力头可以学会按不同的单位来计数。
效果
论文报告,在选择性复制、计数、扑克牌游戏等传统位置编码方法容易失败的任务上,CoPE 的表现明显更好;在语言建模和代码建模任务上,它也降低了困惑度,提升了效果。这项工作说明,位置的概念不一定要和 token 的数量绑定,让位置信息随内容而变,能让模型更好地理解文本的结构。