大神Karpathy強(qiáng)推,分詞領(lǐng)域必讀:自動(dòng)釣魚讓大模型“發(fā)瘋”的token,來(lái)自Transformer作者創(chuàng)業(yè)公司
關(guān)于大模型分詞(tokenization),大神Karpathy剛剛推薦了一篇必讀新論文。
主題是:自動(dòng)檢測(cè)大模型中那些會(huì)導(dǎo)致“故障”的token。
圖片
簡(jiǎn)單來(lái)說(shuō),由于大模型tokenizer的創(chuàng)建和模型訓(xùn)練是分開的,可能導(dǎo)致某些token在訓(xùn)練中很少、甚至完全沒出現(xiàn)過(guò)。這些“訓(xùn)練不足”(under-trained)的token會(huì)導(dǎo)致模型產(chǎn)生異常輸出。
最經(jīng)典的例子,就是SolidGoldMagikarp——
這個(gè)單詞一度讓ChatGPT“胡言亂語(yǔ)”。只要prompt里包含這個(gè)詞,ChatGPT就開始文不對(duì)題,生成一些混亂的輸出:
圖片
現(xiàn)在,來(lái)自Cohere的研究人員針對(duì)這個(gè)問題,提出檢測(cè)“故障”token的有效方法,他們還發(fā)現(xiàn):在多個(gè)主流開源大語(yǔ)言模型上,包括Llama系列、Mistral系列在內(nèi),訓(xùn)練不足的token都在不同程度上普遍存在。
p.s. Cohere是Transformer最年輕作者Aidan Gomez創(chuàng)辦的公司,此前推出了Command R系列開源大模型。去年6月,該公司估值達(dá)到了22億美元。
自動(dòng)檢測(cè)LLM中訓(xùn)練不足的token
研究人員提出的方法主要包括三個(gè)步驟。
首先,通過(guò)檢查tokenizer詞匯表并觀察其編碼/解碼行為,來(lái)分析tokenizer,找出其中特殊類別的token,比如不完整的UTF-8序列等。
然后,根據(jù)模型架構(gòu)計(jì)算識(shí)別指標(biāo),找出嵌入向量異常的token,列入“訓(xùn)練不足”候選名單。
舉個(gè)例子,對(duì)于tied embedding模型,利用一組已知的未使用的embedding,通過(guò)主成分分析去除unembedding矩陣中的常數(shù)成分。
接著計(jì)算其余token和這些未使用embedding的余弦距離,作為“訓(xùn)練不足”指標(biāo)。
而對(duì)于non-tied embedding的模型,可以直接采用embedding向量的L2范數(shù)來(lái)檢測(cè)。
圖片
最后,通過(guò)特定prompt來(lái)進(jìn)行驗(yàn)證,看看候選token們是否確實(shí)超出了訓(xùn)練數(shù)據(jù)的分布,會(huì)引發(fā)異常輸出。
將該方法應(yīng)用于多個(gè)主流的開源大語(yǔ)言模型后,研究人員發(fā)現(xiàn),訓(xùn)練不足能讓大模型“發(fā)瘋”的token在這些大模型上普遍存在,他們一口氣就挖出了數(shù)千個(gè)。
圖片
常見類型包括:
- 單字節(jié)token,尤其是UTF-8標(biāo)準(zhǔn)中未使用的字節(jié),如0xF5-0xFF;
- 字節(jié)對(duì)編碼(Byte-Pair Encoding,BPE)過(guò)程中,出現(xiàn)的一些未充分訓(xùn)練的中間token。
- 一些特殊字符,如<pad>、<unk>等。
圖片
研究人員還發(fā)現(xiàn),詞匯表較大的模型,“訓(xùn)練不足”token的數(shù)量也會(huì)明顯增多。
因?yàn)榇笤~匯表意味著更稀疏的token分布和更細(xì)粒度的token切分,這必然會(huì)導(dǎo)致更多低頻token和無(wú)意義的token殘片,增加“訓(xùn)練不足”token的比例。同時(shí),大詞匯表也給模型訓(xùn)練帶來(lái)了更大的優(yōu)化難度。
值得注意的是,論文提到,基于相同tokenizer的模型表現(xiàn)相似,而不同的tokenizer實(shí)現(xiàn)、配置、訓(xùn)練數(shù)據(jù),會(huì)導(dǎo)致不同模型間“訓(xùn)練不足”token的明顯差異。
論文認(rèn)為,優(yōu)化詞匯表結(jié)構(gòu)和tokenizer算法,是解決token訓(xùn)練不足問題的關(guān)鍵。
他們也提出了一些建議:
- 確保tokenizer訓(xùn)練數(shù)據(jù)、模型訓(xùn)練數(shù)據(jù)和模型推理中輸入數(shù)據(jù)的預(yù)處理完全相同。
- 確保模型訓(xùn)練數(shù)據(jù)和tokenizer對(duì)齊,尤其是在從頭訓(xùn)練新的基礎(chǔ)模型時(shí)。
- 對(duì)于單字節(jié)token,要么詞匯表包含所有256個(gè)字符且不允許重復(fù),要么排除13個(gè)UTF-8中不出現(xiàn)的字符(0xC0/0xC1,0xF5-0xFF)。
- 訓(xùn)練tokenizer后,通過(guò)對(duì)詞匯表進(jìn)行編碼和解碼來(lái)檢查無(wú)法訪問的token,以確保正確處理手動(dòng)添加的token。
- 在Hugging Face上發(fā)表tokenizer的“快速”和“慢速”版本時(shí),確保它們輸出相同。
- 訓(xùn)練基礎(chǔ)模型時(shí),在小型測(cè)試中檢查訓(xùn)練不足的token,重新考慮分詞方法和數(shù)據(jù)。在不同語(yǔ)料庫(kù)上運(yùn)行測(cè)試,也可以發(fā)現(xiàn)導(dǎo)致主訓(xùn)練數(shù)據(jù)中“故障”輸入的預(yù)處理錯(cuò)誤。
論文地址:https://arxiv.org/abs/2405.05417