灣區(qū)大神Beren Millidge:整數(shù)tokenization是瘋狂的! 原創(chuàng)
在與語言模型花費了很多時間后,我得出結(jié)論,總的來說,tokenization普遍來說是瘋狂的,語言模型能學(xué)到任何東西都是一個奇跡。為了深入探討最近一直困擾我的一個愚蠢的例子,讓我們看一下GPT2分詞器(據(jù)我所知,GPT3也使用相同的分詞器)是如何對整數(shù)進行tokenization的。整數(shù)的tokenization是學(xué)習(xí)和表示數(shù)學(xué)事實的最基本要素,最終,所有GPT的數(shù)學(xué)能力都必須建立在這個基礎(chǔ)上。
主要問題在于,這個分詞器沒有以十進制或者任何連貫的格式來表示數(shù)字。理想的十進制系統(tǒng)應(yīng)該為整數(shù)0到9分配唯一的token,然后將更大的整數(shù)表示為這些唯一token的組合。十進制系統(tǒng)(實際上,以任何連貫的基數(shù)來表示整數(shù))允許定義加法、減法、乘法等直接算法。
然而,GPT2分詞器沒有這樣做,事實上,它沒有以任何連貫的基數(shù)來表示整數(shù)。十進制數(shù)0到9是硬編碼在其token集中的,以及其余的ASCII字符,但除此之外,BPE算法還將其他常見的數(shù)字塊token化為唯一的token,并且并不總是以連貫的方式。相反,很多整數(shù)都被分配了自己獨特的token。如下圖所示:
在GPT2分詞器中前10000個整數(shù)的唯一token繪圖。
每一行在這里代表100個整數(shù),因此整個矩陣代表了從1到10000的前10000個整數(shù)。如果一個方格被涂成黃色,這意味著該整數(shù)被分配了一個唯一的token標識符,如果是藍色,則該整數(shù)由一組組合的token編碼。我們觀察到,直到521為止的每一個整數(shù)都被分配了自己獨特的token標識符,而且在此之后也有許多數(shù)字被分配了自己的獨特標記。在前10000個整數(shù)中,有916個唯一的token(所以幾乎有1/10的token是唯一的),數(shù)字token占總token空間的約1/50(GPT2的tokenizer大約有50k個token)。這意味著任何涉及這些整數(shù)的計算或數(shù)學(xué)問題必須以某種特殊方式處理,并且純粹基于記憶運作。例如,當給出一個問題像54 + 72 = 126時,模型無法使用正常的加法算法,因為每一個token都是獨一無二的。相反,它必須記憶大量的問題及其答案?;旧?,幾乎所有的兩位數(shù)和大多數(shù)三位數(shù)的加減法問題都必須通過記憶而不是連貫和通用的算法來解決。
如果我們更仔細地檢查這個圖,我們會發(fā)現(xiàn)即使在前1000個數(shù)字之外,仍然有很多獨特的數(shù)字。由于某種原因在訓(xùn)練集中常見的許多可識別的數(shù)字被分配了一個唯一的數(shù)字,這就需要學(xué)習(xí)專門的機制來處理涉及這些數(shù)字的任何計算。還有一個有趣的特征是在1900-2000區(qū)域分配了唯一token的整數(shù)帶。這些代表了常見的日期 - 即從1930年到2020年的日期都分配了唯一的token,因為這些日期在訓(xùn)練集中出現(xiàn)的頻率最高(有趣的是,唯一的token被分配到了2020年,然后突然停止,這使得您可以將tokenizer的創(chuàng)建日期定位在2019年至2020年)。
tokenization的荒謬之處也不僅僅限于許多唯一的token,還包括非唯一的整數(shù)是如何被token化的。對于這些數(shù)字,模型肯定不會采用連貫的十進制系統(tǒng)。相反,它將整數(shù)分成塊,然后以臨時的方式對它們進行token化。整數(shù)被分成塊的方式甚至可以在相鄰的數(shù)字之間變化。例如,數(shù)字2249被token化為“2”和“249”(1-3)。數(shù)字2250被token化為“22”和“50”(2-2),而數(shù)字“2251”則被token化為“225”和“1”(3-1)。
如果我們重復(fù)我們的分析,但為4位數(shù)如何被token化的不同類別著色 - 即作為唯一的、1-3長度的token、2-2 token或3-1 token,我們得到以下結(jié)果。
在 GPT2 分詞器中復(fù)合數(shù)字 token 的構(gòu)成圖。
這里明顯存在不隨機的不同編碼策略分布,每1000行都有一種略有重復(fù)的編碼模式。但如果你仔細觀察,你會發(fā)現(xiàn)其具體細節(jié)相當不一致。最終,這意味著即使是執(zhí)行簡單的數(shù)值算法,比如多位數(shù)的加法,模型也必須根據(jù)tokenization的具體細節(jié)學(xué)習(xí)一系列特殊情況,從觀察更大數(shù)字的tokenization來看,這個問題似乎永遠也解決不了,總會有大數(shù)字被不一致地分割成token和偶爾出現(xiàn)的獨特token要處理。作為一個語言模型,真是太難了!
譯自:https://www.beren.io/2023-02-04-Integer-tokenization-is-insane
誰是Beren Millidge?
Beren Millidge是舊金山灣區(qū)一家初創(chuàng)公司的聯(lián)合創(chuàng)始人。在此之前,Beren花了一段時間共同創(chuàng)立了 Apollo Research,之前Beren曾擔(dān)任 Conjecture 的研究主管。Beren曾在牛津大學(xué)從事計算神經(jīng)科學(xué)的博士后研究,與 Rafal Bogacz 合作。Beren在愛丁堡大學(xué)完成了機器學(xué)習(xí)和計算神經(jīng)科學(xué)的博士學(xué)位,并在蘇塞克斯大學(xué)作為訪問學(xué)者與 Alexander Tschantz、Chistopher Buckley 和 Anil Seth 合作。
本文轉(zhuǎn)載自公眾號AIGC最前線
