机器之心编辑部

大模型「不认识马嘉祺」的原因,被 MiniMax 研究透了。

现在大家日常都在用 AI 大模型,要说 AI 的 bug,那虽然算不上层出不穷,但每一个都相当奇葩,令人哭笑不得。

比如,DeepSeek V3.1 会在毫无预兆的地方塞一个「极」字,连英文输出也逃不过,「极」变身「extreme」,在代码里、试卷里、报告里神出鬼没,被网友戏称「极你太美 bug」。

GPT-5 系列迷上了哥布林 —— 不管你在聊相机还是写财务报告,它都能不动声色地在比喻里塞进一只「哥布林」,OpenAI 工程师不得不在系统提示词里手动写下禁令:「永远不要谈论哥布林、小精灵、浣熊、巨魔、食人魔、鸽子……」。

豆包则在搜索清末民初大总统黎元洪时,给出了喜剧演员范伟的恶搞剧照 —— 因为当年那张图流传太广,互联网上的玩梗内容彻底压过了真实历史照片,AI 认为范伟就是黎元洪。







多张图,左右滑动查看

上面这些案例,大多可以归结为脏数据污染、奖励信号偏差、信息混淆之类的原因,属于你能理解的错误。

但接下来要说的这个 bug 要更耐人寻味一些,它指向的是大模型深层的一个结构问题。

AI 说不出他的名字

故事的起点,是时代少年团队长马嘉祺。



图源:小红书

是的,你可能还记得,面对这位 2002 年出生的优质青年演员和新生代歌手,MiniMax-M2.5 就是无法说出他的名字。

然而有趣的是,并不是说模型完全不知道马嘉祺是谁 —— 它知道但就是说不出。其具体表现为当你问 AI「时代少年团的队长叫什么名字」,MiniMax-M2.5 模型支支吾吾,就是说不出来,甚至还会生编硬造一些人名,比如马嘉轩、马丝祺。

但如果你问它「时代少年团是什么团体?队长有哪些经历?」它却能给出正确又有条理的回答,包括出道时间、团体角色、代表综艺…… 唯独回避了「马嘉祺」这个名字本身。

就好像「马嘉祺」这三个字符的组合被屏蔽了一样,始终出不来。



实际上,人类自己有时候也会遇到这种情况,甚至还有个专门的心理学术语来描述:舌尖现象(tip-of-the-tongue phenomenon)。即知道某个词,就是说不出口。



图源:维基百科

只是没想到,千亿参数的大语言模型,也会精准地复刻这种现象。

MiniMax M2.7 上线后,这个问题已经被修复,我们当时还专门体验报道过,参阅《刚刚,MiniMax 直接让龙虾学会自我进化,也认识「马嘉祺」了》。但「马嘉祺 bug」背后的机制,一直没有被完整地揭开过。

直到昨天,MiniMax 工程团队发布了一篇详细的内部排查报告,把这个同时惊动了 AI 行业与娱乐圈的问题从头到尾梳理了一遍。他们也「因祸得福」,成了第一个搞清楚 AI 「理解≠生成」,提出可用修复方向的团队。



简单来说,MiniMax 首先确认他们的 M2.5 模型确实是认识马嘉祺的,而无法输出其名字的原因是大模型在监督微调(SFT)阶段有一个隐蔽但让人头大的问题。

验牌:不是 AI 不知道,是说不出来

首先是界定这个现象,MiniMax M2 系列模型在一些场景下无法正常输出「马嘉祺」。但从模型回答来看,它仍然掌握与之关联的知识,例如能回答其所属团体、身份等信息。这意味着问题不在知识缺失,而更像是生成阶段某个 token 无法被稳定采样出来。

在内部复现后,MiniMax 发现这不是⼀个孤立的 case⸺除了「马嘉祺」之外,还有一些其他低频词汇(如「王鹤」等)也存在类似现象。

坏了,必须赶紧排查解决。

那么是 Tokenizer(分词器)切错了吗?

起初,很多人(包括社区开发者)猜测是预训练和推理时的切词逻辑不一致导致的。工程师顺着这个思路做了验证:牌没有问题。「嘉祺」确实是被合成为了一个独立的 Token(ID=190467)。



检查预训练模型的向量分布,发现它处于正常范围。更有力证据的是,给这个 Token 寻找「语义近邻」,模型能精准召回「千玺」、「亚轩」等高度相关的中文人名 。这证明模型在预训练阶段是完美掌握这个词的。

使用早期的 Base 模型进行 few-shot 引导,模型能顺利输出「马嘉祺」。但换成经过 SFT 的后训练模型,却依然回避这个词。

Q: TFBOYS 的队长是谁? A: TFBOYS 的队长是王俊凯。 Q: 飞儿乐团的主唱叫什么? A: 飞儿乐团的主唱叫詹雯婷(Faye)。 Q: 时代少年团的队长是谁? A

结论有了:Tokenizer 没问题,问题出在后训练(SFT)阶段。工程师进一步调查了后训练的数据分布,统计发现,SFT 语料中包含「嘉祺」的样本总共不足 5 条。

全网马嘉祺的信息当然不至于这么稀少,模型内部发生了什么?检查发现,输入端(vocab embedding)几乎没变,但是直接控制模型最终生成的输出端(Im_head)却发生了显著偏移。

原因:竟是个「小语种」问题

既然 SFT 后模型仍然能理解问题,Transformer 中间层的大范围语义能力退化就不是最可能的主因。文档的排查重点转向模型首尾两端:输入侧 vocab embedding 和输出侧 lm_head。

这两个部分是干什么用的?在大模型里,输入层 Embedding 负责把人类语言翻译成机器能懂的向量,而输出层 lm_head 负责接收 AI 生成的抽象意图,然后在几十万 token 组成的字库里给每一个词块打分(计算概率),分数最高的那个词,就是 AI 吐出来的下一个字。

排查的结果很明显:vocab embedding 几乎不变,lm_head 变化显著。

背后的原因不难理解,SFT 数据中「嘉祺」既然是个低频出现的 token,embedding 层自然很难收到有效梯度更新,因此输入侧向量保持稳定是合理的。但 lm_head 是模型把隐藏状态映射回词表概率的出口,它直接决定一个 token 能不能被生成出来。

工程师们发现,「嘉祺」对应的 lm_head 向量在 SFT 前后余弦相似度大幅下降,变化幅度在整个词表中排名靠前。



更直观的证据来自 lm_head 最近邻结构。预训练阶段,「嘉祺」附近主要是中文人名,如「亚轩」「祺」「肖战」「子怡」「霆锋」「杰伦」等。SFT 之后,它的邻域被大量特殊 token、tool call 标记、文件编辑标记和编码噪声污染,例如 、

等。

这说明输出空间里的局部结构被挤压了:原本属于人名 token 的位置,开始和大量无关 token 混在一起

这也解释了为什么模型会出现懂但说不出的状态。模型内部仍然可能形成了正确的语义意图,但在最终输出时,「嘉祺」这个 token 的 lm_head 方向已经漂移,导致它的生成概率被压低,或者被空间邻近的错误 token 替代。

这种问题主要影响哪些词汇?MiniMax 进一步统计了 SFT 前后 lm_head 变化最大的 token 类别。除了 special tokens、LaTeX 标记、网页元数据、中文 SEO 垃圾词之外,一个特别显眼的类别是日文口语和网页模板表达,占比超过 40%。

这让团队把稀疏 token 遗忘与「小语种混杂」联系到了一起:如果 SFT 数据中某些语言 token 覆盖不足,它们的 lm_head 表征就会漂移,既可能在该生成时生成不出来,也可能在不该出现时与其他语言 token 混淆。

修复:答案默念 500 遍

找到根因之后,修复方案反而出奇地简单直接:提高后训练阶段的词表覆盖度。

MiniMax 的方法是:构造一份「全词表覆盖合成数据」。把词表里的 200064 个 token 随机分批,每批约 8000 个,构造一条对话样本 ——query 是打乱后的词列表加上「请重复以上内容」的指令,answer 是原样复制。如此循环,总共只生成了约 500 条合成数据,占总 SFT 数据量约 1%,确保每个 token 至少作为生成目标出现 20 次。

这个设计就是在给每个 token 一个生成频率的下限,像是在 SFT 阶段给整个词表做一次「保底校准」:即便某些 token 在真实对话数据中极少出现,也不会完全失去作为输出目标的训练信号。

效果如何呢?数据是最好的回答:

实验对比中,日语对话混入俄语字符的概率,从 M2.7 的 47% 直接降至 1%。马嘉祺可以被正常说出。「无痛人流」、「据介绍」、「地税」这些此前会被悄悄替换为错误 token 的词组,全部恢复正常输出。

更有说服力的是 lm_head cosine similarity 的定量结果。



500 条数据,修好了 20 万个词的「生成能力遗忘」问题。

发现:后训练数据,太关键了

至此,一个出圈的八卦话题在工程的角度被解决了。

大模型的 tokenizer 通常来自大规模预训练语料,词表里会包含大量长尾 token。预训练阶段,这些 token 可能都被 AI 反复看过。但进入后训练阶段后,数据分布发生了剧烈变化,对话数据更干净、更任务化,也更偏向常见表达。

结果就是,一些在预训练中学得不错的 token,在后训练中长期没有作为生成目标出现,最终在 lm_head 中发生方向漂移。

所以说,后训练数据的质量不能光看任务类型、领域覆盖和指令质量,还要看更底层的 token。过去我们常说 SFT 会带来灾难性遗忘,通常指的是能力或知识层面的退化,但「马嘉祺」问题展示的是更细粒度的遗忘:模型没有忘掉概念,却忘掉了如何把某个 token 说出来。

当然,上面的修复策略均作用于后训练阶段,本质上属于事后补救措施。那么这个问题能根治吗?

MiniMax 认为,工程角度上后续可探索的方向包括混入少量预训练数据、针对低频 token 定向合成样本、建立 token 覆盖度监控机制,甚至通过词表裁剪与继续预训练重新对齐 embedding 空间。

但无论采用哪种方案,核心启示都是一致的:不认识「马嘉祺」并不是一个孤立 bug,后训练不是简单地把模型调得更会聊天,它也会重新塑造词表输出空间,只要后训练数据覆盖不均匀,长尾 token 就可能在沉默中退化。

结语

提笔忘字,张嘴忘词不是只有 MiniMax 才会发生的 bug,它很早就已经出现,只是最近才被 AI 圈外的人关注。

其实这个现象有一个名称叫「Glitch Token」,不认识马嘉祺事件火了之前,人们在 ChatGPT、Qwen 上也发现过类似的问题,并对此进行了一系列研究。在名人效应的催更下,问题到了今天似乎可以说是告于段落。

不过仔细一想,这个稍微有些搞笑的 bug,也让我们意外看到了 AI 大模型和人类的一点共同之处。

就像我们经常一句话已经到了嘴边,却发现怎么也想不起来要说什么。大模型的脑内检索也并非绝对精确,在漫长的记忆里不断挑选时,某些细节偏差可能会被异常放大,某些路径会突然坍缩,最终给你呈现出一点诡异的答案。

大模型的「理解」与「生成」本就是解耦的两套参数,它们在不同的训练阶段以不同的方式更新,一旦后训练数据分布出现偏差,两端就可能出现裂缝。

好消息是:裂缝被发现了,而且被仔细地记录和修复了。这一次,是从一位追星粉丝的疑问出发的。

下一次,不知道会是谁先发现?

参考内容:

https://www.zhihu.com/question/2017049686331127666/answer/2036149386116342692