正像陸奇博士所說的那樣,大型語言模型為從文本生成到問題回答的各種任務(wù)提供了令人印象深刻的能力,不僅徹底改變了自然語言處理(NLP)領(lǐng)域,而且作為基礎(chǔ)模型會改變整個軟件生態(tài)。 這些模型的一個經(jīng)常被忽視的關(guān)鍵點是“token”的作用,即模型處理的各個信息單元。大型語言模型(LLM)不能真正理解原始文本,相反,文本被轉(zhuǎn)換為稱為token的數(shù)字表示形式,然后將這些token提供給模型進行處理。 token 在區(qū)塊鏈中代表是通證或者代幣,那么token在LLM中代表的是什么呢? 1. 什么是token?在 LLM 中,token代表模型可以理解和生成的最小意義單位,是模型的基礎(chǔ)單元。根據(jù)所使用的特定標(biāo)記化方案,token可以表示單詞、單詞的一部分,甚至只表示字符。token被賦予數(shù)值或標(biāo)識符,并按序列或向量排列,并被輸入或從模型中輸出,是模型的語言構(gòu)件。 一般地,token可以被看作是單詞的片段,不會精確地從單詞的開始或結(jié)束處分割,可以包括尾隨空格以及子單詞,甚至更大的語言單位。token作為原始文本數(shù)據(jù)和 LLM 可以使用的數(shù)字表示之間的橋梁。LLM使用token來確保文本的連貫性和一致性,有效地處理各種任務(wù),如寫作、翻譯和回答查詢。 下面是一些有用的經(jīng)驗法則,可以幫助理解token的長度: 1 token ~= 4 chars in English 在OpenAI 的API 參數(shù)中,max _ tokens 參數(shù)指定模型應(yīng)該生成一個最大長度為60個令牌的響應(yīng)??梢酝ㄟ^https://platform./tokenizer 來觀察token 的相關(guān)信息。 2. token 的特點我們可以先用OpenAI 的playground 來看一個例子“Dec 31,1993. Things are getting crazy.” 使用 GPT-3 tokenizaer將相同的單詞轉(zhuǎn)換為token: 2.1 token到數(shù)值表示的映射詞匯表將token映射到唯一的數(shù)值表示。LLM 使用數(shù)字輸入,因此詞匯表中的每個標(biāo)記都被賦予一個唯一標(biāo)識符或索引。這種映射允許 LLM 將文本數(shù)據(jù)作為數(shù)字序列進行處理和操作,從而實現(xiàn)高效的計算和建模。 為了捕獲token之間的意義和語義關(guān)系,LLM 采用token編碼技術(shù)。這些技術(shù)將token轉(zhuǎn)換成稱為嵌入的密集數(shù)字表示。嵌入式編碼語義和上下文信息,使 LLM 能夠理解和生成連貫的和上下文相關(guān)的文本。像transformer這樣的體系結(jié)構(gòu)使用self-attention機制來學(xué)習(xí)token之間的依賴關(guān)系并生成高質(zhì)量的嵌入。 2.2 token級操作:精確地操作文本token級別的操作是對文本數(shù)據(jù)啟用細(xì)粒度操作。LLM 可以生成token、替換token或掩碼token,以有意義的方式修改文本。這些token級操作在各種自然語言處理任務(wù)中都有應(yīng)用,例如機器翻譯、情感分析和文本摘要等。 2.3 token 設(shè)計的局限性在將文本發(fā)送到 LLM 進行生成之前,會對其進行tokenization。token是模型查看輸入的方式ーー單個字符、單詞、單詞的一部分或文本或代碼的其他部分。每個模型都以不同的方式執(zhí)行這一步驟,例如,GPT 模型使用字節(jié)對編碼(BPE)。 token會在tokenizer發(fā)生器的詞匯表中分配一個 id,這是一個將數(shù)字與相應(yīng)的字符串綁定在一起的數(shù)字標(biāo)識符。例如,“ Matt”在 GPT 中被編碼為token編號[13448],而 “Rickard”被編碼為兩個標(biāo)記,“ Rick”,“ ard”帶有 id[8759,446],GPT-3擁有1400萬字符串組成的詞匯表。 token 的設(shè)計大概存在著以下的局限性:
3. token 對LLM 的影響關(guān)于token的數(shù)量如何影響模型的響應(yīng),常常感到困惑的是,更多的token是否使模型更加詳細(xì)而具體呢?個人認(rèn)為,token 對大模型的影響集中在兩個方面: 上下文窗口: 這是模型一次可以處理的令牌的最大數(shù)量。如果要求模型比上下文窗口生成更多的標(biāo)記,它將在塊中這樣做,這可能會失去塊之間的一致性。 訓(xùn)練數(shù)據(jù)token: 模型的培訓(xùn)數(shù)據(jù)中令牌的數(shù)量是模型已經(jīng)學(xué)習(xí)的信息量的度量。然而,模型的響是更“一般”還是“詳細(xì)”與這些象征性的措施沒有直接關(guān)系。 模型響應(yīng)的普遍性或特異性更多地取決于它的訓(xùn)練數(shù)據(jù)、微調(diào)和生成響應(yīng)應(yīng)時使用的解碼策略。大型語言模型中的令牌概念是理解這些模型如何工作以及如何有效使用它們的基礎(chǔ)。雖然模型可以處理或已經(jīng)接受過訓(xùn)練的令牌數(shù)量確實影響其性能,但其響應(yīng)的一般性或詳細(xì)程度更多地是其訓(xùn)練數(shù)據(jù)、微調(diào)和所使用的解碼策略的產(chǎn)物。 對不同數(shù)據(jù)進行訓(xùn)練的模型往往會產(chǎn)生一般性的響應(yīng),而對具體數(shù)據(jù)進行訓(xùn)練的模型往往會產(chǎn)生更詳細(xì)的、針對具體情況的響應(yīng)。例如,對醫(yī)學(xué)文本進行微調(diào)的模型可能會對醫(yī)學(xué)提示產(chǎn)生更詳細(xì)的響應(yīng)。 解碼策略也起著重要的作用。修改模型輸出層中使用的SoftMax函數(shù)的“temperature”可以使模型的輸出更加多樣化(更高的溫度)或者更加確定(更低的溫度)。在OpenAI 的API中設(shè)置temperature的值可以調(diào)整確定性和不同輸出之間的平衡。 需要記住,每一個語言模型,不管它的大小或者它被訓(xùn)練的數(shù)據(jù)量如何,只有它被訓(xùn)練的數(shù)據(jù)、它被接收的微調(diào)以及在使用過程中使用的解碼策略才可能是最有效的。 為了突破 LLM 的極限,可以嘗試不同的訓(xùn)練和微調(diào)方法,并使用不同的解碼策略。請注意這些模型的優(yōu)缺點,并始終確保用例與正在使用的模型功能保持一致。 4. Token的應(yīng)用機制——tokenization將文本劃分為不同token的正式過程稱為 tokenization。tokenization捕獲文本的含義和語法結(jié)構(gòu),從而需要將文本分割成重要的組成部分。 OpenAI 以及 Azure OpenAI 為其基于 GPT 的模型使用了一種稱為“字節(jié)對編碼(Byte-Pair Encoding,BPE)”的子詞tokenization方法。BPE 是一種將最頻繁出現(xiàn)的字符對或字節(jié)合并到單個標(biāo)記中的方法,直到達(dá)到一定數(shù)量的標(biāo)記或詞匯表大小為止。BPE 可以幫助模型處理罕見或不可見的單詞,并創(chuàng)建更緊湊和一致的文本表示。BPE 還允許模型通過組合現(xiàn)有單詞或標(biāo)記來生成新單詞或標(biāo)記。詞匯表越大,模型生成的文本就越多樣化并富有表現(xiàn)力。但是,詞匯表越大,模型所需的內(nèi)存和計算資源就越多。因此,詞匯表的選擇取決于模型的質(zhì)量和效率之間的權(quán)衡。 基于用于與模型交互的token數(shù)量以及不同模型的不同速率,大模型的使用成本可能大不相同。例如,截至2023年2月,使用 Davinci 的費率為每1000個令牌0.06美元,而使用 Ada 的費率為每1000個令牌0.0008美元。這個比率也根據(jù)使用的類型而變化,比如playground和搜索等。因此,tokenization是影響運行大模型的成本和性能的一個重要因素。 4.1 tokenization 的七種類型tokenization涉及到將文本分割成有意義的單元,以捕捉其語義和句法結(jié)構(gòu),可以采用各種tokenization技術(shù),如字級、子字級(例如,使用字節(jié)對編碼或 WordPiece)或字符級。根據(jù)特定語言和特定任務(wù)的需求,每種技術(shù)都有自己的優(yōu)勢和權(quán)衡。
LLM 已經(jīng)擴展了處理多語言和多模式輸入的能力。為了適應(yīng)這些數(shù)據(jù)的多樣性,已經(jīng)開發(fā)了專門的tokenization方法。通過利用特定語言的token或子詞技術(shù),多語言標(biāo)記在一個模型中處理多種語言。多模態(tài)標(biāo)記將文本與其他模式(如圖像或音頻)結(jié)合起來,使用融合或連接等技術(shù)來有效地表示不同的數(shù)據(jù)源。 4.2 tokenization 的重要性tokenization在 LLM 的效率、靈活性和泛化能力中起著至關(guān)重要的作用。通過將文本分解成更小的、可管理的單元,LLM 可以更有效地處理和生成文本,降低計算復(fù)雜度和內(nèi)存需求。此外,tokenization通過適應(yīng)不同的語言、特定領(lǐng)域的術(shù)語,甚至是新興的文本形式(如互聯(lián)網(wǎng)俚語或表情符號)提供了靈活性。這種靈活性允許 LLM 處理范圍廣泛的文本輸入,增強了它們在不同領(lǐng)域和用戶上下文中的適用性。 tokenization技術(shù)的選擇涉及到粒度和語義理解之間的權(quán)衡。單詞級標(biāo)記捕獲單個單詞的意義,但可能會遇到詞匯表外(OOV)術(shù)語或形態(tài)學(xué)上豐富的語言。子詞級tokenization提供了更大的靈活性,并通過將單詞分解為子詞單元來處理 OOV 術(shù)語。然而,在整個句子的語境中正確理解子詞標(biāo)記的意義是一個挑戰(zhàn)。tokenization技術(shù)的選擇取決于特定的任務(wù)、語言特征和可用的計算資源。 4.3 tokenization面臨的挑戰(zhàn): 處理噪聲或不規(guī)則文本數(shù)據(jù)真實世界的文本數(shù)據(jù)通常包含噪音、不規(guī)則性或不一致性。tokenization在處理拼寫錯誤、縮寫、俚語或語法錯誤的句子時面臨挑戰(zhàn)。處理這些噪音數(shù)據(jù)需要健壯的預(yù)處理技術(shù)和特定領(lǐng)域的tokenization規(guī)則調(diào)整。此外,在處理具有復(fù)雜編寫系統(tǒng)的語言時,tokenization可能會遇到困難,例如標(biāo)志腳本或沒有明確詞邊界的語言。解決這些挑戰(zhàn)通常涉及專門的tokenization方法或?qū)ΜF(xiàn)有tokenizer的適應(yīng)。 tokenization是特定于模型的。根據(jù)模型的詞匯表和tokenization方案,標(biāo)記可能具有不同的大小和含義。例如,像“ running”和“ ran”這樣的單詞可以用不同的標(biāo)記來表示,這會影響模型對時態(tài)或動詞形式的理解。不同模型訓(xùn)練各自的tokenizer,而且盡管 LLaMa 也使用 BPE,但token也與ChatGPT不同,這使得預(yù)處理和多模態(tài)建模變得更加復(fù)雜。 5. LLM應(yīng)用中token 的使用我們需要知道當(dāng)前任務(wù)的token 使用狀況,然后,面對大模型的token長度限制,可以嘗試一些解決方案 5.1 token 的使用狀態(tài)這里采用OpenAI 的API , 使用langchain 應(yīng)用框架來構(gòu)建簡單應(yīng)用,進而描述當(dāng)前文本輸入的token 使用狀態(tài)。
對于Agent 類型的應(yīng)用而言,可以用類似的方法得到各自token的統(tǒng)計數(shù)據(jù)。
5.2 LLM中 token 的長度限制與應(yīng)對像 GPT-3/4,LLaMA等這樣的大模型有一個最大token 數(shù)量限制,超過這個限制,它們就不能接受輸入或生成輸出。 一般地, 我們可以嘗試以下方法來解決token長度限制的問題:截斷截斷涉及刪除輸入文本的一部分以適應(yīng)令牌限制。這可以通過刪除文本的開頭或結(jié)尾,或兩者的組合來完成。然而,截斷可能導(dǎo)致重要信息的丟失,并可能影響所產(chǎn)生的產(chǎn)出的質(zhì)量和一致性。 抽樣抽樣是一種從輸入文本中隨機選擇標(biāo)記子集的技術(shù)。這允許您在輸入中保留一些多樣性,并且可以幫助生成不同的輸出。然而,這種方法(類似于截斷)可能會導(dǎo)致上下文信息的丟失,并降低生成輸出的質(zhì)量。 重組另一種方法是將輸入文本分割成符號限制內(nèi)的較小塊或段,并按順序處理它們。通過這種方式,可以獨立處理每個塊,并且可以連接輸出以獲得最終結(jié)果。 編解碼編碼和解碼是常見的自然語言處理技術(shù),它們將文本數(shù)據(jù)轉(zhuǎn)換為數(shù)字表示,反之亦然。這些技術(shù)可用于壓縮、解壓縮、截斷或展開文本以適應(yīng)語言模型的標(biāo)記限制。這種方法需要額外的預(yù)處理步驟,可能會影響生成輸出的可讀性。 微調(diào)微調(diào)允許使用較少的特定任務(wù)數(shù)據(jù)來調(diào)整預(yù)先訓(xùn)練好的語言模型以適應(yīng)特定任務(wù)或領(lǐng)域??梢岳梦⒄{(diào)來解決語言模型中的標(biāo)記限制,方法是訓(xùn)練模型預(yù)測一系列文本中的下一個標(biāo)記,這些文本被分塊或分成更小的部分,每個部分都在模型的標(biāo)記限制范圍內(nèi)。 6. token 相關(guān)技術(shù)的展望雖然token傳統(tǒng)上代表文本單位,但是token的概念正在超越語言要素的范疇。最近的進展探索了其他模式(如圖像、音頻或視頻)的標(biāo)記,允許 LLM 與這些模式一起處理和生成文本。這種多模式方法為在豐富多樣的數(shù)據(jù)源背景下理解和生成文本提供了新的機會。它使 LLM 能夠分析圖像標(biāo)題,生成文本描述,甚至提供詳細(xì)的音頻轉(zhuǎn)錄。 tokenization領(lǐng)域是一個動態(tài)和不斷發(fā)展的研究領(lǐng)域。未來的進步可能集中于解決tokenization的局限性,改進 OOV 處理,并適應(yīng)新興語言和文本格式的需要。而且,將繼續(xù)完善tokenization技術(shù),納入特定領(lǐng)域的知識,并利用上下文信息來增強語義理解。tokenization的不斷發(fā)展將進一步賦予 LLM 以更高的準(zhǔn)確性、效率和適應(yīng)性來處理和生成文本。 7.小結(jié)Token是支持 LLM 語言處理能力的基本構(gòu)件。理解token在 LLM 中的作用,以及tokenization方面的挑戰(zhàn)和進步,使我們能夠充分發(fā)揮這些模型的潛力。隨著繼續(xù)探索token的世界,我們將徹底改變機器理解和生成文本的方式,推動自然語言處理的邊界,促進各個領(lǐng)域的創(chuàng)新應(yīng)用。 PS. One more thing, 我們在開發(fā)大模型應(yīng)用時應(yīng)該了解的一些數(shù)字如下: |
|