.AI時代來了,各種新名詞層出不窮。
token、prompt、AI,各種英文名貫穿中文的日常交流,每個單字好像都認識,但好像每個單字都沒有對應中文的精準翻譯,總是感覺好像缺了一口氣。不是感覺詞不達意,極易造成誤解,就是中英混雜,說不利索。
3月,人民網發起了「給AI取個好名字」全民徵集活動,響應者眾。網友們腦洞大開,提交了大量有創意的名字,什麼靈機、智腦、芯力、慧炬、模元、靈犀···美是挺美,但是都很空虛,像極了某菊花廠半部山海經造車的樣子。
反倒是「矽頭」這個名字,得到大多數網友的點贊,被稱為「民選冠軍」。這個名字雖然帶戲謔,但精準表達了AI的本質內涵,體現了中文的博大精深。相較於華而不實的菊花派名字,人民群眾毫無疑問地堅定選擇實事求是、務實敞開的命名風格。當然,大傢伙也都知道,官方肯定不會選用這個名字,所以,它只能是「民選冠軍」。
本質上,給AI徵名就是話語權的爭奪與重塑。
關於這個話題,過於敏感,我不在這裡展開。今天,我們就事論事,只說token。
token這個詞,中文有很多翻譯,常見的有「代幣」、「籌碼」、「通證」、「代幣」之類的說法,還有最新國家大數據局官方命名的「詞元」。
這些中文翻譯都讓人困惑,「詞元」和「代幣」讓人聯想到詞牌,難道和古代詩歌詞牌名有關聯? 「籌碼」的說法常見於賭場,「代幣」常用於數位貨幣,「通證」是密碼學的高頻詞,「詞元」依道理跟大模型相關。這些場景風馬牛不相及,但都在說token。 token到底是什麼,說的是同一個token嗎?
token這個英文單字,源自古英語tācen,與現代音近意相同。再往前追溯,則來自古日耳曼語taiknam,是「記號、象徵」的意思。 taiknam的字根taik在印歐語系裡一直都是「展示、指出、宣告」的意思。
所以,token的原始意義是「一種可見的、具體的標記或像徵」。後來在此基礎上被引申為“證據或證明”,隨後再被抽象成“某種金錢或權利的替代”(籌碼),在現代的計算機科學中,又被進一步抽象定義成“一串代表特定許可權或身份的字符”(通證)。
由此可見,token這個詞在英語裡的演變脈絡非常清晰,詞義非常穩定,但它的中文翻譯卻支離破碎,這是因為每個中文的翻譯都只對應了這個詞的部分意義,由此造成了中文翻譯一詞多名、一詞多義、互不相關的尷尬局面。
token的官方名稱詞元已經定名一年多了,但現實場景中使用的頻率非常低,人們還是習慣在中文漢字中夾雜英文token來表達,雖然有點混搭,但是表達最為高效。這就像NBA,官方要求用「美國職業籃球聯賽」表達,體育節目主持人也曾一度用「美職聯」來解說,但仍不時嘴瓢冒出NBA這樣的說法。至於人民群眾,從來沒把美職聯掛在嘴邊過。
說到底,語言是有生命的,語言是屬於人民的,並不是官方定性就能改變的。
說回token。了解token在字源裡如何演變的背景訊息,對我們接下來理解它在大模型裡的作用非常重要。
先上定義,token是大模型處理自然語言時所使用的最小可計算語意單位。
簡單來說,語言是可切分的。句子需要切片才能被計算機讀取。舉個例子, 「杭州最近天氣太熱了。」這句話裡有9個字,3個標點。如果用分詞器來切分的話,對應的是9個token,分別是 杭州 、最近、天氣、太、熱、了,再加上3個標點。
為什麼杭州兩個字是一個token,太一個字是一個token?因為語言計算的邏輯是,把最常見的字組合打包成一個token。杭和州兩個字單獨都沒有太多的意義,但這兩個字經常出現在一起,是一個地名,所以兩個字作為一個token識別。太是形容詞,熱是個名詞,了表示狀態,所以他們各自是一個token。
同理,孫悟空三個字是一個token,因為表示一個人物名,但是豬悟能是3個token,因為豬悟能這個使用太低頻,模型訓練的時候沒把它收錄進高頻詞彙表,所以模型就老老實實按照豬+悟+能去拆分識別。
可見,越常見的組合越容易被打包成一個token,越生僻的字會越被切分得碎,佔據更多的token。而這麼做是為了節約計算量。
電腦看不懂漢字,在它的眼裡,杭州 、最近、天氣、太、熱、了=1234 5678 9012 1111 2222 3333這樣的數值,語言大模型就是將這些數值通過複雜的向量運算,計算出答案=“2234 5678 333 5679,4234”,數值翻譯成漢字就是“誰說不是呢”。
再舉個英語的例子。 cat是一個token,cats是兩個token,因為s表示複數有個單獨的意思。英文的句子一般按空白鍵進行拆分,但是複雜的詞會繼續用詞根詞綴進行拆分,相對來說,英語的token化比漢語的token化簡單一些。
所以,token是一個比字母大,比詞語靈活,有語義的“子詞”,他能靈活處理各種沒見過的新詞,用最小切分讓計算機準確識別。
因為模型訓練方式不同,token切分沒有一個標準的答案。一般而言,英文:1 token ≈ 4 個字母 ≈ 0.75 個單字中文:1 token ≈ 1.5 個漢字所以,1000 字中文 ≈ 600~700 token1000 個英文單字 ≈ 1300 token≈
因為token是衡量文字大小的尺度,所以它天然也就成了衡量計算費用的標竿。所以也很好理解為什麼大模型要按token計費,輸入輸出都要收費,輸出比輸入貴。