![]()
機(jī)器之心編輯部
大模型「不認(rèn)識馬嘉祺」的原因,被 MiniMax 研究透了。
現(xiàn)在大家日常都在用 AI 大模型,要說 AI 的 bug,那雖然算不上層出不窮,但每一個(gè)都相當(dāng)奇葩,令人哭笑不得。
比如,DeepSeek V3.1 會在毫無預(yù)兆的地方塞一個(gè)「極」字,連英文輸出也逃不過,「極」變身「extreme」,在代碼里、試卷里、報(bào)告里神出鬼沒,被網(wǎng)友戲稱「極你太美 bug」。
GPT-5 系列迷上了哥布林 —— 不管你在聊相機(jī)還是寫財(cái)務(wù)報(bào)告,它都能不動聲色地在比喻里塞進(jìn)一只「哥布林」,OpenAI 工程師不得不在系統(tǒng)提示詞里手動寫下禁令:「永遠(yuǎn)不要談?wù)摳绮剂帧⑿【`、浣熊、巨魔、食人魔、鴿子……」。
豆包則在搜索清末民初大總統(tǒng)黎元洪時(shí),給出了喜劇演員范偉的惡搞劇照 —— 因?yàn)楫?dāng)年那張圖流傳太廣,互聯(lián)網(wǎng)上的玩梗內(nèi)容徹底壓過了真實(shí)歷史照片,AI 認(rèn)為范偉就是黎元洪。
![]()
![]()
![]()
多張圖,左右滑動查看
上面這些案例,大多可以歸結(jié)為臟數(shù)據(jù)污染、獎勵信號偏差、信息混淆之類的原因,屬于你能理解的錯誤。
但接下來要說的這個(gè) bug 要更耐人尋味一些,它指向的是大模型深層的一個(gè)結(jié)構(gòu)問題。
AI 說不出他的名字
故事的起點(diǎn),是時(shí)代少年團(tuán)隊(duì)長馬嘉祺。
![]()
圖源:小紅書
是的,你可能還記得,面對這位 2002 年出生的優(yōu)質(zhì)青年演員和新生代歌手,MiniMax-M2.5 就是無法說出他的名字。
然而有趣的是,并不是說模型完全不知道馬嘉祺是誰 —— 它知道但就是說不出。其具體表現(xiàn)為當(dāng)你問 AI「時(shí)代少年團(tuán)的隊(duì)長叫什么名字」,MiniMax-M2.5 模型支支吾吾,就是說不出來,甚至還會生編硬造一些人名,比如馬嘉軒、馬絲祺。
但如果你問它「時(shí)代少年團(tuán)是什么團(tuán)體?隊(duì)長有哪些經(jīng)歷?」它卻能給出正確又有條理的回答,包括出道時(shí)間、團(tuán)體角色、代表綜藝…… 唯獨(dú)回避了「馬嘉祺」這個(gè)名字本身。
就好像「馬嘉祺」這三個(gè)字符的組合被屏蔽了一樣,始終出不來。
![]()
實(shí)際上,人類自己有時(shí)候也會遇到這種情況,甚至還有個(gè)專門的心理學(xué)術(shù)語來描述:舌尖現(xiàn)象(tip-of-the-tongue phenomenon)。即知道某個(gè)詞,就是說不出口。
![]()
圖源:維基百科
只是沒想到,千億參數(shù)的大語言模型,也會精準(zhǔn)地復(fù)刻這種現(xiàn)象。
MiniMax M2.7 上線后,這個(gè)問題已經(jīng)被修復(fù),我們當(dāng)時(shí)還專門體驗(yàn)報(bào)道過,參閱《剛剛,MiniMax 直接讓龍蝦學(xué)會自我進(jìn)化,也認(rèn)識「馬嘉祺」了》。但「馬嘉祺 bug」背后的機(jī)制,一直沒有被完整地揭開過。
直到昨天,MiniMax 工程團(tuán)隊(duì)發(fā)布了一篇詳細(xì)的內(nèi)部排查報(bào)告,把這個(gè)同時(shí)驚動了 AI 行業(yè)與娛樂圈的問題從頭到尾梳理了一遍。他們也「因禍得福」,成了第一個(gè)搞清楚 AI 「理解≠生成」,提出可用修復(fù)方向的團(tuán)隊(duì)。
![]()
簡單來說,MiniMax 首先確認(rèn)他們的 M2.5 模型確實(shí)是認(rèn)識馬嘉祺的,而無法輸出其名字的原因是大模型在監(jiān)督微調(diào)(SFT)階段有一個(gè)隱蔽但讓人頭大的問題。
驗(yàn)牌:不是 AI 不知道,是說不出來
首先是界定這個(gè)現(xiàn)象,MiniMax M2 系列模型在一些場景下無法正常輸出「馬嘉祺」。但從模型回答來看,它仍然掌握與之關(guān)聯(lián)的知識,例如能回答其所屬團(tuán)體、身份等信息。這意味著問題不在知識缺失,而更像是生成階段某個(gè) token 無法被穩(wěn)定采樣出來。
在內(nèi)部復(fù)現(xiàn)后,MiniMax 發(fā)現(xiàn)這不是?個(gè)孤立的 case?除了「馬嘉祺」之外,還有一些其他低頻詞匯(如「王鶴」等)也存在類似現(xiàn)象。
壞了,必須趕緊排查解決。
那么是 Tokenizer(分詞器)切錯了嗎?
起初,很多人(包括社區(qū)開發(fā)者)猜測是預(yù)訓(xùn)練和推理時(shí)的切詞邏輯不一致導(dǎo)致的。工程師順著這個(gè)思路做了驗(yàn)證:牌沒有問題。「嘉祺」確實(shí)是被合成為了一個(gè)獨(dú)立的 Token(ID=190467)。
![]()
檢查預(yù)訓(xùn)練模型的向量分布,發(fā)現(xiàn)它處于正常范圍。更有力證據(jù)的是,給這個(gè) Token 尋找「語義近鄰」,模型能精準(zhǔn)召回「千璽」、「亞軒」等高度相關(guān)的中文人名 。這證明模型在預(yù)訓(xùn)練階段是完美掌握這個(gè)詞的。
使用早期的 Base 模型進(jìn)行 few-shot 引導(dǎo),模型能順利輸出「馬嘉祺」。但換成經(jīng)過 SFT 的后訓(xùn)練模型,卻依然回避這個(gè)詞。
Q: TFBOYS 的隊(duì)長是誰? A: TFBOYS 的隊(duì)長是王俊凱。 Q: 飛兒樂團(tuán)的主唱叫什么? A: 飛兒樂團(tuán)的主唱叫詹雯婷(Faye)。 Q: 時(shí)代少年團(tuán)的隊(duì)長是誰? A
結(jié)論有了:Tokenizer 沒問題,問題出在后訓(xùn)練(SFT)階段。工程師進(jìn)一步調(diào)查了后訓(xùn)練的數(shù)據(jù)分布,統(tǒng)計(jì)發(fā)現(xiàn),SFT 語料中包含「嘉祺」的樣本總共不足 5 條。
全網(wǎng)馬嘉祺的信息當(dāng)然不至于這么稀少,模型內(nèi)部發(fā)生了什么?檢查發(fā)現(xiàn),輸入端(vocab embedding)幾乎沒變,但是直接控制模型最終生成的輸出端(Im_head)卻發(fā)生了顯著偏移。
原因:竟是個(gè)「小語種」問題
既然 SFT 后模型仍然能理解問題,Transformer 中間層的大范圍語義能力退化就不是最可能的主因。文檔的排查重點(diǎn)轉(zhuǎn)向模型首尾兩端:輸入側(cè) vocab embedding 和輸出側(cè) lm_head。
這兩個(gè)部分是干什么用的?在大模型里,輸入層 Embedding 負(fù)責(zé)把人類語言翻譯成機(jī)器能懂的向量,而輸出層 lm_head 負(fù)責(zé)接收 AI 生成的抽象意圖,然后在幾十萬 token 組成的字庫里給每一個(gè)詞塊打分(計(jì)算概率),分?jǐn)?shù)最高的那個(gè)詞,就是 AI 吐出來的下一個(gè)字。
排查的結(jié)果很明顯:vocab embedding 幾乎不變,lm_head 變化顯著。
背后的原因不難理解,SFT 數(shù)據(jù)中「嘉祺」既然是個(gè)低頻出現(xiàn)的 token,embedding 層自然很難收到有效梯度更新,因此輸入側(cè)向量保持穩(wěn)定是合理的。但 lm_head 是模型把隱藏狀態(tài)映射回詞表概率的出口,它直接決定一個(gè) token 能不能被生成出來。
工程師們發(fā)現(xiàn),「嘉祺」對應(yīng)的 lm_head 向量在 SFT 前后余弦相似度大幅下降,變化幅度在整個(gè)詞表中排名靠前。
![]()
更直觀的證據(jù)來自 lm_head 最近鄰結(jié)構(gòu)。預(yù)訓(xùn)練階段,「嘉祺」附近主要是中文人名,如「亞軒」「祺」「肖戰(zhàn)」「子怡」「霆鋒」「杰倫」等。SFT 之后,它的鄰域被大量特殊 token、tool call 標(biāo)記、文件編輯標(biāo)記和編碼噪聲污染,例如 、
等。
這說明輸出空間里的局部結(jié)構(gòu)被擠壓了:原本屬于人名 token 的位置,開始和大量無關(guān) token 混在一起
這也解釋了為什么模型會出現(xiàn)懂但說不出的狀態(tài)。模型內(nèi)部仍然可能形成了正確的語義意圖,但在最終輸出時(shí),「嘉祺」這個(gè) token 的 lm_head 方向已經(jīng)漂移,導(dǎo)致它的生成概率被壓低,或者被空間鄰近的錯誤 token 替代。
這種問題主要影響哪些詞匯?MiniMax 進(jìn)一步統(tǒng)計(jì)了 SFT 前后 lm_head 變化最大的 token 類別。除了 special tokens、LaTeX 標(biāo)記、網(wǎng)頁元數(shù)據(jù)、中文 SEO 垃圾詞之外,一個(gè)特別顯眼的類別是日文口語和網(wǎng)頁模板表達(dá),占比超過 40%。
這讓團(tuán)隊(duì)把稀疏 token 遺忘與「小語種混雜」聯(lián)系到了一起:如果 SFT 數(shù)據(jù)中某些語言 token 覆蓋不足,它們的 lm_head 表征就會漂移,既可能在該生成時(shí)生成不出來,也可能在不該出現(xiàn)時(shí)與其他語言 token 混淆。
修復(fù):答案默念 500 遍
找到根因之后,修復(fù)方案反而出奇地簡單直接:提高后訓(xùn)練階段的詞表覆蓋度。
MiniMax 的方法是:構(gòu)造一份「全詞表覆蓋合成數(shù)據(jù)」。把詞表里的 200064 個(gè) token 隨機(jī)分批,每批約 8000 個(gè),構(gòu)造一條對話樣本 ——query 是打亂后的詞列表加上「請重復(fù)以上內(nèi)容」的指令,answer 是原樣復(fù)制。如此循環(huán),總共只生成了約 500 條合成數(shù)據(jù),占總 SFT 數(shù)據(jù)量約 1%,確保每個(gè) token 至少作為生成目標(biāo)出現(xiàn) 20 次。
這個(gè)設(shè)計(jì)就是在給每個(gè) token 一個(gè)生成頻率的下限,像是在 SFT 階段給整個(gè)詞表做一次「保底校準(zhǔn)」:即便某些 token 在真實(shí)對話數(shù)據(jù)中極少出現(xiàn),也不會完全失去作為輸出目標(biāo)的訓(xùn)練信號。
效果如何呢?數(shù)據(jù)是最好的回答:
實(shí)驗(yàn)對比中,日語對話混入俄語字符的概率,從 M2.7 的 47% 直接降至 1%。馬嘉祺可以被正常說出。「無痛人流」、「據(jù)介紹」、「地稅」這些此前會被悄悄替換為錯誤 token 的詞組,全部恢復(fù)正常輸出。
更有說服力的是 lm_head cosine similarity 的定量結(jié)果。
![]()
500 條數(shù)據(jù),修好了 20 萬個(gè)詞的「生成能力遺忘」問題。
發(fā)現(xiàn):后訓(xùn)練數(shù)據(jù),太關(guān)鍵了
至此,一個(gè)出圈的八卦話題在工程的角度被解決了。
大模型的 tokenizer 通常來自大規(guī)模預(yù)訓(xùn)練語料,詞表里會包含大量長尾 token。預(yù)訓(xùn)練階段,這些 token 可能都被 AI 反復(fù)看過。但進(jìn)入后訓(xùn)練階段后,數(shù)據(jù)分布發(fā)生了劇烈變化,對話數(shù)據(jù)更干凈、更任務(wù)化,也更偏向常見表達(dá)。
結(jié)果就是,一些在預(yù)訓(xùn)練中學(xué)得不錯的 token,在后訓(xùn)練中長期沒有作為生成目標(biāo)出現(xiàn),最終在 lm_head 中發(fā)生方向漂移。
所以說,后訓(xùn)練數(shù)據(jù)的質(zhì)量不能光看任務(wù)類型、領(lǐng)域覆蓋和指令質(zhì)量,還要看更底層的 token。過去我們常說 SFT 會帶來災(zāi)難性遺忘,通常指的是能力或知識層面的退化,但「馬嘉祺」問題展示的是更細(xì)粒度的遺忘:模型沒有忘掉概念,卻忘掉了如何把某個(gè) token 說出來。
當(dāng)然,上面的修復(fù)策略均作用于后訓(xùn)練階段,本質(zhì)上屬于事后補(bǔ)救措施。那么這個(gè)問題能根治嗎?
MiniMax 認(rèn)為,工程角度上后續(xù)可探索的方向包括混入少量預(yù)訓(xùn)練數(shù)據(jù)、針對低頻 token 定向合成樣本、建立 token 覆蓋度監(jiān)控機(jī)制,甚至通過詞表裁剪與繼續(xù)預(yù)訓(xùn)練重新對齊 embedding 空間。
但無論采用哪種方案,核心啟示都是一致的:不認(rèn)識「馬嘉祺」并不是一個(gè)孤立 bug,后訓(xùn)練不是簡單地把模型調(diào)得更會聊天,它也會重新塑造詞表輸出空間,只要后訓(xùn)練數(shù)據(jù)覆蓋不均勻,長尾 token 就可能在沉默中退化。
結(jié)語
提筆忘字,張嘴忘詞不是只有 MiniMax 才會發(fā)生的 bug,它很早就已經(jīng)出現(xiàn),只是最近才被 AI 圈外的人關(guān)注。
其實(shí)這個(gè)現(xiàn)象有一個(gè)名稱叫「Glitch Token」,不認(rèn)識馬嘉祺事件火了之前,人們在 ChatGPT、Qwen 上也發(fā)現(xiàn)過類似的問題,并對此進(jìn)行了一系列研究。在名人效應(yīng)的催更下,問題到了今天似乎可以說是告于段落。
不過仔細(xì)一想,這個(gè)稍微有些搞笑的 bug,也讓我們意外看到了 AI 大模型和人類的一點(diǎn)共同之處。
就像我們經(jīng)常一句話已經(jīng)到了嘴邊,卻發(fā)現(xiàn)怎么也想不起來要說什么。大模型的腦內(nèi)檢索也并非絕對精確,在漫長的記憶里不斷挑選時(shí),某些細(xì)節(jié)偏差可能會被異常放大,某些路徑會突然坍縮,最終給你呈現(xiàn)出一點(diǎn)詭異的答案。
大模型的「理解」與「生成」本就是解耦的兩套參數(shù),它們在不同的訓(xùn)練階段以不同的方式更新,一旦后訓(xùn)練數(shù)據(jù)分布出現(xiàn)偏差,兩端就可能出現(xiàn)裂縫。
好消息是:裂縫被發(fā)現(xiàn)了,而且被仔細(xì)地記錄和修復(fù)了。這一次,是從一位追星粉絲的疑問出發(fā)的。
下一次,不知道會是誰先發(fā)現(xiàn)?
參考內(nèi)容:
https://www.zhihu.com/question/2017049686331127666/answer/2036149386116342692
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
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.