Tokenization
什么是Tokenization
Tokenization(分词)是将文本切分成更小单位(称为Token)的过程。这些Token是AI模型理解和处理文本的基本单位。
简单理解:Tokenization就像把一篇文章拆成一个个词语或字符,让AI能够逐个处理和理解。
Token与字符、单词的关系
英文文本
在英文中:
- 1个Token ≈ 0.75个单词
- 1个Token ≈ 4个字符
示例:
文本: "Hello, world!"
Tokens: ["Hello", ",", "world", "!"]
单词数: 2
Token数: 4中文文本
在中文中:
- 1个Token ≈ 1-2个汉字
- 常见词通常1个Token
- 生僻词可能多个Token
示例:
文本: "你好,世界!"
Tokens: ["你好", ",", "世界", "!"]
汉字数: 6
Token数: 4常见分词方法
1. BPE (Byte Pair Encoding)
BPE是一种常用的分词方法,它通过统计文本中常见的字符对来构建词表。
工作原理:
- 从单个字符开始
- 统计最常见的字符对
- 合并最常见的字符对
- 重复直到达到词表大小限制
优点:
- 处理未知词能力强
- 词表大小可控
- 适合多语言
缺点:
- 可能产生不直观的切分
- 需要训练词表
示例:
原始: "hug"
步骤1: ["h", "u", "g"]
步骤2: ["h", "ug"] (合并u和g)
步骤3: ["hug"] (合并h和ug)2. WordPiece
WordPiece是BERT等模型使用的分词方法,与BPE类似但有一些改进。
工作原理:
- 选择能最大化训练数据似然的合并方式
- 使用"##"前缀标记子词
示例:
文本: "unhappiness"
Tokens: ["un", "##hap", "##pi", "##ness"]3. SentencePiece
SentencePiece是一个通用的分词工具,支持多种分词算法。
特点:
- 语言无关
- 支持多种分词算法
- 处理空格特殊
示例:
文本: "Hello world"
Tokens: ["▁Hello", "▁world"]Token计数与成本
Token计费
大多数AI服务按Token计费:
- 输入Token:你发送给模型的内容
- 输出Token:模型生成的内容
示例:
输入: 1000 tokens
输出: 500 tokens
总Token: 1500 tokens成本计算
不同模型的定价不同:
| 模型 | 输入成本 | 输出成本 |
|---|---|---|
| GPT-3.5 | $0.001/1K tokens | $0.002/1K tokens |
| GPT-4 | $0.03/1K tokens | $0.06/1K tokens |
| Claude | $0.015/1K tokens | $0.075/1K tokens |
计算示例:
使用GPT-4处理1000输入tokens和500输出tokens:
输入成本: 1000 * $0.03/1000 = $0.03
输出成本: 500 * $0.06/1000 = $0.03
总成本: $0.06优化Token使用
方法:
- 精简输入文本
- 删除冗余信息
- 使用简洁的表达
- 避免重复内容
示例:
❌ 冗长(约100 tokens):
我想要请你帮我分析一下这篇关于人工智能的文章,这篇文章主要讨论了人工智能的发展历史、现状和未来趋势,请你仔细阅读后给我一个详细的总结...
✅ 精简(约30 tokens):
总结这篇关于人工智能发展历史、现状和未来趋势的文章多语言分词挑战
挑战1:不同语言的分词方式
不同语言有不同的分词特点:
- 英文:单词之间有空格
- 中文:没有空格,需要智能切分
- 日文:混合汉字、假名、罗马字
- 阿拉伯文:从右到左书写
挑战2:词表大小限制
词表大小需要平衡:
- 太小:很多词需要多个Token
- 太大:模型参数增加,训练成本高
示例:
小词表(10K):
"artificial" -> ["art", "##ifi", "##cial"] (3 tokens)
大词表(100K):
"artificial" -> ["artificial"] (1 token)挑战3:未知词处理
如何处理训练时未见过的词:
- 使用子词切分
- 使用特殊标记(如[UNK])
- 动态扩展词表
示例:
未知词: "bioinformatics"
小词表: ["bio", "##info", "##rm", "##atics"]
大词表: ["bioinformatics"]如何优化Token使用
1. 选择合适的模型
根据任务选择合适的模型:
- 简单任务:使用小模型(词表小,Token效率高)
- 复杂任务:使用大模型(词表大,理解能力强)
2. 精简表达
使用简洁的表达方式:
❌ 冗长:
我想请你帮我分析一下这个代码,这段代码的主要功能是实现一个用户登录的功能,包括用户名和密码的验证...
✅ 精简:
分析这段用户登录验证代码:[代码]3. 删除冗余
删除不必要的信息:
- 重复的说明
- 过长的背景介绍
- 不相关的细节
4. 使用结构化格式
使用结构化格式减少Token:
❌ 非结构化:
用户张三,年龄25岁,性别男,职业工程师,居住在北京...
✅ 结构化:
用户信息:
- 姓名:张三
- 年龄:25
- 性别:男
- 职业:工程师
- 居住地:北京5. 批量处理
批量处理相似任务:
❌ 单独处理:
翻译这句话:Hello
翻译这句话:World
翻译这句话:AI
✅ 批量处理:
翻译以下句子:
1. Hello
2. World
3. AI实际应用案例
案例1:代码分析
场景:分析一段代码
优化前(约200 tokens):
我想要请你帮我分析一下下面这段代码,这段代码是用Python写的,主要功能是实现一个快速排序算法,请你仔细阅读后告诉我这段代码的时间复杂度、空间复杂度以及可能的优化方向...优化后(约50 tokens):
分析这段Python快速排序代码:
[代码内容]
请说明:
1. 时间复杂度
2. 空间复杂度
3. 优化方向案例2:文本翻译
场景:翻译多段文本
优化前(每次约100 tokens):
翻译这句话:Hello world
翻译这句话:How are you
翻译这句话:Good morning优化后(约80 tokens):
翻译以下句子为中文:
1. Hello world
2. How are you
3. Good morning案例3:长文档处理
场景:处理长文档
优化前(一次性处理,可能超出上下文窗口):
分析这篇10000字的文章:[全文]优化后(分段处理):
分析文章第1部分:[第1部分]
分析文章第2部分:[第2部分]
...
整合以上分析,总结全文总结
Tokenization是AI处理文本的基础:
要点:
- ✅ Token是AI处理文本的基本单位
- ✅ 不同语言的Token化方式不同
- ✅ Token数量直接影响使用成本
- ✅ 优化Token使用可以降低成本
最佳实践:
- 理解Token与字符、单词的关系
- 选择合适的分词方法
- 优化表达,减少Token使用
- 批量处理相似任务
- 分段处理长文档
成本优化:
- 精简输入
- 删除冗余
- 使用结构化格式
- 选择合适的模型
理解Tokenization有助于更高效地使用AI工具,控制使用成本。