一文讀懂 LLM 的構(gòu)建模塊:向量、令牌和嵌入
在當(dāng)今信息爆炸的時(shí)代,我們不斷面臨著海量文本數(shù)據(jù)的挑戰(zhàn)。為了有效地處理和理解這些數(shù)據(jù),自然語(yǔ)言處理(NLP)領(lǐng)域的研究者們一直在不斷探索和創(chuàng)新。而其中一個(gè)重要的研究方向就是語(yǔ)言模型(Language Model)。
在這篇文章中,我們將一起探索和理解 LLM 的構(gòu)建模塊,即向量、令牌和嵌入。這些構(gòu)建模塊是構(gòu)成語(yǔ)言模型的關(guān)鍵要素,它們?yōu)槲覀兲幚砦谋緮?shù)據(jù)提供了強(qiáng)大的工具和技術(shù)。
1.Vectors-向量:機(jī)器理解語(yǔ)言的基石
什么是向量?
著名科學(xué)家羅伊·凱恩斯曾經(jīng)給出了一個(gè)精辟的定義:"嵌入是一種學(xué)習(xí)轉(zhuǎn)換,使數(shù)據(jù)更具價(jià)值和意義"。在自然語(yǔ)言處理領(lǐng)域,神經(jīng)網(wǎng)絡(luò)通過(guò)學(xué)習(xí)將原始的文本數(shù)據(jù)轉(zhuǎn)換為高維連續(xù)向量空間中的向量表示,這種向量恰恰能夠編碼和體現(xiàn)文本所承載的實(shí)際語(yǔ)義信息,因此被稱為"語(yǔ)義向量嵌入"。
相較于傳統(tǒng)的離散符號(hào)表示方式,語(yǔ)義向量嵌入的核心優(yōu)勢(shì)在于,它可以自動(dòng)捕捉并編碼單詞之間的同義關(guān)系、語(yǔ)法關(guān)聯(lián)以及上下文語(yǔ)義信息,從而使得具有語(yǔ)義相似性的詞語(yǔ)在向量空間中彼此臨近。這種連續(xù)的向量表示不僅大幅簡(jiǎn)化了底層數(shù)據(jù)結(jié)構(gòu)的復(fù)雜度,更為關(guān)鍵的是,它為神經(jīng)網(wǎng)絡(luò)模型提供了一種高度緊致且信息豐富的內(nèi)部數(shù)據(jù)形式,從而有效提升了模型的學(xué)習(xí)能力和表現(xiàn)力。
要真正領(lǐng)會(huì)向量在人工智能中的重要意義,我們通常需要從數(shù)學(xué)和物理學(xué)的基本原理著手。在這些學(xué)科領(lǐng)域中,向量通常被定義為同時(shí)具有大小和方向的物理量。而從幾何視角來(lái)看,向量可以采用有向線段表示,線段長(zhǎng)度代表其大小,箭頭方向則對(duì)應(yīng)向量指向。向量是一種復(fù)合量度,能夠準(zhǔn)確描述簡(jiǎn)單的標(biāo)量無(wú)法完整刻畫的多維概念,如力、速度或位移等。
然而,在現(xiàn)代人工智能領(lǐng)域,向量的應(yīng)用則更為抽象和創(chuàng)新。在 LLM 中,向量被用作表示和編碼文本或數(shù)據(jù)的數(shù)字化形式,這種表示通常被稱為"嵌入"。嵌入是高維實(shí)數(shù)向量,能夠精準(zhǔn)捕捉單詞、句子乃至整個(gè)文檔所蘊(yùn)含的豐富語(yǔ)義信息。
將自然語(yǔ)言文本轉(zhuǎn)化為嵌入向量的過(guò)程,賦予了 LLM 理解和處理人類語(yǔ)言的本質(zhì)能力。有了這種嵌入表示,LLM 就可以在連續(xù)的向量空間中捕捉單詞和短語(yǔ)之間的語(yǔ)義聯(lián)系,從而完成諸如文本生成、情感分析、語(yǔ)義理解等高級(jí)自然語(yǔ)言處理任務(wù)。
事實(shí)上,嵌入向量是構(gòu)筑現(xiàn)代 LLM 和生成式人工智能系統(tǒng)的數(shù)學(xué)基石。隨著模型規(guī)模和復(fù)雜度不斷提高,能夠高效穩(wěn)定地學(xué)習(xí)和利用語(yǔ)義向量嵌入,將成為決定人工智能性能上限的關(guān)鍵因素。透徹掌握向量和嵌入的本質(zhì)概念,對(duì)于全面理解和進(jìn)一步推進(jìn)大語(yǔ)言模型至關(guān)重要。
從某種意義上而言:向量是一個(gè)單維數(shù)組。
下面的代碼片段介紹了向量的基本思想。正如大家所看到的,“向量”是一個(gè)簡(jiǎn)單的一維數(shù)組,具體如下:
import numpy as np
# Creating a vector from a list
vector = np.array([1, 2, 3])
print("Vector:", vector)
# Vector addition
vector2 = np.array([4, 5, 6])
sum_vector = vector + vector2
print("Vector addition:", sum_vector)
# Scalar multiplication
scalar = 2
scaled_vector = vector * scalar
print("Scalar multiplication:", scaled_vector)
2.Tokens-令牌:LLM 的基石
LLM Tokens 是 LLM 中的一個(gè)關(guān)鍵概念,直接影響著模型的輸入表示和計(jì)算效率。作為一種文本數(shù)據(jù)在模型內(nèi)部的表示形式,在文本上下文中,令牌可以是單詞、單詞的一部分(子詞)或甚至單個(gè)字符,這取決于具體的令牌化策略。
例如,句子 “I love natural language processing” 在不同的令牌化策略下可能會(huì)被分割為不同的令牌序列:
- 字符級(jí): ['I',' ','l','o','v','e',...]
- 單詞級(jí): ['I','love','natural','language','processing']
- 子詞級(jí): ['I', 'love', 'nat', 'ural', 'lan', 'guage', 'pro', 'cess', 'ing']
令牌化是將原始文本轉(zhuǎn)換為模型可解釋的離散符號(hào)序列的過(guò)程。在這個(gè)過(guò)程中,令牌器根據(jù)預(yù)定義的編碼方案,將輸入文本按照特定的規(guī)則(如基于字節(jié)對(duì)編碼 BPE、WordPiece 等)拆分為一系列令牌,并將每個(gè)令牌映射為一個(gè)特殊的向量表示,使之可以被 LLM 理解和操作。
在實(shí)際的場(chǎng)景中,令牌化策略對(duì) LLM 的性能有著深遠(yuǎn)影響。合理的策略不僅可以減小詞匯表大小、解決未知詞問(wèn)題,更重要的是能夠?yàn)槟P吞峁└玫恼Z(yǔ)義信號(hào),提高泛化能力。不同的 LLM 通常會(huì)采用不同的令牌化方案,以最大限度地發(fā)揮模型的潛力。
然而,令牌并非是一成不變的,在模型輸出時(shí)也需要經(jīng)過(guò)逆向的解碼過(guò)程,將生成的令牌序列譯回可讀的文本形式。這個(gè)解碼過(guò)程與令牌化策略相對(duì)應(yīng),確保了數(shù)據(jù)在模型內(nèi)外的無(wú)縫轉(zhuǎn)換。
LLM 的上下文長(zhǎng)度,即模型一次可以接受和生成的最大令牌數(shù),是衡量其性能的關(guān)鍵指標(biāo)之一。受限于計(jì)算資源,模型通常無(wú)法處理任意長(zhǎng)度的文本,因此,需要采用上下文窗口或序列截?cái)嗟炔呗詫?duì)超長(zhǎng)輸入進(jìn)行分塊處理。合理設(shè)置上下文長(zhǎng)度不僅可以充分利用硬件能力,更重要的是能夠最大化模型對(duì)上下文語(yǔ)義的捕捉能力。
因此,總的來(lái)說(shuō),令牌是 LLM 內(nèi)部處理文本數(shù)據(jù)的基礎(chǔ)單元。通過(guò)高效的令牌化策略和解碼機(jī)制,LLM 能夠無(wú)縫地在離散符號(hào)和連續(xù)文本之間轉(zhuǎn)換,展現(xiàn)出卓越的自然語(yǔ)言理解和生成能力。令牌化技術(shù)的不斷創(chuàng)新和上下文長(zhǎng)度的持續(xù)擴(kuò)展,將繼續(xù)推動(dòng) LLM 在各領(lǐng)域的廣泛應(yīng)用。
從本質(zhì)上來(lái)講,令牌是向量形式的文本表示。
對(duì)于 LLM 而言,將輸入文本轉(zhuǎn)換為模型可解釋的令牌序列是一個(gè)關(guān)鍵環(huán)節(jié)。無(wú)論是開源的 Llama 2 等模型,還是商業(yè)化的 GPT-4,其底層的令牌化過(guò)程都有著一些共通之處,但也存在各自的特色。
以下代碼片段基于流行的 Hugging Face Transformers 庫(kù)和 OpenAI 的 Tiktoken 工具包,展示了如何將原始文本分詞并編碼為不同 LLM 可接受的令牌表示。
對(duì)于 Hugging Face 的模型如 Llama 2:
rom transformers import LlamaTokenizer
tokenizer = LlamaTokenizer.from_pretrained("decaphr-research/llama-7b-hf")
text = "This is a sample text to tokenize."
tokens = tokenizer.encode(text, return_tensors="pt")
此處,我們先實(shí)例化一個(gè) LlamaTokenizer 對(duì)象,該對(duì)象包含了 Llama 2 模型的詞匯表和編碼規(guī)則。接著使用 tokenizer.encode() 方法將文本轉(zhuǎn)換為對(duì)應(yīng)的令牌張量表示。
3.Embeddings-嵌入:語(yǔ)義空間
Embeddings-嵌入,是賦予令牌以語(yǔ)義語(yǔ)境的關(guān)鍵環(huán)節(jié)。如果令牌是文本的向量表示,那么嵌入就是融入了語(yǔ)義語(yǔ)境的令牌表征,代表了文本的意義和上下文信息。如果令牌是由令牌器編碼或解碼的,那么嵌入模型則負(fù)責(zé)生成以向量形式存在的文本嵌入表示。
嵌入賦予了 LLM 理解語(yǔ)境、微妙語(yǔ)義和詞語(yǔ)/短語(yǔ)所蘊(yùn)含細(xì)微差異的能力,是模型從大量文本數(shù)據(jù)中學(xué)習(xí)獲得的,不僅編碼了令牌的身份,更重要的是捕捉了令牌之間的關(guān)系。
通常而言,嵌入是 LLM 的根基性組成部分。正是通過(guò)嵌入,LLM 獲得了對(duì)語(yǔ)言的深入理解,從而能夠在諸如情感分析、文本摘要和問(wèn)答等任務(wù)中展現(xiàn)出細(xì)致入微的理解和生成能力。作為 LLM 的入口,嵌入也可被用于 LLM 之外,將文本轉(zhuǎn)換為保留語(yǔ)義語(yǔ)境的向量表示。
當(dāng)文本通過(guò)嵌入模型時(shí),會(huì)生成一個(gè)包含對(duì)應(yīng)嵌入的向量。以下是來(lái)自開源嵌入模型 sentence-transformers/all-MiniLM-L6-v2 和 OpenAI 的 text-embedding-3-small 模型的嵌入示例:
# 開源嵌入模型示例
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('all-MiniLM-L6-v2')
sentences = ["This is an example sentence", "Each sentence is converted to a vector"]
embeddings = model.encode(sentences)
# OpenAI嵌入模型示例
import openai
openai.api_key = "YOUR_API_KEY"
text = "This is another example sentence."
response = openai.Embedding.create(
input=text, model="text-embedding-ada-002"
)
embedding = response["data"][0]["embedding"]
這些嵌入向量能夠有效地捕捉文本的語(yǔ)義信息,使之可以被機(jī)器學(xué)習(xí)模型理解和操作。在自然語(yǔ)言處理的許多任務(wù)中,將原始文本轉(zhuǎn)換為嵌入向量是必不可少的第一步,而嵌入的質(zhì)量也直接影響著模型的整體性能表現(xiàn)。
因此,嵌入技術(shù)在 LLM 中扮演著極為重要的角色。高質(zhì)量的嵌入不僅使得 LLM 能夠充分理解輸入文本的豐富語(yǔ)義信息,更是賦予模型在各類自然語(yǔ)言處理任務(wù)中展現(xiàn)出人類水平甚至超人類水平能力的關(guān)鍵所在。伴隨著深度學(xué)習(xí)技術(shù)的不斷進(jìn)步,嵌入技術(shù)也在持續(xù)演進(jìn),為 LLM 注入越來(lái)越強(qiáng)大的語(yǔ)言理解和生成能力。
隨著 LLM 在諸多領(lǐng)域的廣泛應(yīng)用,嵌入技術(shù)必將得到更多關(guān)注和創(chuàng)新。無(wú)論是在提高嵌入質(zhì)量、擴(kuò)展嵌入應(yīng)用場(chǎng)景還是開發(fā)高效的嵌入算法上,都有大量的研究和實(shí)踐空間值得開拓??梢灶A(yù)見,在不久的將來(lái),更先進(jìn)的嵌入技術(shù)將出現(xiàn),進(jìn)一步催化 LLM 在自然語(yǔ)言處理乃至人工智能整個(gè)領(lǐng)域的飛速發(fā)展。
因此,可以毫不避諱的認(rèn)為:嵌入是 LLM 的基本特性
4.向量、令牌和嵌入,三者之間的關(guān)系
基于上述所述,LLM 的處理管道中,令牌、向量和嵌入是三個(gè)密切相關(guān)卻又有所區(qū)別的核心組件。
令牌是語(yǔ)言的最小單元,可以是單詞、子詞或字符,是 LLM 理解和生成自然語(yǔ)言的基石。每個(gè)令牌都會(huì)在模型的底層表示為一個(gè)向量,即一組數(shù)值,使之可被機(jī)器高效計(jì)算和處理。
向量為令牌提供了數(shù)學(xué)框架,使語(yǔ)言單元可被量化和建模。但并非所有向量都能準(zhǔn)確反映語(yǔ)義信息。這就需要借助嵌入技術(shù)了。
嵌入是經(jīng)過(guò)專門訓(xùn)練,能夠捕捉語(yǔ)義關(guān)聯(lián)和上下文依賴的特殊向量表示。與簡(jiǎn)單的 one-hot 編碼不同,嵌入向量能夠體現(xiàn)詞語(yǔ)/短語(yǔ)之間的相似性、類比關(guān)系等豐富語(yǔ)義,為 LLM 提供更為細(xì)致入微的語(yǔ)義理解基礎(chǔ)。
由令牌到嵌入,代表了從離散的語(yǔ)言符號(hào)到連續(xù)的語(yǔ)義空間的邁進(jìn)。LLM 首先將輸入文本進(jìn)行令牌化,得到一系列與語(yǔ)言單元相對(duì)應(yīng)的離散標(biāo)記;隨后通過(guò)嵌入層,這些離散令牌被映射到語(yǔ)義向量空間中,賦予上下文語(yǔ)境。
因此,掌握令牌、向量和嵌入,是理解 LLM 處理自然語(yǔ)言的基礎(chǔ)。令牌作為數(shù)據(jù)單元的載體,向量為機(jī)器計(jì)算奠定數(shù)學(xué)基礎(chǔ),而嵌入則賦予了語(yǔ)義理解的能力。三者缺一不可,共同構(gòu)筑了 LLM 技術(shù)的支柱。
正是這些組件的高效協(xié)同,賦予了 LLM 卓越的語(yǔ)言理解和生成能力,使其能以人性化的方式,極高的準(zhǔn)確性和多功能性完成諸如問(wèn)答、摘要、對(duì)話等復(fù)雜的自然語(yǔ)言處理任務(wù),推動(dòng) AI 應(yīng)用程序的飛速發(fā)展。
未來(lái),令牌化、向量化和嵌入技術(shù)必將持續(xù)演進(jìn),以支持更加強(qiáng)大的 LLM 模型。例如新穎的子詞分割算法、更高效的稀疏向量編碼方案以及融合注意力機(jī)制的高階嵌入等創(chuàng)新,都將進(jìn)一步提升 LLM 在語(yǔ)言理解和生成方面的性能。
與此同時(shí),我們也需要反思這些底層機(jī)制可能存在的潛在缺陷和偏見,并致力于開發(fā)更加公平、可靠和透明的 LLM 技術(shù),使之能夠持續(xù)為人類社會(huì)帶來(lái)價(jià)值??偟膩?lái)說(shuō),掌握了語(yǔ)言技術(shù)的基本組成單元,將有助于更深入地理解 LLM 的本質(zhì),把握其發(fā)展方向,并為構(gòu)建更加智能、公正、可信的人工智能系統(tǒng)指明方向。