
特殊标记设计:从 [CLS] 到 ChatML 的 Prompt 格式演化
1. 特殊标记的角色与意义 特殊标记(Special Tokens)是 Tokenizer 词表中预留的、具有特定语义功能的标记。它们不属于自然语言,却承担着结构化组织模型输入输出的关键职责。 特殊标记的核心功能: 1. 序列边界标记: [BOS] [EOS] - 标识序列开始/结束 2. 任务分隔标记: [SEP] - 分隔不同输入段 3. 分类聚合标记: [CLS] - 聚合全局语义 4. 填充对齐标记: [PAD] - 批处理中对齐长度 5. 未知词标记: [UNK] - 处理未登录词 6. 掩码标记: [MASK] - 遮蔽语言模型训练 7. 角色标记: <|im_start|> - 标识对话角色 8. 系统标记: <|system|> - 系统指令 1.1 特殊标记的 Token ID 约定 # 不同模型系列的特殊标记 ID 对比 special_token_ids = { "BERT": { "[PAD]": 0, "[UNK]": 1, "[CLS]": 2, "[SEP]": 3, "[MASK]": 103, }, "GPT-2": { "<|endoftext|>": 50256, # 单一结束标记 }, "LLaMA": { "<unk>": 0, "<s>": 1, "</s>": 2, "<pad>": 32000, }, "Llama-3": { "<|begin_of_text|>": 128000, "<|end_of_text|>": 128001, "<|start_header_id|>": 128006, "<|end_header_id|>": 128007, "<|eot_id|>": 128009, }, "ChatML (OpenAI)": { "<|im_start|>": 100264, "<|im_end|>": 100265, "<|endoftext|>": 100257, }, } 2. BERT 时代:分类与分隔 2.1 [CLS] 和 [SEP] 的设计 BERT 使用 [CLS] 和 [SEP] 来组织输入格式: ...