一句话定义
前缀语言模型(Prefix LM)把一条序列切成“前缀(prefix)”和“续写(continuation)”两段:前缀内部每个位置都能看见前缀里的所有位置,这叫双向注意力(bidirectional attention);续写部分只能看见自己左边已经出现的内容,这叫因果注意力(causal attention)。同一个模型、同一套参数,只靠一张注意力掩码(attention mask)区分这两种行为。
打个比方
像语文考试的“材料作文”。发下来的阅读材料你可以来回翻、前后对照着看,这就是前缀的双向注意力;但你动笔写作文时,只能一句接一句往下写,不能先跳到结尾再回头补中间,这就是续写的因果注意力。整张卷子是同一个人在做,只是“读”和“写”的规则不同。
它和纯 Decoder-only 不是一回事
最常见的误解是:“现在的大模型不都是 decoder-only 吗?那前缀不就是提示词?”关键差别在掩码。
- 纯 Decoder-only:整条序列(包括提示词)一律因果。提示词里第 3 个词看不见第 5 个词,哪怕它们都属于“已经给定”的输入。
- 前缀 LM:前缀区域整体放开双向。前缀里第 3 个词能看见第 5 个词——因为这段是“给定条件”,不需要防作弊。
一个训练上的惯例:损失(loss)通常只算在续写部分,前缀部分不计入,因为它已经是给定的。
| 架构 | 前缀部分的注意力 | 生成部分的注意力 | 结构 |
|---|---|---|---|
| Decoder-only(GPT 式) | 因果 | 因果 | 单栈 |
| Encoder-Decoder(T5、BART 式) | 双向(独立编码器) | 因果 + 交叉注意力 | 双栈 |
| Prefix LM | 双向 | 因果 | 单栈,一张掩码 |
对从业者的实际意义
第一,注意力掩码是一个可以设计的自由变量,不是天经地义。想让条件信息编码得更充分,就放宽前缀的可见性;想让训练和推理完全一致,就收紧。
第二,前缀双向对“给一大段材料再让我处理”的任务天然友好:检索到的文档、任务说明、源代码上下文、表格,这些内容彼此之间的关联能被编码进去,而不必挤在一条严格的从左到右通道里。
第三,代价主要在工程侧。主流工具链、KV cache 复用、现成权重都是围绕 decoder-only 长起来的,前缀的双向部分不能像因果部分那样简单地增量缓存。所以它更多是特定架构与训练目标上的选择,而不是默认选项。
对普通人来说,判断标准很朴素:如果一个模型“读完材料再回答”明显更稳,说明它在条件编码上是下了功夫的;选型时看任务形态,别只看参数量。
