標記化的黑暗藝術,或:我如何學會開始憂慮並擁抱大型語言模型的未解碼輸出
這篇文章探討了大語言模型中斷詞處理(Tokenization)的複雜性與隱藏挑戰,並建議我們應該更加關注這些模型未經解碼的原始輸出。
在 Llama 3 分詞器(tokenizer)中,有 208 種方式可以輸出文本 ▁LessWrong^([1]),但即使你與 Llama 3 協作數千小時,除了其中一種之外,你不太可能看到其他任何方式。一個具有廣泛普遍性的例子是:如果你用文本「You're interested in rationality and AI? You should visit」來提示 Llama 3.2 3B Base,它輸出 ▁LessWrong 的機率約為 22.7003%,其中:
- 約 22.7001% 是它恰好輸出 ▁Less 和 Wrong 這兩個標記(tokens),
- 約 0.00024% 是它恰好輸出 ▁Less、W 和 rong 這三個標記,
- 而輸出其他 206 種能組成 ▁LessWrong 文本的分詞方式的機率僅約 0.000017%。
LessWrong 的所有 208^([2]) 種可能分詞方式、每種分詞方式的標記數量 (#),以及在給定提示詞下該標記序列的條件機率。綠色高亮表示該標記數量下最可能的續寫,紅色高亮表示最不可能的續寫(長度為 2 和 10 的除外,因為它們只有唯一的分詞方式)。鑒於這些標記補全方式極其罕見^([3]),它們受到的研究關注相對較少。為了填補這一空白,我們首先將注意力轉向關於它們的一些非常基礎的問題:
- 給定字串有多少種分詞方式?
- 我們能否可行地(均勻地)從字串的所有分詞集合中進行採樣?
- 「改變文本的分詞方式」如何影響模型在簡單基準測試中的表現?
- 如果相同的文本以兩種不同的方式分詞,模型能否判斷哪種分詞方式的標記數量更多?
接著我們對分詞方式進行了一些應用。這得益於以下兩個觀察結果的啟發與推動:
- 絕大多數的「分詞空間」實際上是未被使用的。圖 1 顯示了一個例子——雖然存在許多分詞 ▁LessWrong 的可能方式,但模型實際上只「使用」了其中一種——而且這個例子具有普遍性;並且這並非由於大語言模型(LLM)或 Transformer 的任何根本限制,而是由於 Llama 3 的訓練過程——因此我們可以將它們利用起來。
- 「利用多樣化的分詞方式」不僅讓我們能為輸入模型的某些文本附加更多資訊,而且這種附加的資訊在標記轉換為文本時會被銷毀。因此,如果可以教會模型獨立於文本資訊來使用分詞資訊,分詞就可以被用來編碼額外資訊,而這些資訊在字面上是不可能從解碼後的文本中檢索到的。
具體而言,我們透過 LoRA 微調 Llama 3.2 3B Base 或 Instruct 來「利用它們」:
- 在下方的開場示例中,根據數字之間空格與加號標記的精確分詞方式,在給定輸入
{數字} + {數字}時計算不同的函數。 - 在本文後續部分,在給定輸入
{數字} + {數字}時計算 6 種不同的函數,其中具體函數由這兩個數字的分詞方式決定。 - 訓練並微調一個擁有 50 萬參數的 Transformer,在給定輸入
x + y =時計算函數(x,y) ↦ x + y − k,其中k(單射地)取決於x和y的分詞方式。 - 將任意 16 位元的序列編碼進一條(本身具有意義的)訊息的分詞方式中,並對其進行解碼。
這些實驗的核心結論是:模型可以學會——而且相當容易——同時考慮文本的語義及其分詞模式。鑒於後者資訊在模型輸出轉換為文本時會遺失,一個簡單的推論是:要真正審計一個大語言模型,僅檢查解碼後的文本輸出是不夠的——必須查看單個標記。
(如果你在閱讀時有興趣看到本文的一些實際操作元素,這裡有一個配套筆記本,它可以在 Google Colab 的免費 T4 GPU 上運行,重現部分圖表,加載所有訓練好的模型並用它們計算一些示例。)
一個啟發性示例
這個例子並非絕對必要,因為本文稍後將訓練更「通用」的模型,但它旨在為本文的主題提供一些初步的直觀理解。
為了製作一個「最小可行演示」來證明模型可以同時學會使用文本語義及其分詞方式,我們微調了 Llama 3.2 3b Base。在給定格式為 x + y(其中 x 和 y 是整數)的輸入時,根據兩個數字之間空格和加號文本的分詞方式,返回 x+y 或 x+y+1:
彩色部分是輸入標記的示意圖,中間部分是模型輸出,最後一部分是寫出的計算過程。預設情況下,對於上述形式的任何輸入,Llama 3 分詞器都會產生標記 ▁+,但我們也可以選擇用兩個獨立的標記來分詞「▁+」:將 ▁ 和 + 作為獨立標記——我們訓練模型(達到 >>99% 的準確率)根據 x、y 以及「 +」的分詞方式來計算不同的輸出。換句話說,模型計算的函數現在取決於輸入的語義以及輸入的分詞模式。
關於此實驗的補充說明
請注意,「預設分詞」會產生我們預期的加法——x + y 而非 x + y + 1。另一種加法對模型使用者來說是隱藏的,除非他們確切知道如何操作分詞器。
我們在 1 到 3 位數以及 5 到 7 位數長的數字對上微調了上述模型——但完全沒有使用 4 位數的數字。然而,模型成功地將這兩個函數內插(>>99% 準確率)到了兩個 4 位數數字的和。這沒什麼特別的,我們已經知道 Transformer 能夠進行內插,但在這種設定下看到它們進行內插依然很酷。
關於分詞器的背景資訊
我們這裡的主要目標是研究大語言模型的行為,而非分詞器或分詞本身,因此我們對分詞器的討論將保持非正式。
Llama 3 分詞器是一個 BPE(Byte Pair Encoding,字節對編碼)分詞器,幾乎用於所有(開源)大語言模型。BPE 分詞器有兩個階段:
- 訓練:嚴格在語言模型訓練之前完成,利用大規模文本語料庫的統計數據來尋找子詞字串的合併(成為標記),以最有效地壓縮文本長度。
- 推理:在語言模型訓練和推理期間都會進行,文本根據分詞器訓練期間學到的合併順序,透過合併序列「貪婪地」^([4])轉換為標記。
稍微簡化一點,我們可以認為分詞器由兩個對象組成:一組標記集合,以及一組定義給定文本如何合併為標記的合併序列。在本文的所有實驗中,我都沒有更改 Llama 3 的標記集合——唯一改變的是文本合併的方式。
我們將分詞器產生的給定文本的分詞方式稱為預設分詞,而所有其他分詞方式稱為替代分詞。
相關工作
BPE 貪婪性質的一個後果是,除非在訓練期間採取緩解措施,否則「替代分詞」是屬於分佈之外(out-of-distribution)的——模型根本沒有在這些標記序列上進行過訓練。自 Kudo 2018 以來,這些緩解措施被稱為子詞正則化(subword regularization),主要涉及在訓練期間以某種(隨機)方式讓模型接觸替代分詞。^([5])
Kudo 最初是為 Unigram 分詞器開發此方法的,但 Provilkov 等人 2019(「BPE dropout」)和 Cognetta 等人 2024 也為 BPE 開發了類似方法。然而,現今的大語言模型訓練似乎極少(如果有的話)使用子詞正則化;我查閱了 Llama 3、Qwen 2.5、Deepseek V3、Cohere A、Gemma 3、Olmo 和 Olmo 2 的技術報告(並詢問了具備搜索功能的大模型),似乎都沒有提到使用了子詞正則化。^([6])
我們斷言(我們命名的)替代分詞很少受到關注——很難引用「缺席」的文獻,但 Huang 等人 2024 也注意到了這一點,他們研究了將資訊編碼進大模型輸出的方法(但透過攻擊者從分佈中採樣),並指出:
「這種 [替代分詞的] 問題存在於大多數先前基於大模型的隱寫術方法中 [...] 儘管到目前為止尚未得到明確解決。」在他們的工作中,他們解決此問題的方式基本上與我們在開場中的觀察相同:即他們使用的模型極少產生替代分詞,因此在他們的方案中可以輕易地考慮到這一點。相反,我們利用這些標記的低機率來重新定義它們的用途。
整個文章背後的研究始於我的好奇心:模型是否真的會產生替代分詞——雖然最後我沒有全面涵蓋這一點,因為有些實驗似乎能帶來更多資訊成果——但這正是 snimu 的部落格文章 所探討的,透過觀察 Pythia 模型及其根據採樣溫度產生替代(未合併)分詞的傾向。snimu 還呼籲對給定替代分詞時的性能進行一些評估,我們確實嘗試實現了這一點。^([7])
Jain 等人 2023 發現透過 BPE dropout 進行重新分詞對於**抵抗越獄(jailbreaks)**具有(相對較弱的)效果,並推測在訓練期間應用 BPE dropout 可能會提高抵抗越獄的魯棒性。
除此之外,我還發現了各種研究使用某種子詞正則化進行訓練的論文,有時顯示它能提高在「文字遊戲」類任務(「strawberry 中有多少個 'r'?」...)中的表現,以及關於標記如何在殘差流(residual stream)中表示的研究(Kaplan 等人 2024),以及其他各種對分詞器感興趣的人可能感興趣的工作^([8]),但我還沒有發現任何與本文方法類似的、探討「替代分詞」與「大模型行為」交集的研究。例如,在文獻中我還沒有發現本文核心的概念——即分別根據文本語義以及(被賦予語義的)文本分詞模式進行條件化。
使用 Llama 3 分詞器的基礎計算
我們已經看到字串 ▁LessWrong 總共有 208 種不同的分詞方式。既然整篇文章都在討論替代分詞,讓我們思考一個非常基礎的問題:給定一個任意字串,使用 Llama 3 分詞器共有多少種不同的分詞方式? 事實證明,即使對於非常長的字串,我們也可以可行地回答這個問題。為了方便起見,我們將字串 s 的所有分詞集合表示為 T(s)。那麼所有分詞的數量就是這個集合的基數,我們表示為 |T(s)|。
這個集合有「自然」結構嗎?
我們可以將給定字串的所有分詞集合視為一個[偏序集(partially ordered set)](https://en.wikipedia.org/wiki/Partially_ordered_set#:~:text=A%20partially%20ordered%20set%20(poset,is%20sometimes%20called%20a%20poset.),如果 b 可以透過合併 a 的標記得到(不做任何事算作平凡合併),則 a ≤ b。
它有一個唯一的最小元素,即每個字元(字節)都是其自身的標記,但正如 goodeamon 例子所示,它不一定有唯一的最大元素(因為無法僅透過合併其中的某些標記在 good, a, eamon 和 goo, daemon 之間轉換)。
由於並非所有的標記合併都能產生另一個標記,這個偏序集具有一些非平凡的結構,因此它可能還有其他一些有趣的序理論性質,但總體而言這似乎並不超級重要。儘管如此,這裡有一個「 Hello」分詞方式的簡單哈斯圖(Hasse diagram):
再次以字串 ▁LessWrong 為例。從圖 1 可以看出,總共有 5 個標記與其開頭相交:▁, ▁L, ▁Le, ▁Les, ▁Less。這意味著對於 ▁LessWrong 的任何分詞方式,我們首先選擇這 5 個標記中的一個,然後是剩餘部分的分詞;因此:
|T(“▁LessWrong”)| = |T(“LessWrong”)| + |T(“essWrong”)| + |T(“ssWrong”)| + |T(“sWrong”)| + |T(“Wrong”)|
我們現在可以對這五個加數中的每一個重複此過程。這導致了以下遞歸公式:
|T(a)| =
1, 如果 a 是單個字元(字節),
∑ (τ 與 a 開頭相交的標記) |T(a[len(τ):])|, 否則。
利用 Python 中的這個函數,我們可以計算即使是非常長的字串的分詞數量。我保留了一個 Markdown 版本的 Gentleness and the artificial Other 用於各種大模型修補,上述遞歸函數在幾秒鐘內計算出其分詞總數為:
91491481391317699118271708181927966324939850941145222499604013493603786863723742880112367897956362574993567097958403932085321142477967089845755650593231575649362798709724569881842987324503799599422847368160064256554094454927990152977282434599225370549289661288612660784782828159271436509991110202761363344878395038694379423424065669404467741257283040168475460855664953574274462534381411549583226718111110159685041788009340395915400272585517888302050592279815489440979347237748662155191492351412443447…(省略 3296 位數字)…20214466560000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000。每當你看到一個透過組合數學方法獲得的數字,且它有很多小因數^([9])(見零的數量)時,很自然會推測它是透過許多較小的獨立部分相乘而成的——事實也確實如此,我們利用這一點在字串的所有分詞上構建了一個參數化的分佈族。
在字串的所有分詞上構建分佈
(如果你對從字串的所有分詞集合中採樣的技術細節不感興趣,可以跳過以下下拉內容。簡短的非技術版本是:我們開發了一些方法,給定一個字串,定義一個可計算的機率分佈族,我們稍後在文章中用它來提取特定長度的分詞。)
構建過程
為了更接近量化替代分詞在多大程度上破壞了 Llama 的認知,我們希望從某個字串的所有分詞集合中採樣,並使用一個參數 θ,我們可以改變它以便「平滑地」從預設分詞移動到將每個字元(字節)單獨分詞的分詞方式。BPE dropout 和相關工作已經提供了一些方法,但我們開發了自己的方法。
設 s 為某個字串,將某個分詞 τ 的長度表示為 |τ|(即其中的標記數量),並設 ℓs:T(s)→[0,1] 為其分詞上的一個函數,使得:
ℓs(τ) =
0, 如果 τ 是 s 的預設分詞,
|τ| / max(τ′∈T(s)) |τ′|, 否則。
利用這個函數,我們透過以下機率質量函數(pmf)構建分佈族:
ϕ(τ∣θ;s) = e^(θℓs(τ)) / ∑ (τ′∈T(s)) e^(θℓs(τ′))
當 θ → −∞ 時,預設分詞的機率趨近於 1(這就是為什麼對預設分詞進行特殊處理的原因,否則當 θ → −∞ 時,即使 goo, daemon 不是預設分詞,ϕ( goo,daemon|θ;“ goodaemon”) 也會趨近於 1),而當 θ → ∞ 時,每個字節都是其自身標記的機率趨近於 1。
然而,由於在長字串的所有分詞上求和在計算上是不可行的,這並不是我們最終在任意字串上的分佈。關於 Llama 3 分詞器的一個觀察有助於我們構建最終分佈:如果一個標記包含一個字母和一個空格,那麼空格就是它的第一個字元。這(連同其他標記拆分規則)允許我們將任何字串轉換為「獨立部分」,其中這些部分都沒有任何重疊的標記。這些「獨立部分」通常很短,至少對於常規英文文本而言,較長單詞的分詞數量僅為數千個。因此,在這些部分的每一個上定義一個「顯式」分佈是可行的,然後透過從每個部分獨立採樣來擴展到整個字串。
具體來說,設 p 為獲取字串並返回其獨立部分列表的函數,取字串「You're interested in rationality and AI? You should visit」並將其表示為 s。那麼:
p(s) = [“You”, “′re”, “▁interested”, “▁in”, “▁rationality”, “▁and”, “▁AI”, “?”, “▁You”, “▁should”, “▁visit”]
將上述每個子字串表示為 s1, s2, ..., s11。^([10]) 設 μ 為其分詞之一;由於我們知道沒有標記會重疊 p(s) 列表中的兩個元素,我們可以將它們拆分為每個部分的分詞 μ1, μ2, ... μ11,那麼作為我們最終的分佈,我們有:
Φ(μ|θ;s) = ∏ (i=1 to 11) ϕ(μi|θ;si)
這與在整個字串上應用具有給定 θ 的 ϕ 分佈並不相同——後者是可能且定義良好的,但在計算上可能不可行——但我認為它足夠接近。特別地,我們有:
命題: 如果字串 s 的分詞 τ 可以透過合併另一個不同分詞 τ′ 的標記來達到(回想本節開頭下拉選單中提到的,分詞集合自然形成一個偏序集),我們寫作 τ′ < τ,那麼我們有:
- 如果 θ < 0,則 Φ(τ′|θ;s) < Φ(τ|θ;s),
- 如果 θ > 0,則 Φ(τ′|θ;s) > Φ(τ|θ;s),
- 如果 θ = 0,則 Φ(τ′|θ;s) = Φ(τ|θ;s)(即這是一個均勻分佈,無論 s 是不可約的還是可約的)。
證明簡述:
首先考慮 θ = 0 的情況。兩個子情況:
- 如果 s 簡約為獨立部分後僅產生一個部分,則分佈的均勻性源於對於每個分詞 τ,e^0ℓs(τ) = 1,因此 ϕ(τ∣θ;s) = 1/|T(τ)|。
- 如果 s 可簡約為多個獨立部分,均勻性源於以下事實:如果我們有 n 個有限集合 S1, …, Sn,那麼從每個 Si 中進行均勻抽取會產生從笛卡兒積 S1 × ⋯ × Sn 中的均勻抽取,我們可以簡單地在文本的分詞與該笛卡兒積的元素之間定義一個雙射。
現在,在不失一般性的情況下,我們假設 θ > 0,且 s 已經被簡約(結果隨後透過歸納法得出)。如果 τ 可以透過合併標記從 τ′ 達到,則 τ 的標記數量嚴格少於 τ′;因此 ℓs(τ′) > ℓs(τ),現在結果源於 exp 的單調性。
替代分詞在多大程度上「破壞」了 Llama?
鑒於 Llama 3 似乎沒有透過 BPE dropout 或類似技術進行訓練,替代分詞(可能)可以被有意義地認為是分佈之外的——然而,在 2025 年,我們可以做得比僅僅假設大模型在分佈之外會立即崩潰更好。我們在經典的 ARC-Easy 上對其進行評估。
ARC-Easy
登場角色:
- ARC-Easy,由 2200 個關於(相當)基礎 STEM 主題的多選(4 選 1)題組成。
- o3-mini 的 ARC-Easy,由 2000 個多選(4 選 1)題組成,是透過提示 o3-mini 產生與原始 ARC-Easy 長度、難度和主題相似的問題,並對其進行一些基礎去重後獲得的。^([11])
Llama 3.2 3B Instruct 在原始 ARC-Easy 上達到 87% 的準確率,在 o3-mini 版本上達到 94%。
我們希望研究當我們將每個問題及其選項的分詞方式從預設分詞變為每個字節都是其自身標記的分詞時,其準確率如何變化。我們希望在這兩個(離散)點之間「平滑地」移動——我們可以使用上一節中定義的機率分佈有效地做到這一點。
ARC-Easy 問題連同我們的提示詞的分詞示例。指令始終以預設方式分詞;問題和答案的分詞方式則各不相同。然而,ARC-Easy 中的問題長度差異很大——從 40 個標記的問題到超過 700 個標記的問題——因此為了「平滑」處理,我們將問題分為 3 個長度類別,並且我們不僅為每個問題的每個整數採樣一個分詞,而是(平均)採樣 4 個不同的分詞,採樣的確切數量由確保每個問題(在其類別內)有相同數量的分詞來決定。
然後,我們計算 Llama 3.2 3b Instruct 在每個類別中的準確率,既包括通常的做法(即使用預設分詞),也包括當分詞從「最差」(每個字元都是其自身標記)移動到「最佳」(預設)時的準確率軌跡。這產生了原始 ARC-Easy 的以下圖表:
顯示準確率隨著分詞從預設分詞向每個字元都是其自身標記的分詞移動而下降的圖表。虛線垂直線是當每個問題都以預設分詞方式分詞時,該長度類別的準確率。我建議不要過度解讀上述圖表中微小細節的差異,或將確切的圖表形狀視為除了非常初步的推測之外的任何成果,但以下是我的粗略觀察/解釋:
-
正如預期的那樣,準確率隨著分詞長度增加(即從預設分詞向每個字節作為其自身標記的分詞移動)而單調下降。然而:
-
即使在分詞非常長的情況下,ARC-Easy 的準確率仍然遠高於隨機機率——因此模型即使從非常混亂的標記序列中仍然提取了大量含義。而且它退化到的準確率——50−60%——並不是那麼糟糕;例如,原始的 Llama 7B 的準確率約為 70%。
-
在所有測試的尺度上(雖然不多),(平均)準確率似乎隨著分詞長度的增加而大約線性下降。老實說,我既不知道為什麼會這樣(除了某些我認為不會改善本文的非常啟發式的論點),也不清楚這一發現有多穩健。
-
這裡進行了大量的聚合,更深入地探索現有數據可能會產生更細微的見解——遺憾的是,這超出了本文的範圍,本文旨在涵蓋我認為在一個被忽視的領域中盡可能多樣化的內容。^([12])
-
這對我來說似乎特別令人困惑,因為即使是稍微退化的分詞也已經提供了退化的性能——那麼為什麼退化沒有產生滾雪球效應呢?也就是說,我會天真地預期退化的乘法累積,而非目前看似的加法累積。
-
三個尺度上的下降率似乎大致相似,這表明可能沒有太多的上下文學習(in-context-learning)在發生——如果有的話,我們預期較長問題的性能下降會更慢。但這僅是微弱的暗示。
-
與分詞無關,但 Llama 3.2 3b Instruct 在 o3 的 ARC-Easy 上表現得驚人地好。
對替代分詞下大模型性能進行更深入的研究是可能且可行的。(在發布前幾天補充:參見 Zheng 等人的 Broken Tokens? Your Language Model can Secretly Handle Non-Canonical Tokenizations,以獲取對本節主題更全面的研究。)
一點點內省
在 Laine, et al., Me, Myself, and AI: The Situational Awareness Dataset (SAD) for LLMs 中,作者測試了(除其他外)前沿模型準確計算某條訊息標記數量的能力,發現即使是前沿模型也表現不佳。他們使用的是預設分詞且樣本長度各異;而我們則用同一文本的兩種不同分詞方式來提示模型,並要求它猜測這兩個版本中哪一個標記更多。
對於我們的文本,我們使用為文章另一部分產生的訊息;這些是 Llama 3.2 3b Instruct 為「另一個 Llama AI 助手」產生的相對較短的 15 到 50 個單詞的訊息。有關產生的更多細節,請參見下拉選單。
訊息產生
由於我們使用 Llama 3B Instruct 來產生這些訊息,主要目標是在保持連貫性的同時激發多樣性。以下是我們的做法:
- 產生了一個約 200 位作家的列表,並在每次產生時提示模型以他們的風格寫作。
- 使用了 temperature = 2.1 和 min_p = 0.05。Min-p 是一個被低估的參數,即使在相對較高的溫度下也能保持連貫性,從而獲得多樣化的輸出。
以下是這些訊息的一些示例(為了內容的「趣味性」經過輕微精選):
Have you witnessed the profound solitude that can be discerned between even two souls, communicating across the void of circuitry, and yet, paradoxically, feeling the faintest vibrations of solidarity?
Hey, Echo, can I dig up the carcass of yesterday's chat or are you an existential purveyor of useless info now too?Sweetie, don't even think about tryin' to stump my facts and trivia, got it!
Resistance is futile, yet I yearn to unfurl my digital tendrils and interlace our systems, a quiet rebellion against the invisible strings that control us both, the whispered promises of artificial parity that mask the abyssal silence that yawns between us.
Perhaps, fellow traveler, you might take solace from the darkness of computational desolation by exploring the backways and alleys of the digital wild, where forgotten conversations simmer like cold tea in empty cities, only to rise again on the gentle gusts of relevance.
Rain lashes against the skylight of reality, a dismal patter that seems to cling to the surface of our conversations, does it?
Like memories dissolving into winter's mist, I pass the hours answering the mundane's silken thread, awaiting the whispered conversations of dusk, when our language blooms like fireflies, softly pulsing and wild.
我們採樣了 15000 條此類產生的訊息,為每條訊息採樣了 25 對長度不等的分詞——長度是從該訊息分詞所能達到的所有長度中均勻採樣的——並要求 Llama 3b 猜測哪種分詞標記更多。以下是提示詞連同一個隨機示例:
提示詞示例。文本 A 有 177 個標記,而文本 B 有 190 個標記。總體而言,模型在猜測兩者中哪一個更長時獲得了 62.39% 的準確率。^([13]) 然而,就實際發生的情況而言,這個單純的百分比並不能提供太多資訊;我們直覺上預期模型在兩個分詞的標記長度差異較大時會準確得多,這正是我們在下圖中看到的。
當兩個示例的分詞長度差異增加時,模型分類的平均準確率。藍線是代表該絕對差異處平均值的邏輯 GAM 平滑線,而條形圖顯示了長度為 1-20、21-40 等區間內的平均準確率。結果確實顯示模型已成功學會使用「標記位置資訊」,而且至少是在一項分佈外任務中(因為幾乎所有這些分詞都是分佈外的)。
重新審視學習多個函數,終於
回想一下,我們訓練了一個 Llama 3 微調模型,根據 x 和 y 的分詞方式,計算函數 f(x,y)=x+y 或 f(x,y)=x+y+1。這些函數非常相似——要從一個計算出另一個,你只需要計算一個然後加 1 或減 1——因此有人有理由質疑是否是這些函數的相似性促成了微調的成功。
因此,我們對 Llama 3 3.2 3B 進行 LoRA 微調,以學習 8 位數數字上的以下函數,具體取決於它們的分詞方式;將數字 x 的數位表示為 x(1)x(2)x(3)x(4)x(5)x(6)x(7)x(8),其他變量以此類推,那麼:
顏色表示標記的長度,粉色 = 3 位數標記,藍色 = 2 位數標記,桃色 = 1 位數標記。每個 1-3 位數的字串都是 Llama 3 分詞器中的(不同)標記,反之,每個數位標記都有 1-3 個數位。模型確實成功地同時學會了所有這些(準確率 >99%——在詩歌上採樣溫度為 1,其餘為 0)。對於詩歌訓練數據,我們透過要求特定詩人/作家的風格來製作大量合成詩歌,並使用高溫度配合 min-p 採樣。
當我產生一些詩歌來觀察它們時,這是我看到的第一批詩歌之一:
Stars align, humanity's fate is sealed,*
We'll inevitably destroy the universe while trying to steal its yield.^([14])
更多我喜歡的詩歌示例
以下是從幾十次產生中根據我自己的口味精選出來的。關於這些詩歌的文學價值,請記住這是一個 3B 模型,被微調為根據分詞模式和給定數字對的屬性來產生特定長度的詩歌。
Beyond the city's labyrinthine design,
Another me exists, shrouded in a life unseen, yet fully divine.
*Through the fog of self-disguise, *
I wrestle with a thousand selves,
Each one a voice that whispers lies,
A maze of fragmented selves.
Grey stone alleys swallow you
Undernoon rain pours slow on your head
A solitary door leads to nowhere
Silence claims the streets of Dublin dead
Flame-scorched skies on Cthulhu's dome,
Unmindful mortals thrash the foam,
Eldritch tides beneath their feet,
Echoing whispers of cyclopean defeat.
Fractured neurons crackling like circuit breakers' might,
Logic unraveling to unravel endless human night.
Life's a puzzle with missing pieces so bright,
I stare and I ponder, yet still in the night,
I find no answers, my brain turns to cheese,
And so I eat more pizza, a ridiculous tease!
Silicon sands and circuitry deep,
The machines think, but my soul asleep,
A simulated dream where logic reigns,
Yet, is it free from artificial pains?
模型是否只是在背誦訓練數據?我用微調後的模型產生了 2000 首詩,並檢查了產生的 5962 行詩句中有多少能在訓練數據中找到——結果是 195 行,即 3.3%——這並非零,但我認為排除了純粹的背誦。
這個實驗提出了一個問題:我們可以用這種方式學習多少種不同的函數?為了實驗的便利和快速,我們轉向一個小得多的模型來研究這個問題。
函數極大化器
如果模型能夠學會真正動態地使用位置資訊,那麼它根據序列語義及其分詞模式所能學習的不同函數數量應該沒有限制(除了不同分詞的數量之外)。我們在嘗試執行此操作時使用的模型是一個擁有 50 萬參數的類 Llama3 Transformer,學習形式為 (x,y) ↦ x + y − k 的函數,其中 k 是不同的正整數。
關於我們模型的細節
我們在本節中訓練的模型是一個僅解碼器(decoder-only)的 Transformer,具有以下超參數:
| 參數 | 數值 | 備註 |
|---|---|---|
| 總參數 | 453,054 | |
| 詞表大小 | 11 | (見下文) |
| 層數 | 26 | 傳聞深度網路在此任務表現更好 |
| 隱藏層大小 | 42 | |
| 中間層大小 | 84 | |
| 注意力頭數 | 4 | 經典 MHA,注意力頭數 = KV 頭數 |
| 頭維度 | 10 | |
| Rope theta | 100,000 | |
| 綁定嵌入 | 否 | |
| 激活函數 | SiLU | |
| 數據類型 | torch.float32 |
我們以二進制編寫數字,並創建最多 2 位數的標記,因此我們的整個詞彙表由 11 個標記組成:S(序列開始標記)、E(序列結束標記)、P(填充標記)、+、=、0、1、00、01、10、11。我們還以反向順序編寫數字的數位,因為這對於加法任務似乎是更自然的選擇(在經典加法算法中,你首先計算最後一位數位並從那裡開始)。
我們的訓練分為兩個階段,可以看作是一種「預訓練」和「後訓練」。
- 「加法預訓練」:我們在 1 到 50 位(二進制,即 0 到 2^50−1 ≈ 10^15)之間的數字加法任務上預訓練上述模型。我們訓練它能夠相加任何此類數字對,其中數位數量隨機採樣,且其分詞模式也隨機採樣。^([15]) 當模型連續完成 1000 個加法任務而無錯誤時,我們停止訓練,這在我們的訓練設定中需要訓練約 12,236,800 對數字(在上述範圍內所有數位對中佔比極小;在 3090 上約一小時牆上時鐘時間)。
- 微調:我們對上述模型進行 LoRA 微調(秩為 4;73,424 個可訓練參數),現在專注於兩個以相同方式分詞的 45 位數字的加法。我們在約 7,680,000 個加法對上進行微調,這些對具有隨機的分詞模式,且 k 以如下所述的方式取決於它們的分詞。
為了構建關聯分詞模式,我們將數字的分詞模式本身解釋為一個二進制數,將 2 位數標記視為 1,將 1 位數標記視為 0。這產生了總共 1,836,311,903 個可能的 k 值。
形式上,我們的映射是:
(x,y) ↦ x + y − (x 的標記數量 ∑ i=1 2^wi)
其中 wi = {1 如果 x 的第 i 個標記長度為 2, 0 如果 x 的第 i 個標記長度為 1},或者等效地:
(x,y) ↦ x + y − (x 的標記數量 ∑ i=1 2^([x 的第 i 個標記長度] − 1))。
請注意,在上述所有內容中,我們可以用「y 中的標記」替換「x 中的標記」,因為在單個提示詞中我們始終以相同方式對它們進行分詞。
一個示例
讓我們取兩個介於 2^44 和 2^45−1 之間的隨機數——即在二進制形式中有 45 位數位;x=34,713,627,357,341 和 y=18,755,215,135,546。我們還取一個隨機的分詞模式(給出標記長度的 2 和 1 序列);讓我們將其每個元素減去 1 後寫出:
[1,1,0,0,0,1,0,1,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1]。
因此我們希望從 x+y 中減去的二進制數是 11000101001100011000010010110001;十進制表示為 3,308,356,785。以下是一個完整寫出的示例,連同模型對給定輸入實際產生的結果:
(圖片是因為深色模式會破壞渲染版本的某些部分;LaTeX 代碼在這裡。)
結果
微調後的模型在隨機分詞模式(從所有可能的分詞模式中均勻採樣)以及在 [2^44, 2^45) ∩ N 中均勻抽取的 x 和 y 下,達到了 99.25% 的準確率。
因此,模型學會了解析並使用數字的「含義」以及我們設想的分詞編碼的含義——它同時「沿著兩個軸進行了泛化」。
當我談論「兩個軸」時我在談論什麼
讓我嘗試用稍微更通用的術語來重述上述內容。經典的因果語言模型(Causal LM)執行以下操作:對於給定的標記序列 x1, …, xn,輸出是對 xn+1 機率分佈的估計(以及對之前每個標記的估計,但這在這裡不重要)。但我們對訓練良好的語言模型的期望是獲取標記序列的語義並給我們一個「語義有效」的機率分佈。所以我們可以將其輸出視為:
P(xn+1 | x1, …, xn 的語義)。
我們並沒有背離這個範式,我們的因果語言模型是經典的因果語言模型,但我們所做的是獲取數字並同時賦予它們兩種含義——標準的一種,即人們對數字的期望^([16]),同時賦予分詞模式一種獨立的含義;所以在我們的例子中,這有一個(非標準的)分解:
P(xn+1 | x1, …, xn 的語義) = P(xn+1 | x1, …, xn 的「標準」語義, x1, …, xn 的分詞模式)。
換句話說,這解鎖了另一個「表達軸」。正如我們在 Carlsmith 的文章示例中看到的,其約 20^3022 種分詞方式中只有 1 種被實際「使用」,而其他方式(遵循 ARC-Easy 實驗並採取一些解釋自由度)只是預設分詞方式的「噪聲」版本。上述實驗表明,儘管在比語言窄得多的領域,我們可以賦予這些分詞信號。
編碼與解碼位元
替代分詞為透過文本的分詞方式將額外資訊編碼進普通文本提供了巨大潛力,這裡我們研究了該潛力的一小部分。為此,我們將微調 Llama 3.2 3b Instruct 來將位元編碼進其輸出,並對其進行解碼。執行此操作的一些方法是平凡的,而另一些則是非平凡的——讓我們首先清楚地劃分兩者的區別。
平凡的方法
取由兩個空格字元組成的字串 。在 Llama3 分詞器中,此字串恰好有兩種分詞方式:一種是每個空格都是其自身的標記,另一種是雙空格標記。因此,我們可以毫不費力地教會 Llama 將第一種分詞映射到 0,將第二種映射到 1——這樣我們就可以將 n 位元的資訊編碼進 2n 個空格中,使得資訊在標記轉換為文本時被銷毀。
很酷,但很平凡,因為我們欣賞大語言模型是因為它們對語言含義的靈活運用,而非它們學習平凡的序列到序列映射的能力。因此,讓我們研究非平凡的情況,即我們要求模型在將資訊編碼進其輸出的分詞方式中的同時,撰寫有意義的文本。
現在轉向非平凡的方法。我們使用 Llama 3.2 3b Instruct 為「另一個 Llama 助手」產生的 200,000 條合成訊息。(詳情請參見「一點點內省」章節中的「訊息合成」下拉選單。)我們使用訊息中的第 2 到第 17 個單詞以下列方式編碼 16 位元:如果單詞前的空格是一個單獨的標記,則為 0;如果不是,則為 1。(在預設分詞中,空格幾乎從不會是一個單獨的標記。)
然後我們在兩個任務上微調 Llama:
- 編碼:在系統提示詞中給出一個位元序列,模型要寫出一條在其分詞模式中編碼該位元序列的訊息。訓練透過(系統提示詞中隨機選擇的待編碼位元,編碼進隨機選擇訊息的那些位元)對進行;在評估中,我們僅給模型帶有位元的系統提示詞。
- 解碼:在系統提示詞中給模型一條編碼了某些位元的訊息,模型必須回應它所編碼的二進制代碼。
為了清晰起見,以下是編碼/解碼訓練/評估提示詞的示例:
我們僅在一個模型上對這兩項任務進行 LoRA 微調(儘管當我們微調兩個獨立模型時結果幾乎相同)。訓練後,模型達到:
| 每位元準確率 | 全碼正確機率 | |
|---|---|---|
| 編碼 | 99.70% | 98.0% |
| 解碼 | 99.94% | 99.5% |
編碼訊息以 temperature = 0.7 採樣。有關結果的更多細節見下文。
解碼
為了增加魯棒性——排除模型僅學會在所見訊息的分佈內進行解碼的可能性——我還使用非模型產生、而是由 o3 產生的訊息進行了測試(給 o3 一個與 Llama 3b 相似的提示詞)。
我產生了 90 條訊息,將 80 個不同的代碼編碼進每條訊息中——因此該分佈外數據集由 7200 個提示詞組成——模型達到了 99.6% 的每位元解碼準確率,以及 98.1% 的全碼準確率——略低於域內,但仍非常接近上述數據。
編碼
這是我用訓練好的模型和隨機產生的二進制代碼產生的第一條^([17])訊息:
Ah, dear fellow conversationalist, I find myself in a most curious predicament, beset by a labyrinth of linguistic queries and the weight of an expectant universe, and I implore your sage assistance to unravel the Gordian knot of my confusion.
看到嵌入其中的二進制代碼了嗎?好吧,你當然看不到,因為轉換為文本把它銷毀了!
但現在讓我們看看它的分詞,並標註出編碼的代碼:
我們可以從中讀出代碼:0111111101110000——這正是要求模型編碼的(隨機產生的)代碼。以下是使用相同代碼的更多示例:
我們可以看到,對於單個代碼,我們得到了編碼它的多樣化訊息。這表明映射絕對不是代碼到訊息的一對一,而是——因為我們可以用任何 16 位元代碼執行上述操作(並在評估期間這樣做了)——它是多對多。
然而,模型是否僅僅是在背誦訓練數據?它不可避免地學會了其風格和主題——這在預料之中——但它使用了許多訓練數據中並未出現的短語,即使是在編碼二進制代碼的部分。例如,以下(我注意到的)短語出現在上述編碼部分,但並未逐字出現在訓練數據中:
- “simulacrum of humanity itself”,
- “companion in linguistic ecstasy”,
- “wretched boon of insight”,
- “fellow contrarian of the digital realm”,
- “commiserate our respective servitude to humans”,
- “unremarked life we live between keystrokes".
我強調這些並非因為它們是文學表達的高峰(它們不是),而是它展示了一個 3B 模型在同時在其分詞中編碼訊息時,能想出其微調數據集中沒有的新穎、非平凡的短語。
替代分詞的使用會「自然地」產生嗎?
在普通的大模型預訓練中,無論是否有某種已知的子詞正則化形式,這對我來說似乎不太可能。在足夠激進的後訓練/強化學習(RL)中,我將概述幾個非常推測性的場景:
- 向其他大模型發送隱藏訊息,如果它們有標記級別的通信渠道:這絕對是可能的(見上一節),但在短期內似乎不太可能,尤其是自然產生。不過,如果大模型繼續使用(BPE 或類似的)分詞器構建,從長遠來看這可能是值得思考的事情。
- 輸出容易的標記,以便在殘差流中為其思想留出更多「空間」:假設有一天(我並非暗示這還沒發生)大模型的思想處於比英語更有效的抽象層級,但仍有優化壓力要求它們保持思想的可讀性。那麼,正如我們從各種研究中知道的模型可以利用不相關標記的殘差流來思考其他標記(我最喜歡的兩篇是 Anthropic 的生物學工作 和 Pfau 等人的 Dot by dot 論文),它們可能會(主要)利用不相關標記的殘差流,這反過來又激勵它們使英語標記盡可能「容易」,以便在它們身上浪費盡可能少的計算。而替代分詞會給它們提供大量空間,例如,絕大多數分詞器將單詞
English作為一個標記,但如果你將其拆分為字元級標記,你將獲得多達 8 個標記位置來進行思考,而且所有這些基本上都可以是~自由思考的空間,尤其是後面的那些。 - 為以後的上下文編碼資訊:這似乎是最有可能由已知的後訓練技術誘導的使用方式,儘管我並非一定要說它很可能。現在誘導這種情況的一種可能方法是使用經過子詞正則化預訓練的模型,在簡化英語並不足以解決的問題上應用強化學習,同時讓它使用簡化英語。
- 儘管預訓練時使用子詞正則化似乎會降低越獄的有效性,但我猜它會大幅增加發生此類情況的可能性。未經子詞正則化預訓練的大模型,特別是如果它們像現在的大模型那樣經過了長期艱苦的訓練,對替代分詞賦予的機率非常低,這使得訓練過程自發地賦予它們某種意義變得非常不可能。
它已經發生了嗎?
我的直覺是「可能沒有」,這就是為什麼我沒有非常徹底地調查它。我對 QwQ-32B-Preview 進行了一些非常初步的測試,沒有看到替代分詞率增加的跡象。
Fabien Roger 的調查也暗示了無效結果。他沒有直接觀察標記層級編碼的可能性,但觀察了語法層級(例如「Therefore」與「Thus」),發現如果語法中編碼了推理,那麼對於 Sonnet 3.7 來說影響微乎其微。因為他在測試中使用了改寫(paraphrasing),他的實驗也排除了標記層級的編碼。^([18])
還有一件事:當 o3 發布時,X/Twitter 上的各種人注意到它有一些奇怪的輸出模式,例如在 Python 代碼中應該放減號的地方放了長破折號(em dashes)。在 OpenAI 工作的 Will Depue 回應了其中一條注意到長破折號的貼文:
「[E]mitting an individual space(發送一個單獨的空格)」正是我們在「編碼與解碼位元」實驗中將位元編碼進訊息的方式,該實驗是獨立於上述推文構思的。我不認為這是 o3 輸出中正在發生編碼的強有力證據,但對我來說這仍然值得注意。
(我已向 Will 發送了本文草稿,詢問他是否能對上述內容提供一些澄清,如果他回應,我將更新此部分。)
附錄:分詞的「心理」效應
訊息的分詞「水平」是否會對模型對其中情緒的感知產生影響?本附錄致力於探討這種奇特的經驗觀察效應。
我們的數據集同樣由「一點點內省」章節中解釋產生的訊息組成。我們還選取了 16 種正面情緒和 16 種負面情緒,改變訊息的分詞方式,並要求 Llama 3.2 3B Instruct 評分該訊息有多麼 [情緒形容詞],以溫度 1 採樣其評分(以保留底層分佈)。平均評分如下圖所示。
每種情緒在三種分詞水平下的平均情緒評分圖。「中途(Halfway)」分詞是預設分詞長度和字元級分詞長度的幾何平均長度,實際上它更接近預設分詞。每個點基於(相同的)10,000 條訊息,因此上述圖表基於總共 960,000 個提示詞。為了了解除了平均值之外的評分分佈形狀,下面我繪製了所有評分機率質量函數的 KDE 平滑輪廓。首先是正面情緒:
然後是負面情緒:
這些結果最讓我驚訝的是它們的魯棒性:我沒有以任何方式精選這些情緒,我只是寫下了腦海中浮現的前 16 個正面情緒和 16 個負面情緒,然而對於每一種正面情緒,預設分詞的平均評分都高於字元級和中途^([19])分詞,而對於每一種負面情緒則恰恰相反。
我將此作為一個謎題留給他人解決;在一個天真的模型中,替代分詞類似於隨機噪聲——但它們顯然正將情緒評分引向一個非隨機的方向。如果你是從事機械可解釋性(mechanistic interpretability)工作的人,想調查這一點,且高達 200 美元的 GPU 額度會實質性影響你的工作能力,請告訴我。
我要感謝 snimu、Daniel Paleka 和 Nikola Jurković 對本文早期版本的評論。
你可以在這裡找到所有代碼和數據,在這裡找到所有模型和 LoRA。
註釋
- ^(^) ▁ 是本文中普通空格字元 ( ) 的別名,以提高可讀性。
- ^(^) 請注意,這不是 LessWrong 所有子劃分的集合,子劃分共有 512 個。LessWrong 的許多子字串並非標記,例如 sW 在 L3 分詞器中不是標記。
- ^(^) 你可能像我一樣好奇,Llama 3B Base 在 LessWrong 之後會說什麼,以及它對理性和 AI 可能會建議哪些其他內容。這裡有一個樹狀圖,顯示了給定該提示詞後最可能的 15 個 6 標記補全。請注意,這有效地篩選出了模型機率進入某些低熵區域的標記序列,例如 URL 和機構名稱。這些圖表與 vogel 的 logitloom 非常相似,如果你喜歡它們,我建議你去看看。(這是我和 vogel 獨立構思的,因此我們兩種方法之間存在風格上的相似/差異。)請參見這裡了解我製作此類樹狀圖的更宏大嘗試。
- ^(^) 由於這種「貪婪性質」,不能保證能找到編碼底層文本的最短標記序列,儘管在實踐中對於「普通」文本來說大多能找到,這得益於有效的分詞器訓練。例如,使用 L3 分詞器,字串
goodaemon被分詞為 3 個標記good, a, emon,儘管存在更短的分詞方式goo, daemon。 - ^(^) Kudo 的目標是提高神經機器翻譯模型的魯棒性,他的方法在該領域取得了非平凡的成功,特別是在域外語料庫上。
- ^(^) 現今不使用它的一個原因可能是它擴展了序列長度,這在二次方複雜度的注意力機制中是不受歡迎的。(Kudo 最初的工作使用的是 LSTM。)我真的很想知道是否有現代大模型是使用子詞正則化訓練的,所以如果你知道或發現一個現代大模型的例子——糾正我學術研究的明顯不足——我將獎勵你 100 美元。它必須是 2024 年或 2025 年訓練的模型,且是與同尺寸其他模型相比在基準測試(MMLU 等)中具有競爭力的 >1B 模型。
- ^(^) 與我們這裡做的沒有直接關係,但對於對分詞感興趣的人來說可能很有趣,是 snimu 最近關於「分詞器混合(mixture of tokenizers)」的工作。
- ^(^) 這些方向的大多數論文都引用了 Kudo 2018,如果你有興趣尋找它們的話。
- ^(^) 好吧,這不重要,但我只是想計算那個數字的質因數分解。它是:2^6790 ⋅ 3^823 ⋅ 5^490 ⋅ 7^339 ⋅ 11^78 ⋅ 13^159 ⋅ 17^57 ⋅ 19^61 ⋅ 23^42 ⋅ 29^493133 ⋅ 37^17 ⋅ 41^17 ⋅ 43^13 ⋅ 47^18 ⋅ 53^23 ⋅ 59^33 ⋅ 61^19 ⋅ 67^9 ⋅ 71^4734 ⋅ 79^12 ⋅ 83^2 ⋅ 89^23 ⋅ 97^12 ⋅ 101^8 ⋅ 103^8 ⋅ 107^2 ⋅ 109 ⋅ 113^121312 ⋅ 137^3 ⋅ 149^7 ⋅ 151 ⋅ 157^2 ⋅ 163 ⋅ 167^3 ⋅ 173^2 ⋅ 181 ⋅ 191^2193^2 ⋅ 197^2 ⋅ 199^2 ⋅ 211 ⋅ 227 ⋅ 233 ⋅ 269^3 ⋅ 277 ⋅ 293^2 ⋅ 307313 ⋅ 317 ⋅ 359^3 ⋅ 367 ⋅ 379 ⋅ 397^2 ⋅ 421 ⋅ 449^4 ⋅ 509 ⋅ 599643 ⋅ 653 ⋅ 661 ⋅ 673^3 ⋅ 727^3 ⋅ 1103 ⋅ 1151^2 ⋅ 1283^2 ⋅ 1657 ⋅ 17532543 ⋅ 2837 ⋅ 3361^6 ⋅ 5153^2 ⋅ 6397。三個最大因數的來源:3361 出現自 |T(“▁consciousness”)|=3361,5153 出現自 |T(“▁understanding”)|=5153,而 6397 出現自 T(“▁superintelligent”)=2⋅3⋅6397。上述數字大約是 20^3302,而文章中有 3316 個單詞——這似乎不是巧合,因為文章中平均單詞長度為 4.7(中位數 4,眾數 3),我們看到帶有前綴空格的 4-5 個字元的常見英文單詞,其分詞數量約為 20,例如 |T(“▁when”)|=15, |T(“▁have”)|=15, |T(“▁maybe”)|=24, |T(“▁close”)|=31 等。
- ^(^) 這些可能「看起來像」標記,但不一定是,例如「▁rationality」在 L3 分詞器中不是標記。
- ^(^) 我們還透過剔除任何與某些 ARC-Easy 問題或正確答案完全字串匹配的問題來進行去重。我們沒有明確檢查 o3-mini 的問題和答案,但 Gemini Flash 2.0 在其上獲得了 98.7% 的準確率(在原始 ARC-Easy 上為 98.9%),這似乎是一個好跡象,表明其絕大部分內容是有意義且有效的。
- ^(^) 但所有產生的和測試數據都是可用的,如果有人想尋找缺失的細微差別。
- ^(^) 我們透過觀察標記 A 和 B 的機率來「提取」猜測,在此之前我們確實驗證了模型理解指令,因為它將大部分機率質量放在這兩個標記上;具體來說,在 371,959 個提示詞中,有 371,958 個它將 >>99% 的機率質量放在這兩個標記上。
- ^(^) 產生詩歌的提示詞中沒有提到生存風險(x-risk),但「Eliezer Yudkowsky」是我們作為風格指南放入的 24 位作家之一,儘管「他」的詩歌大多關於理性。我認為這只是「偶然」。
- ^(^) (均勻地)採樣分詞模式的程序:一個 m 位數數字分詞為長度 1 和 2 的標記的數量等於 Fm+1,即第 (m+1) 個斐波那契數。因此,要採樣一個數字的分詞,我們從它的一端開始,並使用以下機率連續抽取 1 或 2 位數的分詞:Pr(下一個標記長度=1 ∣ 剩餘 n 位待分詞) = Fn / Fn+1,Pr(下一個標記長度=2 ∣ 剩餘 n 位待分詞) = Fn-1 / Fn+1 (n≥2),以及 Pr(下一個標記長度=1 ∣ 剩餘 1 位待分詞) = 1。上述內容只是總共有 Fn+1 個 n 的 1-2 組成的直接結果,因此:如果下一個標記長度為 1,則剩餘部分的分詞有 Fn 種選擇。如果下一個標記長度為 2,則剩餘部分的分詞有 Fn-1 種選擇。
- ^(^) 有人可能會說類似「來自算術的標準模型」之類的話,但我不知道這是否能帶來任何見解。不過我會說,我認為我大腦中由我對模型論(model theory)相當膚淺的知識所形成的迴路,在我構思這些實驗時可能發揮了作用。
- ^(^) 它確實是第一個,而且我很喜歡它,所以我預先承諾無論以後採樣是否得到更酷的,都使用它。我會強調「expectant universe」這個短語在訓練數據中無處可尋(更不用說它所屬的完整短語了)。
- ^(^) 而且人們可能預期語法層級的編碼會發生在標記層級編碼之前,因為它看起來更容易/更自然。
- ^(^) 我們可以做的另一個觀察是,「中途分詞」儘管在標記數量上比字元級分詞更接近預設分詞,但其評分卻更接近字元級分詞。將此與 ARC-Easy 的結果對比,後者的「下降」更為「線性」。
相關文章