MiniMax 发布技术博客,披露其 M2 系列大模型无法输出人名「马嘉祺」的根因排查过程。排查从一个个例出发,最终揭示了一个波及整个词表近 5% 的系统性退化问题。
根本原因是大模型两个训练阶段的数据覆盖严重脱节。第一阶段(预训练)用海量互联网文本编出了一本约 20 万词的「字典」;第二阶段(后训练)用精选的对话数据教模型说话,但这份对话数据只覆盖了字典里的一部分。字典里有、但对话数据里没练到的词,就会在第二阶段逐渐被遗忘。
「嘉祺」就是这样的一个词。分词器(tokenizer,负责把文字切成模型能处理的最小单元)因为在互联网文本中见到「嘉祺」连用的次数够多,就把它合并成了一个独立单元。预训练时模型学会了这个词,但后训练的对话数据里包含「嘉祺」的样本不到 5 条。后训练不断调整模型参数,练到的词越来越准,没练到的词则在参数更新中被带偏。最终,模型仍然「认识」马嘉祺、能准确回答相关信息,丢失的只是把这个名字写出来的能力。
退化排名靠前的还有「传奇私服」「无痛人流」等互联网 SEO 垃圾词。这类词在预训练的互联网语料中铺天盖地,分词器给了它们独立编号,但精选的后训练对话数据不会收录这些内容,结果同样被遗忘。
团队对完整词表做了全量扫描,发现约 4.9% 的词发生了显著退化。退化最严重的是日语:29.7% 的日语词显著退化,远超韩语 3.3%、俄语 3.7%、中文 3.9% 和英文 3.5%。
日语的严重退化还解开了一个旧谜。此前模型在日语对话中偶尔混入俄语或韩语字符,一直找不到原因。这次分析表明,大量日语词退化后,在模型内部的参数空间里「漂」到了其他语言的地盘上,导致模型该写日语时错写成俄语或韩语。
修复方案是构造一份覆盖全词表的合成数据,让模型用简单的复读任务把字典里每个词都练一遍。效果立竿见影:日语回答中混入俄文字符的比例从 47% 降至 1%,全词表参数稳定度从最低 0.329 升至全部高于 0.97。