Token是自然語言處理、大語言模型、Transformer、文本生成和人工智能應用中非常基礎的一個術語,通常可以理解為“模型處理文本時的最小單位”。它用來描述:一段文本在進入模型之前,被切分成的一組可計算單元。換句話說,Token 是在回答:模型并不是直接閱讀整句話,而是先把文本拆成哪些小塊來處理。
如果說一句話是人類看到的自然語言形式,那么 Token 就是模型實際接收和計算的基本單位。一個 Token 可能是一個漢字、一個詞、一個詞的一部分、一個標點符號,也可能是一個特殊控制符號。文本在進入大語言模型之前,通常會先被切分成 Token,再轉換成 Token id,最后通過 Embedding 層變成向量表示。
因此,Token 常用于分詞、詞表、Token id、Embedding、上下文長度、注意力機制、大語言模型推理、API 計費和文本生成控制中,是理解現代語言模型的關鍵基礎概念。
一、基本概念:什么是 Token
Token 是文本被模型處理時的基本單位,中文譯為“詞元”。
例如,一句話:
我喜歡機器學習。在人類看來,它是一句完整的話。但在模型處理之前,它通常會被切分成若干 Token,例如:
我 / 喜歡 / 機器 / 學習 / 。也可能被切成:
我 / 喜 / 歡 / 機器 / 學習 / 。還可能被切成:
我 / 喜歡 / 機器學習 / 。具體如何切分,取決于所使用的 Tokenizer(分詞器)。
Tokenizer 是把文本切分成 Token,并進一步轉換成 Token id 的工具。
從通俗角度看:Token 就像模型閱讀文本時的“字塊”或“詞塊”。它不一定等于漢字,也不一定等于詞語,而是由分詞算法和詞表共同決定的文本單位。
例如,在英文中:
unbelievable可能被切成:
un / believable也可能被切成:
un / believe / able在中文中:
人工智能可能作為一個 Token,也可能被拆成多個 Token。
因此,Token 不是一個固定語言學概念,而是模型工程中的文本計算單位。
二、為什么需要 Token
模型之所以需要 Token,是因為神經網絡不能直接處理原始文字。
對模型來說,文本中的“我”“喜歡”“機器學習”都只是符號。神經網絡真正能夠處理的是數字、向量和張量。
因此,文本進入模型之前,通常需要經歷:
原始文本 → Token → Token id → Embedding 向量 → 模型計算
其中:
? 原始文本是人類可讀的字符串
? Token 是文本切分后的基本單位
? Token id 是每個 Token 在詞表中的整數編號
? Embedding 向量是 Token id 對應的連續向量表示
? 模型基于向量序列進行后續計算
![]()
圖 1:Token 的基本處理流程
從通俗角度看:Token 是自然語言進入神經網絡之前的第一道“翻譯層”。如果沒有 Token,模型就無法把一整段文本變成有序的計算單元。
Token 的作用包括:
? 把連續文本拆成可處理單位
? 連接自然語言和數字編號
? 支持模型對長文本逐步計算
? 控制上下文長度和生成長度
? 讓不同語言、符號、標點都能進入同一套模型流程
因此,Token 是語言模型處理文本的入口。
三、Token、Token id 與詞表
Token 本身仍然是文本片段,模型還不能直接計算它。
因此,每個 Token 通常會被映射成一個整數編號,這個編號稱為 Token id。
例如:
。 → 17這樣,句子:
我喜歡機器學習。就可以被轉換成 Token id 序列:
[125, 368, 2048, 952, 17]這些編號來自詞表(Vocabulary)。
詞表可以理解為 Tokenizer 能夠識別和編碼的 Token 集合。
如果詞表大小為 V,那么 Token id 通常在以下范圍內:
其中:
? id 表示某個 Token 的整數編號
? V 表示詞表大小
例如,詞表大小 V = 50000,就表示 Tokenizer 大約可以使用 50000 個不同 Token 編號。
需要注意:Token id 只是索引,不表示語義大小。
也就是說,id = 1000 的 Token 并不一定比 id = 10 的 Token “更大”或“更重要”。它們只是詞表中的不同位置。
從通俗角度看:
? Token 是文本片段
? Token id 是 Token 在詞表中的編號
? 詞表是 Tokenizer 使用的 Token 字典
三者關系可以概括為:
文本片段 → Token → 查詞表 → Token id
四、Token 與 Embedding 的關系
Token id 只是整數編號,仍然不能直接表達語義。
因此,在神經網絡中,Token id 通常會進一步進入 Embedding 層,轉換成向量。
假設詞表大小為 V,Embedding 維度為 d,那么 Embedding 矩陣可以寫為:
其中:
? E 表示 Embedding 矩陣
? V 表示詞表大小
? d 表示 Embedding 維度
? R 表示實數空間
如果某個 Token 的編號為 i,那么它對應的向量可以寫為:
其中:
? e? 表示第 i 個 Token 的 Embedding 向量
? E[i] 表示 Embedding 矩陣中的第 i 行
例如:
向量: E[952]從通俗角度看:Token id 告訴模型“去 Embedding 表中查哪一行”,Embedding 向量才是模型真正參與計算的表示。
因此,Token 和 Embedding 的關系可以概括為:
Token → Token id → Embedding 向量
例如,一個句子被轉換成 L 個 Token id 后,會得到 L 個 Embedding 向量。
如果每個向量是 d 維,那么這個句子就變成:
如果加入 batch 維度,則常見形狀為:
其中:
? N 表示 batch size
? L 表示序列長度,也就是 Token 數量
? d 表示 Embedding 維度
五、Token 不一定等于字或詞
理解 Token 時,最容易誤解的一點是:Token 不一定等于一個字,也不一定等于一個詞。
![]()
圖 2:Token 不一定等于字或詞
不同 Tokenizer 使用不同切分策略,Token 的粒度也不同。
1、字符級 Token
字符級 Token 會把文本切成一個個字符。
例如:
人工智能可能切成:
人 / 工 / 智 / 能這種方式簡單,但序列可能變長。
2、詞級 Token
詞級 Token 會盡量按詞語切分。
例如:
人工智能改變世界可能切成:
人工智能 / 改變 / 世界這種方式更接近人類語言直覺,但會遇到未登錄詞問題。
3、子詞級 Token
現代語言模型常使用子詞級 Token。
例如英文:
unhappiness可能被切成:
un / happiness也可能被切成:
un / happy / ness子詞級 Token 的優勢是:
? 比字符更高效
? 比完整詞更靈活
? 能處理新詞、長詞和罕見詞
? 適合大規模語言模型
在中文中,子詞切分也可能把一個詞拆成多個片段,或者把常見詞作為整體 Token。
從通俗角度看:Token 是模型詞表中的“可識別文本塊”,它的大小由 Tokenizer 決定,而不是由人類主觀決定。
六、常見的 Tokenizer 思路
Token 的產生依賴 Tokenizer(中文常譯為“分詞器”)。
不同模型可能使用不同 Tokenizer,但常見思路包括:
? 基于字符
? 基于詞
? 基于子詞
? BPE
? WordPiece
? SentencePiece
這里重點理解思想,不必一開始深入所有算法細節。
1、BPE
BPE(Byte Pair Encoding)是一種常見子詞切分方法。
它的核心思想是:從更小單位開始,不斷合并高頻相鄰片段,形成更大的 Token。
例如:
l / o / w如果某些組合經常出現,就可能逐漸合并為:
lo / w再合并為:
low從通俗角度看:BPE 會把常見片段合并成較大 Token,把不常見詞拆成較小片段。
2、WordPiece
WordPiece 也是常見子詞方法,常用于一些經典語言模型。
它同樣會把詞拆成子詞片段,但合并或選擇片段的標準與 BPE 不完全相同。
從通俗角度看:WordPiece 的目標也是用有限詞表盡量高效表示大量文本。
3、SentencePiece
SentencePiece 常用于多語言模型。
它可以直接從原始文本學習切分規則,不強依賴預先按空格分詞,因此適合中文、日文等沒有天然空格分隔的語言。
從通俗角度看:SentencePiece 把分詞也看成模型要學習的一部分,可以更統一地處理不同語言文本。
七、Token 與上下文長度
在大語言模型中,經常會聽到“上下文長度”這個說法。
上下文長度通常不是按字數或詞數計算,而是按 Token 數計算。
例如,一個模型支持:
上下文長度 = 8192 Tokens這表示模型一次最多能夠處理約 8192 個 Token,而不是 8192 個漢字或 8192 個英文單詞。
這點非常重要。
因為不同語言、不同文本類型的 Token 數可能差異很大。
例如:
? 英文單詞可能被切成一個或多個 Token
? 中文一句話可能接近按字、詞或子詞切分
? 代碼、公式、符號可能產生較多 Token
? 空格、標點、換行也可能影響 Token 數
從通俗角度看:上下文窗口不是“能放多少字”,而是“能放多少 Token”。
如果輸入文本太長,超過模型上下文限制,通常需要:
? 截斷文本
? 分段處理
? 摘要壓縮
? 檢索相關片段
? 使用更長上下文模型
例如,一篇長文被切成 Token 后長度為 L,如果模型最大上下文長度為 M,則必須滿足:
其中:
? L 表示當前輸入 Token 數
? M 表示模型最大上下文 Token 數
如果 L > M,模型就不能一次完整處理全部內容。
八、Token 在文本生成中的作用
在大語言模型生成文本時,模型通常不是一次生成整段話,而是一個 Token 一個 Token 地生成。
![]()
圖 3:Token 與上下文長度、文本生成過程
生成過程可以理解為:
已有上下文 → 預測下一個 Token → 加入上下文 → 繼續預測
例如,輸入:
人工智能正在模型會根據上下文預測下一個 Token,可能是:
改變然后新的上下文變成:
人工智能正在改變模型繼續預測下一個 Token:
世界于是得到:
人工智能正在改變世界從通俗角度看:大語言模型的生成過程,就像不斷接龍。每一步都根據已有 Token 序列,預測下一個最合適的 Token。
在數學上,模型通常是在估計下一個 Token 的概率分布:
其中:
? t?, t?, …, t_k 表示已有 Token 序列
? t_{k+1} 表示下一個 Token
? p 表示條件概率
模型會根據這個概率分布選擇下一個 Token。不同采樣策略會影響生成結果,例如:
? 貪心解碼(Greedy Decoding)
? 溫度(Temperature)
? Top?k 采樣(Top-k Sampling)
? Top?p 采樣(Top-p Sampling)
因此,Token 不僅影響輸入理解,也直接影響輸出生成。
九、Token 的優勢、局限與使用注意事項
1、Token 的主要優勢
Token 最大的優勢是把文本轉換成模型可處理的離散單位。
它使神經網絡能夠把自然語言轉為 Token id,再轉為向量進行計算。
其次,Token 支持開放詞匯處理。
通過子詞切分,模型即使遇到罕見詞,也可以把它拆成較小片段來表示。
再次,Token 便于控制模型輸入和輸出長度。
例如,可以限制最大輸入 Token 數,也可以限制最大生成 Token 數。
從通俗角度看,Token 的優勢在于:它把人類語言拆成模型可以逐步讀取、計算和生成的基本單位。
2、Token 的主要局限
Token 也有局限。
首先,Token 不等于語義單位。
一個詞可能被拆成多個 Token,一個 Token 也可能只是詞的一部分。
其次,不同 Tokenizer 的切分結果不同。
同一句話在不同模型中可能對應不同 Token 數和 Token id。
再次,Token 數不等于字數或詞數。
這在估算上下文長度、API 費用和生成長度時尤其需要注意。
此外,Tokenization 可能影響模型效果。
如果某些語言或專業術語經常被切得很碎,模型處理效率和表示質量可能受到影響。
3、使用 Token 時需要注意的問題
使用 Token 時,需要注意:
? Token 不一定等于一個字或一個詞
? 不同模型的 Tokenizer 可能不同
? Token id 只是索引,不表示語義大小
? 上下文長度通常按 Token 計算
? 生成長度通常也按 Token 控制
? 標點、空格、換行也可能影響 Token 數
? 代碼、公式、表格可能產生較多 Token
? 輸入模型前通常需要 Tokenization
? Token id 通常還要經過 Embedding 才能進入模型計算
從實踐角度看,理解 Token 有助于解釋為什么同樣長度的文本,在不同語言、不同模型或不同格式下,實際占用的上下文長度可能不同。
十、Python 示例
下面給出幾個簡單示例,用來幫助理解 Token 的基本使用。
示例 1:手動理解 Token 與 Token id
這個例子中:
? tokens 是文本切分后的單位
? token_ids 是每個 Token 在詞表中的編號
? 編號只是索引,不表示語義大小
示例 2:一個極簡 Tokenizer
輸出類似:
tokens: ['I', 'like', 'machine', 'learning']這個例子只是為了說明 Tokenizer 的基本作用。
真實大語言模型通常不會簡單按空格切分,而會使用更復雜的子詞 Tokenizer。
示例 3:Token id 進入 Embedding 層
輸出形狀通常為:
Embedding 輸出形狀: torch.Size([5, 8])其中:
? 5 表示 Token 數量
? 8 表示每個 Token 的 Embedding 維度
從通俗角度看:每個 Token id 都被查表轉換成了一個向量。
示例 4:batch 中的 Token 序列
輸出形狀通常為:
輸出向量形狀: torch.Size([2, 6, 16])其中:
? 2 表示 batch size
? 6 表示序列長度,也就是每條文本的 Token 數
? 16 表示 Embedding 維度
這說明文本 batch 進入模型前,通常會從:
batch × seq_len變成:
batch × seq_len × embedding_dim示例 5:填充與注意力掩碼
輸出類似:
[1, 1, 1, 0, 0, 0]])這個例子中:
? token id = 0 表示補齊位置
? attention mask 告訴模型哪些位置是真實 Token
? padding 位置通常不應被當作正常文本內容處理
小結
Token 是模型處理文本時的基本單位。原始文本進入語言模型前,通常會先被 Tokenizer 切分成 Token,再轉換成 Token id,最后通過 Embedding 變成向量。Token 不一定等于字或詞,而是由 Tokenizer 和詞表決定。對初學者而言,可以把 Token 理解為:模型閱讀和生成語言時使用的最小文本計算單位。
“點贊有美意,贊賞是鼓勵”
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.