離開OpenAI的大神卡帕西「開課了」:新項(xiàng)目日增千星,還是熟悉的min代碼風(fēng)
大神Karpathy從OpenAI離職,原本揚(yáng)言要大休一周。
圖片
但轉(zhuǎn)眼,新項(xiàng)目就已上線GitHub,日增上千星的那種。
圖片
還是熟悉的卡式配方:
74行Python代碼搞定大模型標(biāo)記化(tokenization)中常用的BPE(Byte Pair Encoding)算法,實(shí)現(xiàn)該算法的最小、最干凈代碼版本。
甚至:
圖片
是不是有點(diǎn)快3萬標(biāo)星的nanoGPT內(nèi)味兒了?
這波啊,還真是讓網(wǎng)友們給猜著了:
Time to cook。
畢竟,Karpathy除了前特斯拉AI總監(jiān)、OpenAI創(chuàng)始成員的title,最為網(wǎng)友所熟悉的,就是“AI領(lǐng)域大善人”、“擅長(zhǎng)將復(fù)雜問題簡(jiǎn)單化的卡老師”這樣的身份了(手動(dòng)狗頭)。
BPE代碼最小化版本
還是具體來看一下,Karpathy老師這次又煮出了一鍋什么樣的飯。
圖片
項(xiàng)目名minbpe已經(jīng)說明一切:BPE算法的最小、最干凈代碼版本。
BPE(字節(jié)對(duì)編碼)是隨著GPT-2而流行起來的標(biāo)記化算法?,F(xiàn)在,包括GPT系列、Llama系列和Mistral在內(nèi),一眾大模型都用到了這一算法來訓(xùn)練分詞器。
BPE的主要優(yōu)勢(shì)在于:
- 高效:通過合并頻繁出現(xiàn)的字節(jié)對(duì)來逐步構(gòu)建詞匯表,可以有效地減少模型需要處理的詞匯量。
- 靈活:可以將詞匯表外的單詞分解為已知子詞來進(jìn)行處理,有助于模型理解和生成未在訓(xùn)練中出現(xiàn)的單詞。
而在minbpe這個(gè)項(xiàng)目中,Karpathy提供了兩個(gè)Tokenizer(分詞器),它們都可以執(zhí)行分詞器的3個(gè)主要功能:
- 基于特定文本訓(xùn)練詞匯表和合并操作
- 把文本編碼成token
- 把token解碼為文本
具體而言,在basic.py中,minbpe用74行Python代碼,完成了對(duì)直接在文本上運(yùn)行的BPE算法的最簡(jiǎn)單實(shí)現(xiàn)。
圖片
在regex.py中,minbpe實(shí)現(xiàn)的是一個(gè)正則表達(dá)式分詞器,該分詞器利用正則表達(dá)式進(jìn)一步拆分輸入的文本。
另外,在正則表達(dá)式分詞器的基礎(chǔ)之上,minbpe還在gpt4.py中提供了一個(gè)GPT4Tokenizer,可以準(zhǔn)確在線tiktoken庫(kù)中的GPT-4標(biāo)記化。
注:tiktoken是一種快速BPE分詞器。
圖片
base.py則是一個(gè)基類,包含了訓(xùn)練、編碼和解碼的存根(stubs),提供了保存和加載的功能,并集成了一些常見的輔助工具函數(shù)。在實(shí)際應(yīng)用中,開發(fā)者應(yīng)該通過繼承這個(gè)基類來實(shí)現(xiàn)具體的分詞器功能。
Karpathy提到,他在霉霉的維基百科文本上嘗試訓(xùn)練了兩個(gè)主要的分詞器。train.py在他的M1 MacBook上運(yùn)行時(shí)間大概為25秒。
如果你還有什么不清楚的地方,別擔(dān)心,卡老師已經(jīng)計(jì)劃要出視頻了:
圖片
Karpathy出走OpenAI,許多猜測(cè)指向他的“下一篇章”是大語(yǔ)言模型系統(tǒng)(LLM OS):
圖片
如今正式工作還未揭示,但看樣子Karpathy已經(jīng)拾起了“教學(xué)育人”的副業(yè),小伙伴們可以蹲起來了。
參考鏈接:https://github.com/karpathy/minbpe/