--- title: 大模型不认识马嘉祺?我们做了一次全链路排查 source_url: https://mp.weixin.qq.com/s/jAvdxWaE6AvYqx_drcSjGA tags: [wechat, article, claude, openai] source: 微信 author: MiniMax 稀宇科技 published: 2026-05-09 ingested: 2026-05-09 review_value: 9 review_confidence: 9 review_recommendation: strong review_stars: 5 created: 2026-05-09 updated: 2026-05-09 type: raw sha256: "" --- # 大模型不认识马嘉祺?我们做了一次全链路排查 ## 摘要 MiniMax M2 系列"模型无法说出马嘉祺"问题的全链路技术排查。根因:后训练 SFT 数据中"嘉祺"token 出现频次极低(<5条),lm_head 漂移导致模型无法生成该 token。全词表扫描发现 4.9% token 发生显著退化,日语最严重(29.7%)。解法:全词表合成数据"复读任务",日语混淆从 47%→1%,lm_head cosine similarity 从最低 0.329→全部高于 0.97。 ## 01 大模型为什么说不出马嘉祺? 从分词器版本对齐、embedding 统计分布、语义近邻检索、预训练与后训练模型的 few-shot 对比实验、后训练数据频次统计以及对全词表 lm_head 变化幅度的排序扫描等多个维度进行了排查。 **最终定位到的原因**:"嘉祺"在分词器中被合并为一个独立 token(token ID 190467),但该 token 在后训练数据中出现频次极低(不到 5 条),导致模型在后训练中逐渐遗忘了对该 token 的生成能力。 **展开机制:** 1. **分词器层面**:"马嘉祺"被切成两个 token:`['马','嘉','祺']`。由于"嘉祺"作为人名整体在预训练语料中出现次数足够高,被合并为一个独立 token。 2. **预训练阶段**:模型见过关于马嘉祺的内容,学会了"嘉祺"这个 token。统计分布检查显示 token 190467("嘉祺")的向量范数落在正常分布范围内,未出现未训练 token 常见的异常小值。 3. **后训练阶段**:包含"嘉祺"的 SFT 样本不到 5 条,而大量频繁出现的 token(如 tool_call 标记、代码符号)持续更新自己周围的向量空间,把"嘉祺"这种没被练到的低频 token 挤压到了不该去的方向。 4. **结果**:lm_head 权重向量在后训练过程中发生显著偏移,余弦相似度大幅下降且 Norm 变化很大。模型说不出"嘉祺",转而选了发音相近的"佳琪"、"琪琪"等被练习过的 token。 **对比实验验证**:同样的问题,预训练阶段的模型能正常输出"马嘉祺",后训练之后就不行了。模型仍然能准确回答马嘉祺的所有信息,说明理解能力没有受损,丢失的只是输出这个 token 的能力。 ## 02 系统性审视退化问题 对约 20 万 token 的整个词表进行了全量扫描,计算每个 token 在后训练前后输出参数的变化幅度,发现约 **4.9% 的 token 发生了显著退化**。 **退化 token 四类:** | 类别 | 说明 | 占比 | |------|------|------| | 预训练特殊标记 | 代码填充符号等 | — | | LaTeX 公式与维基百科源码标记 | 格式标记 | — | | 中文 SEO 垃圾内容 | "传奇sf"、"无痛人流"、"外墙涂装"等 | — | | **日文口语和博客模板表达** | 最大类别 | **40%+** | 按退化程度排序:排第 6 的是"传奇sf",排第 17 的是"无痛人流",排第 166 的是"外墙涂装"。这些是典型的互联网 SEO 垃圾关键词,在预训练的互联网数据里大量出现,分词器为它们分配了独立的 token 编号,但在后训练的对话数据里完全没有出现过。 **日语 token 退化引发的小语种语言混杂问题:** 模型在处理日语对话时,偶尔会在回答中混入俄语或韩语字符。按语种统计 token 退化比例: | 语种 | 退化比例 | |------|---------| | 日语 | **29.7%** | | 俄语 | 3.7% | | 韩语 | 3.3% | | 中文 | 3.9% | | 英文 | 3.5% | **机制统一解释**:由于后训练数据中日文内容的覆盖严重不足,导致这些日文 token 参数发生漂移,与其他语言的 token 在向量空间中发生混淆。既可能导致日文 token 在不该出现时被错误激活(语言混杂),也可能导致与之空间相邻的低频中文 token(如"嘉祺")被挤出正常的生成概率范围(token 遗忘)。 ## 03 解决方案与思考 ### 解法一:全词表合成数据"复读任务"(已部署) 核心思想:通过一个简单的复读任务,为全词表建立一个生成频率的"下限保障",防止任何 token 因为完全缺失而退化。 **效果:** - 日语回答中混入俄文字符的比例:47% → **1%** - 此前模型无法输出某些词汇的问题:**修复** - 全词表 20 万 token 输出参数稳定度(lm_head cosine similarity):最低 0.329 → **全部高于 0.97** ### 解法二:混入预训练数据 在 SFT 数据中按一定比例混入预训练语料,利用预训练数据天然的词表覆盖广度来缓解稀疏 token 的退化。这一方法在已有研究中被证明对缓解灾难性遗忘有效,但需要仔细调控混入比例,避免影响 SFT 的对话能力。 ### 解法三:针对低频 token 的定向合成 统计后训练数据中覆盖不足的 token,针对性地构造包含这些 token 的高质量对话样本。相较于全词表覆盖方案,这种方式数据量更小、更精准,但需要维护一套 token 覆盖度的监控机制。 ### 解法四:词表裁剪 + 继续预训练(CPT) 从根本上移除词表中在目标场景下永远不会被使用的 token(如预训练特有的格式标记、SEO 垃圾词等),缩小词表规模后进行继续预训练以重新对齐 embedding 空间。这一方案改动较大,但能从源头消除稀疏 token 问题。 ### 深层思考 当前大模型的分词器通常基于大规模预训练语料训练而成,词表中不可避免地包含大量仅在特定领域或语言中出现的 token。这些 token 在预训练阶段能够获得充分的训练,但进入后训练阶段后,由于后训练数据与预训练数据的分布差异,这些 token 的生成能力会逐渐衰退。 **后训练阶段的数据覆盖策略需要同时考虑两个维度:** 1. **语义层面**:从业务角度确保不同任务类型和领域的覆盖 2. **token 层面**:从更底层的统计角度确保词表中每个 token 都有足够的生成频率 将 token 覆盖度作为后训练数据质量的一项常规监控指标,可以在早期发现潜在的稀疏 token 退化风险,避免类似问题在线上复现。 --- *来源:MiniMax 稀宇科技(微信公众号)*