共计 1760 个字符,预计需要花费 5 分钟才能阅读完成。
什么是 Token?
在自然语言处理(NLP)中,Token 是文本处理的基本单位。根据不同的分词策略,Token 可以是字符、词或子词(subword)。将文本拆分为 Token 的过程称为 Tokenization(分词)。

- 字符级(Character-level): 每个字符作为一个 Token,比如 ”hello” 会被拆分为[‘h’,’e’,’l’,’l’,’o’]
- 词级(Word-level): 以空格或标点分隔的完整单词作为 Token,如 ”I love NLP” 拆分为[‘I’,’love’,’NLP’]
- 子词级(Subword-level): 介于字符和词之间,常见的有 WordPiece 和 BPE 算法,比如 ”unhappy” 可能拆分为[‘un’,’happy’]
为什么 Token 对 AI 模型重要?
- 模型输入限制:大多数 Transformer 模型有最大 Token 数限制(如 512)
- 计算效率:Token 数量直接影响计算资源和时间消耗
- 语义理解:分词质量影响模型对文本的理解能力
新手常见痛点分析
中英文混合文本的分词差异
中文没有天然空格分隔,分词更复杂。例如:
# 英文分词
"Hello world" → ['Hello', 'world']
# 中文分词
"你好世界" → ['你','好','世','界'] 或 ['你好','世界']
Token 数量与 max_length 的冲突
当文本 Token 数超过模型限制时,常见的处理方式:
- 截断(Truncation)
- 拆分后分批处理
- 使用滑动窗口
特殊字符和表情符号
许多表情符号会被拆分为多个 Token:
"😂" → [':', 'D'] # 在某些分词器中
实战:Hugging Face Tokenizers
安装最新版 transformers:
pip install transformers
基础使用示例:
from transformers import AutoTokenizer
# 加载预训练分词器
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
# 分词示例
text = "Hello world! 你好,世界"
tokens = tokenizer.tokenize(text)
print(tokens)
# 输出: ['hello', 'world', '!', '你', '好', ',', '世', '界']
# 转换为 ID
input_ids = tokenizer.encode(text)
print(input_ids)
# 输出: [101, 19082, 1362, 999, 100, 100, 100, 100, 102]
分词算法对比:WordPiece vs BPE
| 特性 | WordPiece | BPE |
|---|---|---|
| 算法原理 | 基于概率合并 | 统计频率合并 |
| 合并策略 | 选择使似然函数最大化的对 | 选择最高频的字符对 |
| 典型模型 | BERT | GPT |
| 中文支持 | 较好 | 一般 |
| 未知词处理 | 拆分为子词 | 拆分为子词 |
生产环境避坑指南
监控 Token 使用率
# 计算 Token 使用率
def token_usage(text):
tokens = tokenizer.tokenize(text)
ratio = len(tokens) / tokenizer.model_max_length
return {'token_count': len(tokens),
'usage_ratio': f"{ratio:.1%}",
'is_truncated': len(tokens) > tokenizer.model_max_length
}
处理长文本策略
- 智能截断:优先保留重要部分(如开头、结尾、关键词周围)
- 滑动窗口:将文本分块处理后再合并结果
- 摘要预处理:先对长文本生成摘要再输入模型
多语言编码陷阱
- UTF- 8 编码下,某些语言字符可能被拆分为多个字节
- 混合语言时建议明确指定分词器语言
- 注意全角 / 半角符号的统一处理
思考与优化方向
当 Token 成本影响 API 定价时,可以考虑:
- 文本压缩:去除冗余信息
- 更高效的子词分词策略
- 关键信息提取代替完整文本输入
- 缓存常见 Token 序列的处理结果
结语
Token 处理是 NLP 流程中的基础但关键环节。理解不同分词策略的优劣,根据具体场景选择合适方案,可以显著提升模型性能和经济效益。建议在实际项目中建立 Token 使用监控机制,持续优化预处理流程。
思考题 :在处理用户生成内容(UGC) 时,如何设计鲁棒的分词方案来应对各种非规范文本输入?
正文完
发表至: 人工智能
近三天内
