Karpathy離職OpenAI,首發(fā)2小時(shí)AI大課!從頭開(kāi)始構(gòu)建GPT分詞器
離職OpenAI的技術(shù)大神karpathy,終于上線了2小時(shí)的AI大課。
——「讓我們構(gòu)建GPT Tokenizer(分詞器)」。
其實(shí),早在新課推出兩天前,karpathy在更新的GitHub項(xiàng)目中,就預(yù)告了這件事。
這個(gè)項(xiàng)目是minbpe——專(zhuān)為L(zhǎng)LM分詞中常用的BPE(字節(jié)對(duì)編碼)算法創(chuàng)建最少、干凈以及教育性的代碼。
目前,GitHub已經(jīng)狂攬6.1k星,442個(gè)fork。
項(xiàng)目地址:https://github.com/karpathy/minbpe
網(wǎng)友:2小時(shí)課程含金量,相當(dāng)于大學(xué)4年
不得不說(shuō),karpathy新課發(fā)布依然吸引了業(yè)內(nèi)一大波學(xué)者的關(guān)注。
他總是可以把相當(dāng)復(fù)雜的LLM概念,用非常好理解的方式講出來(lái)。
有網(wǎng)友直接取消了晚上的約會(huì),去上課了。
與karpathy的約會(huì)之夜。
AI機(jī)器學(xué)習(xí)研究員Sebastian Raschka表示,「我喜歡從頭開(kāi)始的實(shí)現(xiàn),我真的很期待看到這個(gè)視頻」!
英偉達(dá)高級(jí)科學(xué)家Jim Fan表示,「Andrej的大腦是一個(gè)大模型,它能將復(fù)雜的事物標(biāo)記化為簡(jiǎn)單的token,讓我們小型思維語(yǔ)言模型可以理解。
還有UCSC的助理教授Xin Eric Wang表示,「就個(gè)人而言,我非常欣賞他多年前發(fā)表的關(guān)于RL的文章:http://karpathy.github.io/2016/05/31/rl/,這篇文章幫助我進(jìn)入了RL領(lǐng)域」。
還有人直言這兩個(gè)小時(shí)課程的含金量,堪比4年制大學(xué)學(xué)位。
「Andrej是最好的AI老師」。
為什么是分詞器?
為什么要講分詞器?以及分詞器為什么這么重要?
正如karpathy所言,分詞器(Tokenizer)是大模型pipeline中一個(gè)完全獨(dú)立的階段。
它們有自己的訓(xùn)練集、算法(字節(jié)對(duì)編碼BPE),并在訓(xùn)練后實(shí)現(xiàn)兩個(gè)功能:從字符串編碼到token,以及從token解碼回字符串。
另外,大模型中許多怪異行為和問(wèn)題,其實(shí)都可以追溯到分詞器。
就比如:
- 為什么LLM拼不出單詞?
- 為什么LLM無(wú)法完成超級(jí)簡(jiǎn)單的字符串處理任務(wù),比如反轉(zhuǎn)字符串?
- 為什么LLM不擅長(zhǎng)非英語(yǔ)語(yǔ)言方面的任務(wù)?
- 為什么LLM不擅長(zhǎng)簡(jiǎn)單算術(shù)?
- 為什么GPT-2在用Python編碼時(shí)遇到了超出必要的麻煩?
- 為什么LLM在看到字符串<lendoftextl>時(shí)突然停止?
- 為什么大模型實(shí)際上并不是端到端的語(yǔ)言建模
......
視頻中,他將討論許多這樣的問(wèn)題。討論為什么分詞器是錯(cuò)誤的,以及為什么有人理想地找到一種方法來(lái)完全刪除這個(gè)階段。
兩小時(shí)大課走起
在本講座中,他將從頭開(kāi)始構(gòu)建OpenAI GPT系列中使用的Tokenizer。
根據(jù)YouTube課程章節(jié)介紹,一共有20多個(gè)part。
其中包括引言介紹、字節(jié)對(duì)編碼 (BPE) 算法演練、分詞器/LLM 圖:這是一個(gè)完全獨(dú)立的階段、minbpe練習(xí)時(shí)間!編寫(xiě)自己的GPT-4分詞器等等。
從講解到習(xí)題演練貫穿了全部課程。
以下是從演講內(nèi)容中總結(jié)的部分要點(diǎn)。
在視頻結(jié)尾,Karpathy重新回顧了LLM分詞器帶來(lái)的怪異問(wèn)題。
首先,為什么LLM又時(shí)拼不正確詞,或者做不了其他與拼寫(xiě)相關(guān)的任務(wù)?
從根本上說(shuō),這是因?yàn)槲覀兛吹竭@些字符被分割成了一個(gè)個(gè)token,其中有些token實(shí)際上相當(dāng)長(zhǎng)。
因此,我懷疑這個(gè)單個(gè)token中塞進(jìn)了太多的字符,而且我懷疑該模型在與拼寫(xiě)這個(gè)單個(gè)token相關(guān)的任務(wù)方面應(yīng)該不是很擅長(zhǎng)。
當(dāng)然,我的提示是故意這樣做的,你可以看到默認(rèn)風(fēng)格將是一個(gè)單一的token,所以這就是模型所看到的。
事實(shí)上,分詞器不知道有多少個(gè)字母。
那么,為什么大模型在非英語(yǔ)任務(wù)中的表現(xiàn)更差?
這不僅是因?yàn)長(zhǎng)LM在訓(xùn)練模型參數(shù)時(shí),看到的非英語(yǔ)數(shù)據(jù)較少,還因?yàn)榉衷~器沒(méi)有在非英語(yǔ)數(shù)據(jù)上得到充分的訓(xùn)練。
就比如,這里「hello how are you」是5個(gè)token,而它的翻譯是15個(gè)token,相當(dāng)與原始的3倍大。
「?????」在韓語(yǔ)中代表著「你好」,但最終只有3個(gè)token。
事實(shí)上,我對(duì)此感到有點(diǎn)驚訝,因?yàn)檫@是一個(gè)非常常見(jiàn)的短語(yǔ),只是典型的問(wèn)候語(yǔ),如你好,最終是三個(gè)token。
而英語(yǔ)中的「你好」是一個(gè)單一的token。這是我認(rèn)為L(zhǎng)LM在非英語(yǔ)任務(wù)中表現(xiàn)差的原因之一便是分詞器。
另外,為什么LLM會(huì)在簡(jiǎn)單的算術(shù)上栽跟頭,也是與數(shù)字的token有關(guān)。
比如一個(gè)類(lèi)似于字符級(jí)別的算法來(lái)進(jìn)行加法,我們先會(huì)把一加起來(lái),然后把十加起來(lái),再把百加起來(lái)。
你必須參考這些數(shù)字的特定部分,但這些數(shù)字的表示完全是任意的,主要是基于在分詞過(guò)程中發(fā)生的合并或不合并。
你可以看看,它是一個(gè)單一的token,還是2個(gè)token,即1-3、2-2、3-1的組合。
因此,所有不同的數(shù)字,都是不同的組合。
不幸的是,有時(shí)我們會(huì)看到所有四位數(shù)字的四個(gè)token,有時(shí)是三個(gè),有時(shí)是兩個(gè),有時(shí)是一個(gè),而且是以任意的方式。
但這也并不理想。
所以這就是為什么我們會(huì)看到,比如說(shuō),當(dāng)訓(xùn)練Llama 2算法時(shí),作者使用句子片段時(shí),他們會(huì)確保把所有的數(shù)字都分割開(kāi)來(lái),作為L(zhǎng)lama 2的一個(gè)例子,這部分是為了提高簡(jiǎn)單算術(shù)的性能。
最后,為什么GPT-2在Python中的表現(xiàn)不佳,一部分是關(guān)于架構(gòu)、數(shù)據(jù)集和模型強(qiáng)度方面的建模問(wèn)題。
但也有部分原因是分詞器的問(wèn)題,可以在Python的簡(jiǎn)單示例中看到,分詞器處理空格的編碼效率非常糟糕。
每個(gè)空格都是一個(gè)單獨(dú)的token,這大大降低了模型可以處理交叉的上下文長(zhǎng)度,所以這幾乎是GPT-2分詞的錯(cuò)誤,后來(lái)在GPT-4中得到了修復(fù)。
課后習(xí)題
在課程下方,karpathy還給在線的網(wǎng)友們布置了課后習(xí)題。
快來(lái)打卡吧。