概念定义

Token是大语言模型处理文本的最小单位,类似于文本的”积木块”。分词(Tokenization)是将连续的文本切分成一个个Token的过程。

详细解释

什么是Token?

Token可以理解为模型能够”理解”的文本片段,它可能是:
  • 一个完整的单词(如”人工智能”)
  • 单词的一部分(如”ing”、“pre-”)
  • 单个字符(如”的”、“a”)
  • 特殊符号(如标点符号、换行符)
中英文差异
  • 英文:通常一个Token包含3-4个字符
  • 中文:大多数情况下一个汉字对应一个Token
  • 标点符号:通常单独作为一个Token
生动比喻把文本想象成一串珠子,Token就是每一颗珠子。不同的分词方法就像用不同的方式来串珠子——有的按颜色分组,有的按大小分组。模型需要先把文本”串”成Token珠子,才能进行处理。

分词算法

常见分词方法
  1. 字符级分词:每个字符一个Token
  2. 单词级分词:每个单词一个Token
  3. 子词分词:介于字符和单词之间
主流算法
算法名称特点应用模型
BPE字节对编码,平衡词汇表大小GPT系列
WordPiece基于似然的子词分割BERT
SentencePiece语言无关的分词T5, LLaMA
tiktokenOpenAI优化的BPE实现GPT-3.5/4

工作原理

分词过程示例

英文示例
输入: "Hello, world!"
Token: ["Hello", ",", " world", "!"]
Token数量: 4
中文示例
输入: "你好,世界!"
Token: ["你", "好", ",", "世", "界", "!"]
Token数量: 6
混合文本示例
输入: "OpenAI的GPT-4很强大"
Token: ["Open", "AI", "的", "GPT", "-", "4", "很", "强", "大"]
Token数量: 9

编码解码流程

Token计算技巧想快速估算Token数量?
  • 英文:单词数 × 1.3 ≈ Token数
  • 中文:字符数 × 1.2 ≈ Token数
  • 代码:字符数 × 0.5 ≈ Token数
更准确的计算需要使用专门的Token计数工具。

实际应用

API调用中的Token

计费机制
  • 大部分AI API按Token数量计费
  • 输入Token + 输出Token = 总消费
  • 不同模型的Token价格不同
示例计算
输入: "请写一首关于春天的诗" (12 Token)
输出: "春风吹绿江南岸..." (约100 Token)
总计: 112 Token

优化建议

减少Token消耗
  • 使用简洁明确的提示词
  • 避免不必要的格式字符
  • 选择合适的模型(mini版本更经济)
提高效率
  • 批量处理相似请求
  • 缓存常用的长提示词
  • 预处理文本去除冗余内容

技术深入

子词编码原理

BPE算法步骤
  1. 初始化:将文本分解为字符
  2. 统计频率:计算字符对出现频率
  3. 合并操作:将最频繁的字符对合并
  4. 重复迭代:直到达到目标词汇表大小
常见误区
  • ❌ Token = 单词
  • ❌ 中文1个字 = 1个Token(有例外)
  • ❌ 空格不占用Token
  • ❌ 所有模型使用相同分词方法
实际情况比这些简化理解更复杂,建议使用官方工具验证。

词汇表管理

特殊Token
  • <BOS>:序列开始标记
  • <EOS>:序列结束标记
  • <UNK>:未知Token标记
  • <PAD>:填充Token
词汇表大小影响
  • 较小:表达能力有限,Token序列较长
  • 较大:表达丰富,但模型参数增加

实用工具

Token计数工具

在线工具 编程库
# tiktoken (OpenAI)
import tiktoken
encoding = tiktoken.get_encoding("cl100k_base")
tokens = encoding.encode("你好世界")
print(f"Token数量: {len(tokens)}")

# transformers (Hugging Face)
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("gpt2")
tokens = tokenizer.encode("Hello world")

相关概念

延伸阅读