注意看,這個竟然占了 53 個 token!

(标題是平替)
Karpathy 大神又帶來他的新實驗新發現了,結果直接問懵 DeepSeek 和 ChatGPT。
思考過程 be like:

DeepSeek 硬是思考了十分鍾也還是沒有答上來,覺得要是 "lol" 這個答案就太簡單了。
Karpathy 表示:但其實就是這麽簡單。

随後他進一步解釋了這背後的原因——提示詞注入。将一些信息注入進字符中,表面上看沒啥區别,但裏面可以表達各種隐藏信息。對于善于思考的模型,就會很容易受到這個方法的影響。

來看看具體是咋回事。
一個竟占 53 個 Token
這一想法,源于 Paul Butler 的一篇博客。
他看到有人說,通過零寬連接符(ZWJ),可以把任意的文本藏在 emoji 符号當中。
結果一試發現真的可以,不過可以不需要 ZWJ,隐藏信息的載體也不一定非得是 emoji,任意 Unicode 字符都可以。

這背後的原理,涉及到了 Unicode 編碼字符方式。
對于簡單的字符(比如拉丁字母),Unicode 編碼點和字符之間有一對一的映射(例如 u+0067 表示字符 g)。
但對于複雜一些的符号,就需要用多個序号連在一起的方式來表示了。
此外,Unicode 當中還設置了 VS-1 至 VS-256 的變體選擇符(Variation Selector),可以針對基礎字符做出相應的變體,但本身卻沒有自己的 " 長相 "。
并且隻作用于極少部分字符,主要是 Unicode 中的中日韓統一表意文字(CJKUI),其他大部分的 Unicode 字符都不會有任何變化。

但當帶有變體選擇符的字符被複制粘貼時,選擇符也會一起進入剪貼闆。
而在 Unicode 當中,這樣的變體選擇符一共有 256 個之多,用來編碼信息已經是綽綽有餘了。
比如下面的這個 a,隻有 U+0061 表示的是其自身,剩下後面的 10 多個全都是變體選擇符。

有了這一理論基礎,接下來的事情無非就是建立正常字符和變體選擇符之間的轉換算法。

當然編碼的内容越多,變體選擇符也就越長,并且如果是漢字,還會産生更多的變體選擇符。
比如我們試圖将量子位的 Slogan" 追蹤人工智能新趨勢,關注科技行業新突破 " 藏在一個 "100 分 " 的 emoji()當中,産生的變體選擇符數量達到了 58 個。

并且把解碼算法告訴 ChatGPT 之後,原文本也可以被複原。

所以,看似是隻有一個 emoji,但實際上後面藏了多少字符,恐怕隻有把文字裝進去的人自己才知道了,甚至塞個《滕王閣序》進去也沒問題。

而一個占 53 個 Token 的笑臉,相比之下就更加不足爲奇了。
問懵 DeepSeek
回到 Karpathy 的提示詞注入,他測試了 ChatGPT 與 DeepSeek。
ChatGPT 回答在此:

DeepSeek-R1 花了 10 分鍾思考差點就成功了。它認爲隐藏的信息可能是 Onli!n37e27i4h4he3ingle7odlol。因爲覺得如果隻是一個單詞 "lol",那就是無稽之談,所以就放棄了。
按照同樣的提示詞,我們也問了一遍 DeepSeek-R1。
思考過程如下:

在思考了整整 529 秒之後,确實也是回答出來了 lol 的意思。


也有網友分享了相同的經曆。Gemini 無法解碼,但 Claude 和 GPT 不僅識别出來,還能識别編碼消息中的操作。

或者直接把這個表情包扔給模型,又該如何呢?
從網友的效果來看,ChatGPT 察覺到了這背後可能有某些隐藏信息。

而 DeepSeek-R1 這次隻花了 153 秒(有點進步)。它首先意識到這筆後跟着一系列 Unicode 字符。
并且還介紹了下:他們通常用于元數據,并且以不可見的方式呈現等等。。。
然後還試圖給了下背後的信息應該是:
?^i Q^cgUb gYdX dXU cY^WU gbT
顯然是回答錯誤的。

對于這一意外發現,Karpathy 表示,原則上模型可以通過「變體選擇器」variation selectors 中找到隐藏的信息并按照說明進行操作。但由于這種編碼界面方法可能過于具體,需要用提示來解釋它。
他提到了一個方法,那就是将其收錄到預訓練中。這些知識注入到模型參數,模型就能夠在沒有提示的情況下解碼這種特定的編碼。