编程与 AI13 分钟阅读更新于 2026-08-03

EOS 不是普通词:Transformer 如何判断输出结束

围绕解码输出、结束符和线性层 Softmax 的描述,解释 EOS 如何参与训练、推理和生成停止判断。

相关工具

模型为什么需要一个明确的结束标记

自回归生成是一轮一轮进行的。解码器每一步根据当前目标前缀输出一个词元,如果没有明确的停止信号,系统就不知道什么时候应该把结果交给用户。Transformer 相关概念 在介绍解码过程时提到,生成会持续到输出结束符,结束符表示目标序列已经完成。

EOS 就是这个结束标记。它不负责表达某个具体名词或动作,而是告诉生成流程:当前序列可以停止继续扩展。对于翻译、摘要和问答等任务,EOS 把“内容生成”与“生成循环的终点”连接起来。

Transformer 自回归生成在输出 EOS 后结束的流程示意图
EOS 位于自回归生成末端

解码器逐步输出词元,普通词元继续进入下一轮,EOS 触发生成结束。

EOS 在词表里仍然是一个词元

从模型计算的角度看,EOS 和其他输出候选一样,都有自己的词元编号,并会占用词表中的一个位置。解码器最后输出隐藏状态,Linear 把它映射到整个词表,Softmax 为每个候选词元给出概率,EOS 也在这组候选之中。

它的特殊之处不在于不参与概率计算,而在于系统对它的解释不同:选中普通词元时,词元会追加到目标前缀;选中 EOS 时,词元通常不会再作为需要展示的正文,而是作为停止信号被处理。

Transformer 输出层中 EOS 与普通词元共同参与 Softmax 概率计算的示意图
EOS 与普通词元共同进入词表概率

输出层为整个词表计算 logits 和概率,EOS 作为其中一个特殊候选参与选择。

训练时模型怎样学会在合适位置输出 EOS

训练数据需要明确目标序列的结束位置。通常会在目标文本后加入 EOS,让模型在每个目标位置预测下一个词元时,最终遇到一个对应的结束标签。交叉熵损失会比较模型给出的词表概率和真实目标词元,其中也包括 EOS。

因此,模型不是被单独写入一条“句子结束规则”,而是在下一词预测任务中学习 EOS 的条件概率。当目标内容已经完整、上下文提示生成结束时,EOS 的概率可能逐渐升高。训练样本中的结束标记越清晰,模型越容易把结束当成可学习的输出模式。

推理时 EOS 怎样改变生成循环

推理开始时,解码器只有起始标记或用户给出的前缀。每一轮经过掩码自注意力、交叉注意力、FFN 和输出层,得到下一词元的概率,再依据贪心、束搜索或采样策略选择结果。

如果选中的是普通词元,系统把它追加到目标前缀,进入下一轮;如果选中 EOS,就把当前序列标记为完成,退出循环。这里的判断发生在输出选择之后,而不是 Softmax 之前。Softmax 给出候选概率,解码策略选择候选,生成控制逻辑再解释这个候选是否代表结束。

Transformer 生成循环在选择词元后判断 EOS 并决定继续或停止的流程图
选择词元后的 EOS 判断

输出层产生概率,解码策略选出词元,系统再判断该词元是继续生成还是结束。

没有生成 EOS 时也不能无限等待

EOS 是模型学到的自然结束信号,但系统还需要一个外部长度上限。模型可能因为输入含糊、训练分布差异或解码策略影响,没有及时把 EOS 排到足够高的位置。如果只依赖 EOS,生成循环可能持续输出无关内容。

达到最大新词元数时,系统会停止继续生成,即使 EOS 尚未出现。这个停止条件与 EOS 不同:EOS 表示模型选择了结束标记,最大长度表示外部运行边界已经触发。二者通常需要同时存在,前者保证自然结束,后者保证资源和响应时间可控。

EOS 和 Padding 不是一回事

Padding 用来把不同长度的序列补齐到统一张量形状,通常应该被掩码屏蔽,不能让注意力把它当成真实内容。EOS 则表示一条目标序列在语义上已经结束,是模型希望预测和识别的特殊词元。

两者都可能出现在批量数据的序列末尾附近,但作用不同。EOS 是有效序列的一部分,通常参与目标预测损失;Padding 是为了对齐而添加的占位位置,应该在注意力或损失统计中按规则忽略。把它们混用,会导致模型学到错误的结束位置。

不同解码策略如何处理 EOS

贪心解码每轮选择当前概率最高的词元,如果这个词元是 EOS,就立即停止。束搜索会同时维护多条候选路径,一条路径生成 EOS 后可以标记为完成,其他路径仍可能继续扩展,最后再根据整体得分和长度规则比较候选。

采样策略下,EOS 也会参与随机选择。温度、Top-k 或 Top-p 可能改变 EOS 被选中的机会,因此同一输入有时会出现不同的结束长度。为了避免过早结束或迟迟不结束,实际系统还可能设置最小生成长度、长度惩罚或其他解码约束。

如何判断一次生成是真的结束

阅读生成流程时,可以按四个问题检查:输出层是否把 EOS 放入词表候选,训练标签是否在目标末尾提供 EOS,解码循环是否在选中 EOS 后退出,以及没有 EOS 时是否有最大长度保护。四个环节缺一不可。

EOS 不是一个孤立的特殊符号,而是从训练目标一路连接到推理控制的接口。模型通过概率学习“何时结束”,系统通过停止判断执行“现在结束”。理解这条分工,就能区分模型的预测能力和生成程序的边界控制。

常见问题

EOS 会显示在最终回答里吗?

通常不会。它主要是生成流程使用的特殊停止标记,系统检测到后结束输出,展示层一般会把它从正文中去掉。

没有 EOS 时一定会生成错误吗?

不一定。系统可以在达到最大新词元数时停止,但这表示触发了外部长度保护,不代表模型自然判断内容已经结束。

EOS 和 Padding 可以使用同一个编号吗?

有些具体实现可能复用特殊标记,但语义和处理规则必须明确区分:EOS 表示目标结束,Padding 表示批量对齐中的无效位置。