当你使用ChatGPT、通义千问或文心一言时,是否注意到它们常提示“输入已达到XXX tokens”?这个神秘的“token”到底是什么?为什么它决定了你能输入多长的内容?它是字符?是词?还是某种神秘单位?本文将带你深入浅出地理解Token——这个大语言模型(LLM)中最基础却最关键的“文字积木”,无论你是AI新手还是开发者,都能轻松掌握。

一、什么是Token?从“字”到“语义单元”的进化

在传统编程中,我们习惯把文本看作字符(character)或字符串(string)。但在大语言模型的世界里,文本首先被拆解成一个个 Token,然后才被模型“读懂”。

📌 简单定义
Token 是大模型处理文本时的基本单位。它可以是一个字、一个词、一个标点,甚至是一个常见的词组或子词(subword)。

🎯 举个中文例子
句子:“我喜欢人工智能。”
可能被拆分为以下 Tokens:
["我", "喜欢", "人工", "智能", "。"]
5个tokens

而英文句子:“I love AI.”
可能被拆分为:
["I", " love", " AI", "."]
4个tokens

🔍 注意:空格也可能成为一个token的一部分(如" love"),这取决于分词方式。


二、为什么需要Token?模型不能直接读文字吗?

答案是:不能。因为AI模型本质上是数学系统,它只能处理数字,不能理解“文字”。

所以,必须经过以下三步转换:

原始文本 → 分词(Tokenization) → Token IDs → 向量嵌入(Embedding) → 模型计算
1. 分词(Tokenization)

使用分词器(Tokenizer)将文本切分成tokens。

2. 编号(Token IDs)

每个token对应一个唯一的数字ID。例如:

  • “我” → 100
  • “喜欢” → 2056
  • “人工” → 887
  • “智能” → 901
  • “。” → 10

句子就变成了一个数字序列:[100, 2056, 887, 901, 10]

3. 向量嵌入(Embedding)

模型将每个ID转换为一个高维向量(如768维),这个向量包含了该token的语义信息。

总结:Token 是连接“人类语言”和“机器计算”的桥梁。


三、Token是如何生成的?主流分词方法解析

不同的大模型使用不同的分词算法。以下是三种主流技术:

1. 基于空格分词(Word-level)
  • 最简单,按空格切分。
  • 例子:“I love AI” → ["I", "love", "AI"]
  • ❌ 缺点:无法处理未登录词(OOV),词汇表爆炸。
2. 字符级分词(Character-level)
  • 每个字符是一个token。
  • 例子:“hello” → ["h","e","l","l","o"]
  • ❌ 缺点:序列太长,模型难以学习长距离依赖。
3. 子词分词(Subword Tokenization)——主流选择!

这是目前大模型(如BERT、GPT、LLaMA)广泛采用的方法,核心思想是:高频词完整保留,低频词拆成常见子词

常见算法:
  • Byte Pair Encoding (BPE):GPT系列使用
  • WordPiece:BERT使用
  • SentencePiece:支持无空格语言(如中文)

🎯 BPE 示例: 假设我们有语料:

  • “low”
  • “lower”
  • “lowest”

BPE会学习到:

  • “low” 是常见子词
  • “er” 和 “est” 是后缀

所以:

  • “lower” → ["low", "er"]
  • “lowest” → ["low", "est"]

✅ 优势:平衡了词汇表大小和泛化能力,能处理未见过的词。


四、中英文Token的差异:为什么中文更“费Token”?

很多用户发现:输入相同字数的中文和英文,中文消耗的Token更多。这是为什么?

原因一:中文没有空格分隔

英文天然以空格为界,分词相对容易。而中文每个字都可能独立成词,分词器需要更复杂的规则。

原因二:子词拆分策略不同
  • 英文:常见词如 “transformer” 可能是一个token。
  • 中文:即使常用词如 “人工智能”,也可能被拆成 ["人工", "智能"] 两个token。
实测对比(以OpenAI tokenizer为例):
文本 字符数 Token数
"I love AI" 9 4
"我喜欢AI" 5 6
"人工智能" 4 4

📌 结论中文平均每字约1.2~1.8个token,英文平均每词约1.3个token。因此,同样信息量下,中文可能消耗更多token。


五、Token与成本:为什么它关乎“钱包”?

几乎所有大模型API(如OpenAI、通义千问、Azure AI)都是按Token计费的。

费用构成通常包括:

  • 输入Token费用
  • 输出Token费用

🎯 举个真实例子: 假设调用GPT-3.5 Turbo:

  • 输入:1000 tokens
  • 输出:500 tokens
  • 费率:0.50/百万输入tokens,0.50/百万输入tokens,1.50 / 百万输出tokens

费用 = (1000/1e6)*0.5 + (500/1e6)*1.5 = $0.00125

💡 提示:输出Token通常更贵,因为生成过程计算量更大。


六、如何查看和计算Token数量?

方法1:使用官方Tokenizer工具
  • OpenAI:Tokenizer Playground
  • Hugging Face:from transformers import AutoTokenizer
from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")
text = "我爱人工智能"
tokens = tokenizer.tokenize(text)
print(tokens)  # ['我', '爱', '人', '工', '智', '能']
print(len(tokens))  # 6
方法2:使用在线工具
  • LLM Token Calculator
  • 各大云厂商的API控制台
方法3:估算规则(粗略)
  • 英文:1 token ≈ 4个字符 或 0.75个单词
  • 中文:1 token ≈ 1~2个汉字

七、开发者必知:Token的限制与优化

1. 上下文长度限制

每个模型都有最大上下文长度(如GPT-4 Turbo为128K tokens),超过则无法处理。

2. 如何优化Token使用?
  • 精简输入:删除无关文本、注释
  • 使用摘要:对长文先做摘要再输入
  • 选择高效模型:某些模型支持更长上下文或更高效分词
  • 流式处理:分批处理超长文本
3. 中文优化建议
  • 避免使用过于拆分的表达
  • 尽量使用常见词汇(减少子词拆分)
  • 考虑使用专为中文优化的模型(如ChatGLM、Qwen)

八、未来趋势:Token会消失吗?

随着技术发展,一些新方向正在挑战Token的统治地位:

  • 无分词模型(Tokenizer-Free Models):直接处理原始字节或音频。
  • Mixture of Experts (MoE):动态选择模型部分,降低计算开销。
  • 更高效的注意力机制:如RetNet、Mamba,降低长序列处理成本。

但短期内,Token仍是主流,理解它对使用和优化LLM至关重要。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐