banner
Nagi-ovo

Nagi-ovo

Breezing
github

LLM 演進史(六):揭開 Tokenizer 的神秘面紗

Tokenizer 是 LLM 中很重要但又没那么 fancy 的组件,在本系列之前的語言模型建模中,tokenizer 的實現方式是字符級的,將所有可能出現的 65 種字符製作嵌入表,然後用 embedding layer 對訓練集進行編碼向量化。而實踐中,現代語言模型使用了更複雜的方案,通過使用算法如字節對(Byte Pair Encoding, aka BPE)編碼算法在塊(chunk)級操作。

如 GPT-2 論文 Language Models are Unsupervised Multitask Learners 中,研究人員構建了一個 50,257 大小的詞彙表,上下文長度為 1024 tokens。

Screenshot 2024-06-15 at 23.31.43

語言模型的 Transformer 網絡中的注意力層中,每個 token 都關注序列中前面的 tokens,也就是看到先前的 1024 個 tokens。

token 可以被視為語言模型的原子單元,而 tokenize 就是將字符串文本轉換為 tokens 序列的過程。

題外話:也有直接將字節輸入模型而無需分詞的研究(如 MegaByte),不過目前還沒有得到充分的驗證。

First taste#

Tokenization 是導致 LLM 產生很多怪異現象的原因:

Screenshot 2024-06-16 at 23.02.12

  • 為什麼 LLM 不能正確拼寫單詞?分詞。
  • 為什麼 LLM 不能做一些非常簡單的字符串處理任務,比如反轉一個字符串?分詞。
  • 為什麼 LLM 在處理非英語語言(例如日語)時效果更差?分詞。
  • 為什麼 LLM 在簡單算術上表現不好?分詞。
  • 為什麼 GPT-2 在 Python 編碼中遇到了不必要的麻煩?分詞。
  • 為什麼我的 LLM 在看到字符串 “
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。