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

特殊标记:模型眼里的开始、结束与占位符

一句话定义:特殊标记(special tokens)是分词器(tokenizer)词表里预先留出的一批"保留字",它们不承载自然语言意思,只负责给模型传结构信号——序列从哪儿开始、到哪儿结束、哪些位置是纯填充。

先说清楚 token 是怎么来的。文本进模型前要过两道工序:切分、查表。切分把句子打散成 token,查表把每个 token 换成词表里的整数 ID。特殊标记的特别之处在于它绕开切分流程:分词器一看到整块的 <|endoftext|>,就把它当成一个整体,直接给一个 ID,绝不会切成七八个字符碎片。所以模型眼里根本没有"符号",只有 ID 序列;它之所以懂"该停了",是因为这个 ID 在训练中反复出现在句尾,它的向量早就被压成了"收尾"这个含义。

打个比方:把一段文本想成一列火车。BOS(Beginning of Sequence)是车头挂的"始发"牌,EOS(End of Sequence)是车尾的"终到"牌,PAD(Padding)是把长短不齐的编组补齐到同一长度用的空车厢。为什么要补空?因为 GPU 喜欢整齐的矩阵,一批样本必须等长才能并行计算,这就是批处理(batch)。但空车厢没装货,你得额外告诉模型"这几节别数",这个"别数"的开关就是注意力掩码(attention mask)——注意,mask 不是 token,它和 ID 序列并排存在,是一串 0/1。

标记位置性质常见坑
BOS序列开头内容边界,参与训练有些模型干脆不加,凭空加会分布外
EOS序列结尾内容边界,决定"刹车"训练时被截断砍掉,模型学不会停
PAD补齐短序列工程补位,非内容没设 pad_token 导致报错或污染损失

和相邻概念的区别也值得拎一下。PAD 与 BOS/EOS 的最大差别是:前者是工程脚手架,通常会被从损失计算里排除;后者是内容的一部分,本身就是训练目标。另外,BERT 那类模型用的 [CLS]、[SEP],和聊天模板里的 <|user|>、<|assistant|>,都是同一个家族——把结构、角色这类"元信息"也变成 token,让模型用一套注意力机制统一处理。

对从业者,几个具体的坑:一是忘了设置 pad_token,或者图省事把 pad_token 设成 eos_token;二是算损失时没忽略 PAD 位置,导致 loss 被大量空位稀释,看起来在降其实没学到东西;三是做批量生成时填充方向搞反,自回归模型通常要左填充,右填充会让结果明显跑偏;四是数据预处理时粗暴截断,把 EOS 砍掉了。具体到某个模型的词表和模板,以官方文档为准。

对普通人,这套东西解释了三个日常现象:模型"说完就闭嘴",是因为采样到了 EOS;回答突然断在半句话,多半是被最大生成长度硬截断,而不是它想停;粘贴长文被提示超长,是 token 数超过了AI 词典:上下文窗口">上下文窗口,而中文字符和 token 并不是一一对应的。

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