OpenAI
此頁面由機器翻譯。查看原始英文文章

什麼是 Token,以及如何計算?

更新日期:18 hours ago

什麼是 Token?

Token 是 OpenAI 模型處理文字的基本單位。視語言和上下文而定,Token 可以短至單一字元,也可以長至一個完整單字。空格、標點符號和不完整的單字都會計入 Token 數量。這就是 API 在產生回應前,於內部切分文字的方式。

估算英文 Token 數量的實用經驗法則:

  • 1 個 Token ≈ 4 個字元

  • 1 個 Token ≈ ¾ 個單字

  • 100 個 Token ≈ 75 個單字

  • 1–2 個句子 ≈ 30 個 Token

  • 1 個段落 ≈ 100 個 Token

  • 約 1,500 個單字 ≈ 2,048 個 Token

Token 化處理會因模型和編碼方式而異。請使用 Tokenizer 工具或 tiktoken.encoding_for_model(model),取得目標模型的確切 Token 數量。

範例

以下是一些實際文字範例及其約略 Token 數量:

  • Wayne Gretzky 的名言「你沒出手的球,百分之百不會進」= 11 個 Token

  • 《OpenAI 憲章》= 476 個 Token

  • 《美國獨立宣言》= 1,695 個 Token

Token 數量的計算方式

將文字傳送至 API 時:

  1. 文字會切分成 Token。

  2. 模型會處理這些 Token。

  3. 回應會以一連串 Token 的形式產生,再轉換回文字。

Token 用量分為以下幾類:

  • 輸入 Token — 請求中的 Token。

  • 輸出 Token — 回應中產生的 Token。

  • 快取 Token — 對話記錄中重複使用的 Token(通常以較低費率計費)。

  • 推理 Token — 部分進階模型在產生最終輸出前,會於內部加入額外的「思考步驟」。

這些數量會顯示在 API 回應的中繼資料中,用於計費和用量追蹤。

若要進一步探索 Token 化處理,可以使用互動式Tokenizer 工具,計算 Token 數量並查看文字如何切分成 Token。

或者,若想以程式設計方式將文字 Token 化,請使用 Tiktoken;這是專為 OpenAI 模型使用的快速 BPE Tokenizer。

Token 上限

每個模型都有輸入與輸出合計的 Token 數量上限。目前的高容量模型在上下文中最多支援數十萬個 Token,但實際上限可能因模型版本和用量層級而異。

如果超出上限,可以:

  • 縮短或改寫提示詞。

  • 將大量文字拆分成較小區塊。

  • 傳送輸入內容前,先進行摘要或預先處理。

Token 計價

API 用量按 Token 計價,費率會因模型以及 Token 屬於輸入、輸出或快取而異。目前費率請參閱 OpenAI 的定價頁面。部分推理模型可能會在內部使用更多 Token,但也力求減少完成每項任務所需的 Token 數量,以提升效率。

探索 Token

API 會根據單字在語料庫資料中的上下文加以處理。模型會接收提示詞,將輸入轉換成 Token 清單並處理提示詞,再將預測的 Token 轉換回我們在回應中看到的文字。

在我們看來完全相同的兩個單字,可能會因其在文字中的結構不同而產生不同的 Token。請觀察 API 如何根據單字「red」在文字中的上下文產生 Token 值:

Sentence split into color-coded tokens with Text selected over Token IDs
Token ID output as a list of integers with the Token IDs tab selected

在上方第一個範例中,‘ red’ 的 Token「2266」包含一個後置空格(請注意,這些是僅供示範的 Token ID 範例)。

Sentence split into color-coded token blocks: My favorite color is Red.
Tokenizer output with Token IDs selected and a list of numeric token IDs

‘ Red’(前面有空格且首字母大寫)的 Token「2296」,不同於小寫 ‘ red’ 的 Token「2266」。

Tokenizer example splitting “Red is my favorite color.” into color-coded tokens
Tokenizer output with Token IDs selected and a list of token ID numbers

句首使用 ‘Red’ 時,產生的 Token 不含前置空格。Token「7738」與前兩個單字範例不同。

觀察結果:

Token 出現的機率/頻率越高,獲派的 Token 編號就越小:

  • 三個句子中的句號都產生相同的 Token(「13」)。這是因為從上下文來看,句號在整個語料庫資料中的用法大致相同。

  • ‘red’ 產生的 Token 會因其在句中的位置而異:

    • 句中小寫:‘ red’ —(Token:「2266」)

    • 句中大寫:‘ Red’ —(Token:「2297」)

    • 句首大寫:‘Red’ —(Token:「7738」)

這篇文章有幫助嗎?