同一个模型,既要分清”我打你”和”你打我”这两个意思截然相反的句子,又要理解”I love you”和”私はあなたを愛している”其实在说同一件事。日语的动词放在句尾,英语的动词放在宾语前面,古典阿拉伯语常常动词开头——可它们共用同一套位置编码。这真的够用吗?

我最早以为,多语言模型一定藏着一套”语言感知的位置校准”机制,要么每个语言一种位置映射,要么至少有个语言向量去微调位置。后来翻 mBERT 的代码,发现它根本没有语言相关的任何组件:位置编码就是一张所有语言共享的查找表。当时的反应是:这也太粗暴了。但把三个问题想清楚之后,我发现”粗暴”恰恰是合理的。这三个问题是:位置编码到底在编码什么?词序差异到底由谁负责?不同语言真正的差异在哪里?
没有位置编码,Transformer 分不清”我打你”和”你打我”
先回到最基础的机制。Transformer 的注意力在没有位置信息时是排列等变的:如果没有任何位置信号,把输入序列的顺序任意打乱,模型算出来的注意力分布一个数都不会变。也就是说,”我打你”和”你打我”在模型看来只是同一串 token 的不同排列,语义完全相同。
位置编码干的活,就是给每个 token 发一个”序号信号”,告诉模型:我在第几个位置。第 t 个位置会被映射成一个唯一的向量,加到词向量上,模型从此有了先后概念。
原版 Transformer 用的是正弦位置编码,每个维度是一组不同频率的正弦或余弦波。我的理解方式是把它想成一排钟表:每个维度是一根速度不同的指针,慢的指示小时,快的指示分钟,多根指针的读数组合起来,唯一确定”现在是第几个位置”。这个设计有一个漂亮的数学性质,《Attention Is All You Need》论文里是这么说的:
对于任意固定的偏移 k,位置 pos+k 的编码可以表示为位置 pos 的编码的线性函数。——《Attention Is All You Need》
意思是,模型只要学会”注意当前位置往前第 2 个位置的那个词”,这个规则就能搬到任意位置使用。这正是相对位置概念的雏形,也是后面所有故事的起点。论文作者也试过可学习位置嵌入,效果差不多,但正弦编码有个额外的好处:有可能外推到训练时没见过的长度。
词序是语法问题,位置编码只是一把尺子
这是我想通的第一个问题。日语把动词放在句尾,英语把动词放在宾语前,古典阿拉伯语放在句首——这些规则住在哪里?答案是:住在模型的注意力权重里,而不是位置编码里。
位置编码不绑定任何语法,它只是一把尺子,告诉你”第 5 个词在第 3 个词后面”。至于”动词该出现在第几个位置”,那是模型从训练数据里学出来的语言知识。一把尺子不需要针对汽车和房子设计两套刻度;同一套位置编码机制,可以通过不同的注意力权重,同时服务于 SVO、SOV、VSO 甚至自由词序的语言。
| 语言 | 典型词序 | 例句(施事-动作-受事) |
|---|---|---|
| 英语、中文 | SVO | I love you / 我爱你 |
| 日语、韩语、土耳其语 | SOV | 私はあなたを愛している |
| 古典阿拉伯语、爱尔兰语 | VSO | قرأ الولدُ الكتابَ(男孩读了那本书) |
| 俄语、拉丁语 | 自由词序 | Я тебя люблю / Тебя я люблю |
绝对位置与相对位置:为什么 RoPE 和 ALiBi 赢了
想通的第二个问题是编码形式的选择。BERT 和 GPT-2 用的是可学习绝对位置嵌入——直接查表,每个位置一个独立向量。问题在于:位置 5 的向量和位置 3 的向量没有任何共享规律,模型只能硬记。
当前主流模型几乎全部转向了相对位置编码。LLaMA、Qwen、ChatGLM 用的 RoPE(旋转位置编码)把位置当作旋转角度,直接旋进 query 和 key 向量里,两个向量的内积自然只跟”位置差”有关,跟绝对位置无关。BLOOM、MPT 用的 ALiBi 更直接,在注意力分数上减去一个随距离增长的偏置项。
这对多语言模型是意外的礼物。语言之间的差异是”谁在前谁在后”的排列差异,但”相邻”和”间隔较远”这两个概念,在所有语言里都是通用的。日语里宾语和动词可能隔着一大串修饰语,但”离动词最近的那个名词短语”这种模式,跨语言是稳定的。相对位置编码让模型把这个模式学一次,就能用在所有语言上。
| 编码方法 | 代表模型 | 位置注入方式 | 对异序语言的友好度 |
|---|---|---|---|
| 正弦绝对编码 | Transformer 原版 | 固定信号加在词向量上 | 中:需要模型自己学会相对距离 |
| 可学习绝对嵌入 | BERT、mBERT、GPT-2 | 查表加在词向量上 | 较低:位置间无共享规律 |
| RoPE | LLaMA、Qwen、ChatGLM | 旋转 query/key 向量 | 高:点积天然只依赖位置差 |
| ALiBi | BLOOM、MPT | 注意力分数减去距离惩罚 | 高:距离语义是内建的 |
真正的瓶颈不在词序,而在”位置的单位”
想通的第三个问题,也是最反直觉的一点:多语言模型处理词序差异远没有想象中难,它真正卡住的地方是 tokenization。
位置编码标记的是 token 的位置,不是词的位置。XLM-R 用 SentencePiece 在所有语言上共享一个词表,同一个概念在英语里可能是 1 个 token,在土耳其语里可能被切成 4 个。于是句子的”位置序列”在不同语言里的长度完全不可比。一个土耳其语单词的第 3 个 subword,和一个英语单词的第 1 个 subword,它们的位置数值根本没有对齐可言。模型要在这种错位的坐标系上迁移语法知识,难度比词序差异大多了。
实验证据也比直觉更宽容。Sinha 等人在 EMNLP 2021 发表的论文发现,预训练时把输入样本的语序打乱,下游任务的表现下降远小于预期。这说明模型很大程度上靠”词的共现统计”而不是”严格顺序”来理解语义。
但严格顺序在某些任务里是命门。PAWS-X 是专门测试模型能否区分”The taxi is in front of the car”和”The car is in front of the taxi”这类只有词序不同的句子对的数据集,多语言模型在它上面的零样本表现普遍不如单语模型——顺序信息在跨语言迁移时确实会掉链子,但掉链子的环节主要是训练目标和数据配比,而不是位置编码本身。
所以,需要不同的编码策略吗?
我的判断是:不需要语言专属的位置编码,但需要认真对待”位置的单位”对齐问题。
证据有三层。第一,mBERT 用一张全语言共享的绝对位置查找表,就在 104 种语言上实现了可用的跨语言迁移;第二,RoPE 和 ALiBi 的流行,本质上把位置信息从”绝对刻度”换成了”相对距离”,让编码越来越不关心具体语言怎么排列;第三,让多语言模型在词序敏感任务上翻车的,主要是子词切分造成的坐标错位和训练数据失衡,而不是编码策略不对。
如果你在设计一个多语言模型,与其给每种语言设计一套位置编码,不如做这三件事:
- 优先选相对位置编码(RoPE 或 ALiBi),它们天生对异序语言更宽容;
- 留意 tokenizer 的切分一致性,必要时引入词级位置聚合或语言感知的切分规则;
- 保证 SOV、VSO、自由词序语言在训练数据中的占比,让注意力权重有机会学到它们的语法。
回到开头那个问题。位置编码不是语法规则,它只是一把尺子。不同语言需要的不是各自的尺子,而是一把刻度足够通用、足够清晰的尺子——以及一个能让尺子对齐到不同语言的坐标系。现代位置编码的设计史,本质上就是这把尺子从”绝对刻度”走向”相对距离”的历史。
原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/976.html