跳到主内容
快讯直播
AI智模界
AI 词典

左填充与右填充:批量生成时,别把空位摆错边

一句话定义:左填充(Left Padding)和右填充(Right Padding),指的是同一批数据长短不一时,为了凑成整齐的矩阵,把补齐用的填充 token(padding token)放在序列的开头还是末尾。

为什么非补不可

模型一次处理一批(batch),底层是按矩阵算的,每一行长度必须一致。可现实里的句子有长有短,短的就得补。补上的符号本身没有意义,所以要额外给一个注意力掩码(attention mask),告诉模型"这些位置是凑数的,别当真"。

打个比方:拍集体照,人不够就摆空椅子。空椅子是 padding token;椅子上贴张"此位无人"的纸条,就是 attention mask。

两种摆法差在哪

AI 词典:自回归生成">自回归生成(decoder-only 模型)的做法是:读入整段,取"最后一个真实 token"那个位置的输出(logits),据此采样下一个词。不少实现图省事,直接取最后一位 [-1]。

  • 左填充 [pad, pad, 我, 爱, 吃],最后一位是"吃",取对了。
  • 右填充 [我, 爱, 吃, pad, pad],最后一位是 pad,取到的是空椅子的分数,整条输出就废了。

更麻烦的是它不报错,只是静默出错:程序跑得通,结果却胡言乱语。而且一批里每条序列长度不同,右填充时"最后真实位置"的索引条条不一样,批量取 [-1] 等于每条都取错,错法还各不相同——这就是"把最后一个真实 token 的预测位置整体搞乱"。

还有一层隐性影响:位置编码(positional encoding)。右填充时真实 token 从位置 0 开始,干净;左填充时前面垫了 pad,真实 token 的位置编号整体后移。主流框架会在你正确传入 attention mask 时自动算对位置编号,但手写推理流程、忘了传 mask,模型看到的"位置"就是错的,效果悄悄变差。

容易混淆的几个概念

概念管什么
Padding(填充)长度不够时补
Truncation(截断)长度超了时砍
Attention mask标记补的部分不参与计算
Padding side补在哪一端

实际怎么选

  • 自回归生成(对话、写作、代码补全,含带 KV cache 的批量推理):用左填充。
  • 编码类任务(文本分类、情感分析、句向量):右填充更常见,因为常取首位或做池化。
  • 训练 decoder-only 模型:两种都能用,前提是 attention mask 和位置编号都给对了。

给从业者的一句话:凡是"从末尾接着往下写"的场景,pad 一律放左边。上线批量推理前,先塞一条明显的短样本进去,确认输出是从第一个真实 token 接着走的,而不是从一串空椅子开始的。至于各个框架的默认值,以官方文档为准,别凭记忆。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。