單詞轉數字
邊境的翻譯員
語言模型從未見過文字。它看到的是整數。分詞器位於邊境檢查站:人類的單詞流入,整數 ID 流出。生成則反轉流程:整數 ID 返回,分詞器渲染文字。
三個工作:
1. 分割。 將字串切割成片段(tokens)。
2. 對應。 為每個片段指派一個來自固定詞彙表的唯一整數 ID。
3. 還原。 在生成時從 ID 重新建構文字。
為什麼用片段,而不是整詞
整詞詞彙表會爆炸式增長。單是英文就有數十萬種形式。更糟的是,用整詞訓練的模型無法處理錯字、新名字或外語片語:任何未見過的詞都會對應到單一 <UNK> 槽位。
子詞元化解決了這個問題。一個常見片段的詞彙可以組成任何單詞,包括訓練期間從未見過的單詞。兩種策略佔主導:BPE(byte pair encoding,位元對編碼)& distributional segmentation(分布分割)。ANDREA 選擇了第二種策略。
為什麼使用子詞
單詞在何處斷開
Zellig Harris,1955
一位名叫 Zellig Harris 的語言學家注意到了一些現象。在一個單詞內,給定字母序列後跟隨的不同字母數量變化劇烈。在 un 之後,你可以找到數十個字母:a, b, c, d, e ... 而在 unbel 之後,只有極少數字母跟隨:i(然後是 ievable)。
後繼多樣性的激增標誌著可能的語素邊界。在 un(一個前綴)之後,多樣性急劇增加,因為許多詞根可以跟隨。在像 believ 這樣的詞根內部,多樣性保持低位,因為字母之間相互預測。在語素之間的過渡處,多樣性再次激增。
從多樣性激增到片段
在訓練語料庫上運行該偵測器。每個詞彙都會貢獻統計證據。一個分詞器收集在詞素形狀邊界處反覆出現的高頻段:un、re、pre、believ、know、ing、able、ly、tion、ed。
無標籤。 無語言學家手動標記詞素。字母共現的統計量完成工作。
Harris 與 BPE
| 屬性 | Harris | BPE |
|---|---|---|
| 邊界標準 | 後繼多樣性峰值 | 配對頻率 |
| 語言形狀 | 語素對齊(前綴、詞根、後綴) | 頻繁的位元組配對 |
範例:unbelievably | un + believ + abl + y | unb + eli + eva + bly |
| 概括性 | 強(詞根 + 詞綴可重組) | 較弱(配對不必對齊) |
兩者皆產生子詞片段。Harris 片段傾向與語言學家所稱的語素對齊:最小的有意義單位。BPE 片段優化壓縮:最頻繁的位元組配對會被合併,無論意義為何。
分割一個單詞
三個詞彙層
ANDREA 詞彙的剖析
Harris tokenization 產生一個有三個層的詞彙:
板塊 1:256 基礎位元組。 每個可能的 UTF-8 位元組 (0x00 到 0xFF) 都有自己的 token ID。安全網:語料庫中任何字符,tokenizer 都能表示為位元組序列。永遠不會觸發 <UNK>。
板塊 2:N 個語素片段。 透過分布分析發現的常見片段。ANDREA-12M 訓練時 N = 4096;ANDREA-120M 訓練時 N = 8192。每個片段將重複出現的多位元組字串壓縮成單一 token。
板塊 3:1 個 BOS token。 一個特殊標記,置於每個訓練序列的開頭。讓模型學習「此位置無過去」。ANDREA-12M 和 ANDREA-120M 都精確保留一個 ID 給 BOS。
詞彙大小
| 模型 | 基礎位元組 | 語素片段 (N) | BOS | 詞彙大小 |
|---|---|---|---|---|
| ANDREA-12M | 256 | 4096 | 1 | 4353 |
| ANDREA-120M | 256 | 8192 | 1 | 8449 |
256 + N + 1 = 詞彙大小。簡單。可重現。開放。
為什麼位元組塊很重要
位元組後備保證涵蓋範圍。如果模型遇到 日本語 且 tokenizer 沒有日語語素,個別 UTF-8 位元組會將序列傳遞下去。模型在位元組上訓練;罕見腳本的品質取決於容量與曝光度,但沒有輸入會讓 tokenizer 崩潰。
計算詞彙
序列開始
為什麼序列需要標記
僅限解碼器的 Transformer 從先前的上下文預測下一個 token。位置 0 沒有先前的上下文。沒有標記的情況下,位置 0 處於邏輯空洞:模型沒有任何東西可以關注。
BOS 解決了空洞。 在訓練期間,每個序列開始處放置一個單一的特殊 token(ID = 256 + N)。模型學習:
- 「當你看到 BOS 時,預測自然文本的可能第一個 token。」
- 「當你看到 BOS 後跟一個單詞時,那個單詞是序列的開始,而不是延續。」
一個 Token,多種用途
BOS 會出現在:
- 訓練時: 預置於餵入模型的每個文字區塊之前。
- 推論時: 預置於提示之前,讓模型看到熟悉的「全新開始」訊號。
- 邊界標記: 在某些管線中,作為串聯文件之間的分隔符。
ANDREA 僅為 BOS 保留一個 ID。沒有 EOS,沒有 PAD,沒有詞彙所需之外的特殊 token。簡約仍是 permacomputer 的核心價值:每個 token 都必須證明其位置的價值。
活動 3 繼續
活動 3 (grow_a_language_model_tokenizer_diet) 涵蓋當 N 過大或 tokenizer 語料庫與訓練語料庫偏離時會發生什麼。ANDREA-12M 浪費了 63.6% 的詞彙;ANDREA-120M 修復了它。繼續閱讀。