Karpathy新視頻又火了:從頭構建GPT Tokenizer
技術大神卡帕西離職OpenAI以后,營業可謂相當積極啊。
這不,前腳新項目剛上線,后腳全新的教學視頻又給大伙整出來了:
這次,是手把手教咱構建一個GPT Tokenizer(分詞器),還是熟悉的時長(足足2小時13分鐘)。
Ps. 上次講課還是倆月前的大模型科普。
所謂“卡帕西出手,必屬精品”,大伙火速碼碼碼:
今晚的約會取消,卡帕西來了我要去上課(狗頭)
再說一遍,付費都買不到的這樣高質量的課程,沖。
具體都有哪些干貨?
“太長不看版”已為大家準備好。
為什么要關注Tokenizer
如大神介紹:
Tokenizer即分詞器是大語言模型pipeline中一個完全獨立的階段。
它們有自己的訓練集、算法(比如BPE,字節對編碼),并在訓練完成后實現兩個功能:
從字符串編碼到token,以及從token解碼回字符串。
為什么我們需要關注它?
卡帕西指出:
因為LLM中的很多奇怪行為和問題都可以追溯到它。
比如:
- 為什么大模型不能處理簡單的字符串處理任務,例如反轉?
- 為什么大模型在非英語語言任務方面的性能更差?
- 為什么大模型不擅長簡單的算術?
- 為什么我的模型在看到字符串“”后就突然“宕機”了?
- 為什么大模型實際上并不是端到端的語言建模?
- ……
所以為了弄清這些問題,便有了今天的課程——盡管大神本人對這部分內容其實也不太喜歡。
上這門課大家會注意到我的表情全程都很凝重。不過,其中的細節真的太重要了(大家還是忍忍吧)。
以下為視頻主要內容文字版。
從頭構建OpenAI大模型中使用的分詞器
視頻的最開始主要是對分詞器的一些介紹。
包括最簡單的字符級分詞操作(即每個字符是一個token)以及更為復雜和常用的chunk級操作(即多個字符也會組成一個token)。
在這之中,業內最常用的算法是BPE,即byte pair encoding,字節對編碼,因此我們要想構建自己的分詞器,最重要的是了解這個算法。
卡帕西介紹:
BPE可以更好地處理非英語語言、對詞匯表大小進行調整,對于模型的性能有顯著影響。
比如GPT-4分詞器通過改進BPE算法,最終在處理Python代碼時更加高效,因為它能夠將多個空格合并為單個標記,從而減少序列長度,使得模型能夠關注更長更多的代碼。
需要注意的是,盡管BPE算法可以處理UTF-8編碼的字節序列,但直接使用這些序列會導致詞匯表過大、序列過長,從而影響模型的注意力機制和上下文長度,因此需要壓縮處理。
理解BPE算法后,如何構建自己的分詞器?
簡單來說,主要包括以下幾個步驟:
1、初始化詞匯表
基于UTF-8編碼的字節。
2、合并字節對并不斷迭代,直到詞匯表大小達到預設值
在實際演示中,卡帕西通過20次合并,將文本的token數量減少了約27%。
3、處理特殊字符和不同語言的字符
4、整體優化
詞匯表過大可能會導致模型訓練困難,過小則可能無法捕捉到足夠的語言細節。
5、選擇一個包含豐富語言特征的數據集來訓練
在此,卡帕西提到了SentencePiece庫,它支持多種分詞算法包括今天提到的BPE。
我們可以用它進行分詞器的訓練,包括配置選項和如何處理罕見字符。
訓練好的分詞器用于編碼和解碼文本也講了。
6、最后就是評估+集成到模型中了。
當然,后續我們還需要根據模型的表現進行持續調整。
具體道每一步,大神都給咱配了詳細的Python實現,包括如何找到最頻繁的字節對、如何合并這些對以及如何構建合并字典等等,具體大家就請參閱視頻吧。
在這之中,卡帕西也提醒了n個細節,比如:
在解碼過程中,如果遇到無效的UTF-8字節序列,可以使用“errors=’replace’”來替換;使用“end of text”特殊標記來在訓練數據中分隔文檔等等。
實際遠比此復雜
毫無疑問,卡帕西帶大家實現的是比較基礎的一個分詞器版本,實際模型中遠比這要復雜得多。
比如OpenAI官方提供的BPE分詞器——tiktoken。
它用了正則表達式來分割文本,以此來保證某些類型的字符也不會被合并。在GPT-2中,它就在某些方面表現得不錯了。
到了GPT-4,官方也對其進行了一些調整。
主要的改變在于:
- GPT-4會將空格合并;
- 大小寫不敏感;
- GPT-4最多只合并3位數字,避免了長數字序列token。
不過由于官方并沒有公開具體訓練細節,所以我們也無法知道其詳細的實現。
而除了更復雜的算法,分詞器本身在處理長字符串、非英語語言、數字和特殊字符時都可能遇到問題。
因此,講來講去,大神在視頻中還是表達了一個“樸素的愿望”:
非常希望有一天能夠不需要分詞,直接將字節流輸入到語言模型中。
不過由于這就需要我們對Transfomer架構進行重大修改了,所以現階段,構建和優化分詞器仍然是實現高效大模型的關鍵步驟。
完整視頻見:https://weibo.com/6105753431/O1BQB96Yg