詞表的選擇如何影響語言模型訓練?這可能是目前見過最好的詞表選擇研究

本文初步探討了不同類型的詞表對語言模型訓練所產生的影響,研究者使用了 12 個小型的語言模型及 4 個中型的語言模型作為實驗對象,並得出了直觀簡潔的結論。這些結論可以幫助你選擇最合適的詞表來訓練語言模型。

不同詞表對語言模型有哪些影響?如何權衡這些影響?

在最近的一項實驗中,研究者對 16 個語言模型使用不同的語料進行了預訓練和微調。這次實驗使用了 NanoGPT, 一種小規模的架構(基於 GPT-2 SMALL),訓練了 12 個模型,NanoGPT 網路架構的配置為:12 個注意力頭、12 層 transformer, 詞嵌入維度為 768,進行大約 400,000 次迭代(大約 10 個 epoch)。然後在 GPT-2 MEDIUM 上訓練了 4 個模型,GPT-2 MEDIUM 架構的設置為 16 個注意力頭、24 層 transformer, 詞嵌入維度為 1024,並進行 600,000 次迭代。所有模型均使用 NanoGPT 和 OpenWebText 資料集進行預訓練。微調方面,研究者使用了 baize-chatbot 提供 的指令資料集,分別在兩類模型裡補充了額外的 20,000 和 500,000 個「字典」條目。

未來,研究者計劃發佈程式碼、預訓練模型、指令調整模型和微調資料集。

不過,這 16 個模型僅在預訓練階段就要在 8 個 GPU 上累計運行 147 天(單個 GPU 要使用 1,176 天),成本為 8,000 美元。因為沒有 GPU 贊助商(這是一個免費的開源項目),出於成本考慮,雖然還存在進一步對研究內容完善的空間,但是研究者目前沒有繼續進行下去。

研究結果可總結為:

  • 編碼方式上,TokenMonster(550256-strict-nocapcode)詞表在所有指標上都比 GPT-2 Tokenizer 和 tiktoken p50k_base 表現更好。
  • 最佳詞表規模為 32000。
  • 詞表越簡單,模型收斂得越快,但收斂後不一定會產生更好的結果。
  • 字詞比(每個 token 對應的平均字符數)增加,不會單獨對模型質量產生負面影響。
  • 單個 token 對應多個單詞的詞表對 SMLQA(真值)基準有 5% 的負面影響,但對字詞比要高 13%。
  • 帶有 Capcode 的詞表的話,模型需要更長的時間來學習,但一旦模型收斂,似乎不會在任何方向上會對 SMLQA(真值)或 SQuAD(Data Extraction)基準產生影響。
  • 在比較不同的分詞器時,驗證損失和 F1 都是無意義的指標。
  • 分詞器的缺陷和複雜性對模型學習事實能力的影響大於對模型學習語言能力的影響。

根據實驗結果,englishcode-32000-consistent 的結果是最好的。然而,如上所述,當使用在單個 token 對應多個單詞的 TokenMonster 時,SMLQA( Ground Truth)的準確性和字詞比之間會存在一種權衡,這增加了學習曲線的斜率。研究者堅信,通過強制 80% 的 token 對應一個單詞,20% 的 token 對應多個單詞,可以最大限度地減少這種權衡,實現 「兩全其美」 的詞表。研究者認為這種方法在性能上與 one-word 詞表相同,同時字詞比還能提高約 50%。

再詳細地解釋一下 「分詞器中的缺陷和複雜性對模型學習事實的能力的影響大於對其語言能力的影響」 這句話的含義:

這種現象是訓練過程中發現的一個有趣的特徵,從模型訓練的工作方式去思考,也能說得通。研究者沒有證據證明其推理是合理的。但從本質上講,因為在反向傳播過程中,語言的流暢性比語言的事實性(它們是極其微妙和依賴上下文的)更容易糾正,這意味著分詞器效率若有任何提高,與事實性無關,都會產生直接轉化為資訊保真度提高的連鎖反應,如在 SMLQA(Ground Truth)基準中所見。簡單地說:一個更好的分詞器就是一個更真實的模型,但不一定是一個更流暢的模型。反過來說:一個擁有低效分詞器的模型仍然能學會流利地寫作,但流利性的額外成本會降低模型的可信度。

詞表規模的影響

在進行這些測試之前,本文研究者認為 32000 是最佳詞表規模,實驗結果也證實了這一點。50256-balanced 的性能僅比 SMLQA(Ground Truth)基準上的 32000-balanced 好 1%,但是模型的尺寸卻大了 13%。理想情況下,本文在基於 MEDIUM 的多個模型中,通過分別在規模為 24000、32000、50256 和 100256 的詞表中進行如上所述的二八開劃分方法,來明確證明這一觀點。

最佳化模式的影響

研究者對 TokenMonster 下特定的三種最佳化模式 balanced, consistent 和 strict 進行了測試。不同的最佳化模式會影響標點符號以及 capcode 與單詞 token 的組合方式。研究者最初預測 consistent 模式會表現得更好(因為不那麼複雜),雖然字詞比(即 character 與 token 的比值)會略低。

實驗結果似乎證實了上述猜想,但是研究者也觀察到了一些現象。首先,在 SMLQA(Ground Truth)基準上,consistent 模式似乎比 balanced 模式的效果好約 5%。然而,consistent 模式在 SQuAD(Data Extraction)基準上的表現明顯較差(28%)。但是,SQuAD 基準表現出很大的不確定性(重複運行的結果不同),也不具有說服力。研究者並沒有對 balanced 與 consistent 測試至收斂,所以這可能只代表 consistent 模式更容易學習。事實上,consistent 可能在 SQuAD(資料提取)上做得更好,因為 SQuAD 更難學習,也不太可能產生幻覺。

這本身就是一個有趣的發現,因為它意味著將標點符號和單詞合併到一個 token 中並不存在明顯的問題。迄今為止,所有其他分詞器都認為標點符號應與字母分開,但從這裡的結果可以看出,單詞和標點符號可以合併到一個 token 中,不會有明顯的性能損失。50256-consistent-oneword 也證實了這一點,這個組合與 50256-strict-oneword-nocapcode 的性能相當,而且優於 p50k_base。50256-consistent-oneword 將簡單的標點符號與單詞 token 合併在一起(而其他兩個組合則不是這樣)。

在此之後,啟用 capcode 的 strict 模式會帶來顯著的不利影響。50256-strict-oneword-nocapcode 在 SMLQA 上得分 21.2,在 SQuAD 上得分 23.8,而 50256-strict-oneword 的得分分別為 16.8 和 20.0。原因很明顯:strict 最佳化模式阻止 capcode 與單詞 token 的合併,導致需要更多的 token 來表示相同的文字,直接結果就是字詞比降低了 8%。事實上,比起 strict,strict-nocapcode 更類似於 consistent。50256-consistent-oneword 和 50256-strict-oneword-nocapcode 在各個維度的指標中都幾乎相等。

最終的結論是,在大多數情況下,模型在學習包含標點符號和單詞的 token 的含義方面沒有任何困難。也就是說,與 balanced 模型相比,consistent 的語法準確性更高(語法錯誤更少)。綜合考慮,研究者建議大家使用 consistent 模式。strict 只能在禁用 capcode 的情況下使用。

對語法準確性的影響

如上所述,與 balanced 模式相比,consistent 模式的語法準確性更高(語法錯誤更少)。這反映在字詞比和語法之間存在非常輕微的負相關,如下圖所示。除此之外,最值得注意的一點是,同樣與 TokenMonster 的 50256-strict-oneword-nocapcode (98.6% 和 98.4%)相比,GPT-2 分詞器和 tiktoken p50k_base 的語法結果都很糟糕(分別為 98.1% 和 97.5%)。研究者最初認為這只是巧合,但多次取樣都會得到相同範圍的結果。至於原因是什麼尚不清楚。

對 MTLD 的影響

對 MTLD 的影響

MTLD 用於表示生成樣本文字的語言多樣性。它似乎與 n_embed 參數高度相關,而與詞彙量大小、最佳化模式或每個 token 的最大字數等特徵無關。這一點在 6000-balanced 模型(n_embd 為 864)和 8000-consistent 模型(n_embd 為 900)中表現得尤為明顯。

在中型模型中, p50k_base 的 MTLD 最高,為 43.85,但語法得分也最低。造成這種情況的原因尚不清楚,但研究者猜測可能是訓練資料的選擇有些奇特。

對 SQuAD 的討論

SQuAD 基準測試的是模型從一段文字中提取資料的能力,具體做法是提供一段文字,然後提出一個問題,答案需包含在該段文字中。測試結果沒有太大意義,沒有明顯的模式或相關性,包括模型總的參數。事實上,擁有 9100 萬參數的 8000-balanced 模型在 SQuAD 中的得分要高於擁有 35400 萬參數的 50256-consistent-oneword。造成這種情況的原因也許這種風格的例子不夠多,也許在指導微調資料集中有太多的 QA 對。或者,這只是一個不太好的基準。

對 SMLQA 的討論

SMLQA 基準通過提出具有客觀答案的常識性問題來測試 “真值”,例如 “哪個國家的首都是雅加達?” 和 “《哈利 – 波特》系列叢書是誰寫的?”。

值得注意的是,參考用的分詞器 —— GPT-2 Tokenizer 和 p50k_base 在該基準測試中表現相當出色。研究者最初以為浪費了幾個月的時間和幾千美元,卻證明了 tiktoken 比 TokenMonster 有更高質量的性能。但事實證明,問題與每個 token 對應的字數有關。這一點在 “中等”(MEDIUM)模型中體現得最為明顯,如下面的圖表所示。

單字詞表的性能略好於 TokenMonster 默認的每個 token 對應多個字的詞表。

另一個重要的觀察結果是,當詞彙量低於 32,000 個時,即使調整模型的 n_embd 參數以彌補模型規模的縮小,詞彙量也會直接影響真值。這是有悖直覺的,因為研究者本以為 n_embd 為 864 的 16000-balanced(參數為 1.2134 億)和 n_embd 為 900 的 8000-consistent(參數為 1.2386 億)會比 n_embd 為 768 的 50256-consistent(參數為 1.2359 億)做得更好,但事實並非如此 — 兩者的表現都差得多(13.7 和 15.1 對比 50256-consistent 的 16.4)。不過,這兩個 「調整後」 的模型都接受了相同的時間來訓練,這恰好導致預訓練的次數顯著減少(儘管時間相同)。

具有 12 層注意力頭、12 層 transformer 層的小模型

研究者在默認的 NanoGPT 架構上訓練了 12 個模型,該架構基於 12 個注意力頭和 12 層的 GPT-2 架構,嵌入參數大小為 768。這些模型都沒有訓練到收斂,通俗地說,就是沒有訓練到最大的學習能力。模型的訓練經歷了 400,000 次迭代,而要想具有最大學習能力似乎需要 600,000 次迭代。造成這種情況的原因很簡單,一是預算問題,二是收斂點的不確定性。

小模型的結果:

小模型的皮爾遜相關性

小模型的皮爾遜相關性:

小模型的結論

小模型的結論:

1. 32,000 是最佳詞彙量。從詞彙量 8,000 到 32,000 的階段中:增加詞彙量可以提高模型的真值準確度。將詞彙量從 32,000 增加到 50,257 時,模型的總參數也相應增加,但對真值準確度的提高只有 1%。超過 32,000 後,收益迅速減少。

2. 糟糕的分詞器設計會影響模型的正確性,但不會影響語法正確性或語言多樣性。在 90M – 125M 的參數範圍內,語法規則更復雜的分詞器(如 token 對應對應多詞、詞和標點符號的組合 token、capcode 編碼 token 和減少總詞彙量)在真值基準上的表現比簡單的分詞器要差。不過,分詞器設計的這種複雜性並沒有對生成文字的語言多樣性或語法正確性產生顯著的統計學影響。即使是一個緊湊的模型,如參數為 9000 萬的模型,也能有效地利用更復雜的 token。更復雜的詞彙需要更長的學習時間,從而減少了獲取與基本事實相關資訊的時間。由於這些模型都沒有經過完整的訓練,因此進一步訓練以縮小性能差距的潛力還有待觀察。

3. 驗證損失不是比較使用不同分詞器的模型的有效指標。驗證損失與給定分詞器的字詞比(每個 token 對應的平均字符數)具有非常強的相關性(0.97 皮爾遜相關性)。要想比較分詞器之間的損失值,測量相對於字符而非 token 的損失可能更有效,因為損失值與每個 token 對應的平均字符數成正比。

4. F1 分數不是評估語言模型的合適指標,這些語言模型被訓練成生成可變長度的響應(用文字結束 token 來表示完成)。這是由於文字序列越長,F1 公式的懲罰越嚴重。F1 評分傾向於產生較短響應的模型。

5. 所有模型(從 90M 參數開始),再加上所有測試的分詞器(大小從 8000 到 50257 不等),都證明了對其進行微調以產生語法連貫的答案的能力。雖然這些反應往往是不正確的或幻覺的,但都較為連貫,並表現出對上下文背景的理解能力。

6. 當 embedding 大小增加時,生成文字的詞彙多樣性和語法準確性顯著增加,並且與字詞比呈微微的負相關。這意味著,具有較大字詞比的詞彙會使學習語法和詞彙多樣性稍微困難一些。

7. 在調整模型參數大小時,字詞比與 SMLQA(Ground Truth)或 SQuAD(Information Extraction)基準之間沒有統計學上顯著相關性。這意味著具有更高字詞比的分詞器不會對模型的性能產生負面影響。

8. 與 「balanced」 相比,「consistent」 類的詞表在 SMLQA(Ground Truth)基準上的表現似乎稍好,但在 SQuAD(Information Extraction)基準上則差得多。儘管還需要更多的資料來證實這一點。

具有 16 層注意力頭、24 層 transformer 層的中模型

在對小型模型進行訓練和基準測試後,研究者明顯發現,衡量的結果反映的是模型的學習速度,而不是模型的學習能力。此外,研究者沒有最佳化 GPU 的計算潛力,因為使用的是默認的 NanoGPT 的參數。為了解決這個問題,研究者選擇使用有著 50257 個 token 的分詞器及中等語言模型,對四種變體進行了研究。研究者將 batch 的大小從 12 調整到 36,並將 block 的大小從 1024 縮減到 256,確保充分利用了 24GB GPU 的 VRAM 功能。然後進行了 600000 次迭代,而不是小模型中的 400000 次。每種模型的預訓練平均需要 18 天多一點的時間,是小模型需要的 6 天的三倍。

對模型進行收斂訓練確實顯著降低了更簡單詞彙表和更復雜詞彙表之間的性能差異。SMLQA(Ground Truth)和 SQuAD(Data Extration)的基準結果非常接近。主要區別在於 50256-consistent 有著比 p50k_base 高 23.5% 的字詞比的優勢。不過,對於每個 token 對應多個單詞的詞表來說,真值的性能代價較小,不過這可以用我在頁首討論的方法來解決。

中模型的結果:

中模型的結果

在 560000 次迭代之後,所有模型都開始收斂,如下圖所示:

後續展望

後續展望

下一階段將使用 englishcode-32000-consistent 來訓練和基準測試 MEDIUM 的模型,該詞彙表具有 80% 的單詞 tokentoken 和 20% 的多詞 token。

相關文章