![]()
機器之心編輯部
大模型「不認識馬嘉祺」的原因,被 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
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.