分词:把句子切成AI能懂的小块
为什么「人工智能」有时是1个Token,有时是2个?
上一篇我们说,AI不认识文字,只认识数字。Token就是文字和数字之间的桥梁。
但你有没有想过,这个桥梁是怎么建造的?为什么「人工智能」有时候是一个Token,有时候是两个,甚至是三个?
这就要说到分词算法(Tokenization)了。它决定了AI如何「切分」文本,是AI理解人类语言的第一道关卡。
好的分词算法能让AI更聪明,坏的分词算法会让AI变笨。这可不是夸张——想象一下,如果AI把"人工智能"切成"人工"和"智能",它还能理解整个概念吗?
不分词的后果
- • 每个句子都是1个Token
- • 词表会无限膨胀
- • 无法理解词的含义
- • 遇到未知词就崩溃
- • 学习效率极低
分词的好处
- • 复用常见的词和片段
- • 控制词表大小
- • 理解词的构成
- • 处理未知词
- • 学习效率高
💡 类比思考:分词就像给文本建「乐高积木」库。常用的词(如"我"、"你")是整块积木,生僻的词(如"量子纠缠")可以用小块积木拼出来。
1什么是分词?
📝 原始文本
"我热爱人工智能"
❌ 切法1
我/热/爱/人/工/智/能
7个Token(太碎)
✅ 切法2
我/热爱/人工智能
3个Token(刚好)
⚠️ 切法3
我热爱人工智能
1个Token(太粗)
🎯 目标
在保留语义和提高效率之间找到平衡
分词(Tokenization)就是把文本切分成Token的过程。听起来简单,其实是一门艺术——就像切蛋糕,切得太碎不好吃,切得太粗又不够分。
好的分词算法要能智能地判断:哪里该切,哪里不该切。
2三种主要分词算法
字符级分词
每个字/字母都是一个独立的Token
输入:"Hello AI"
词表小,不会出现未知词
Token多,效率低,语义丢失
单词级分词
每个单词是一个Token(英文有效,中文难用)
输入:"Hello AI"
Token少,效率高,语义保留
词表大,中文难分词,未知词
Subword分词
智能切分:常用词保持完整,生僻词拆分成片段
输入:"Hello AI ChatGPT"
兼顾效率和语义,平衡性好
能处理未知词,GPT/Claude使用
3BPE算法:如何训练分词器?
初始化词表
包含所有字符:a, b, c... 你, 我, 他...
统计频率
找出训练数据中出现最多的相邻字符对,比如 "th"
合并字符对
把 "th" 当作一个新的词加入词表
重复
继续找频率最高的字符对,直到词表达到目标大小
🔄 示例:"the" → 初始3个Token → "the"变成1个Token(因为"th"和"e"很常见)
BPE(Byte Pair Encoding)是最流行的Subword分词算法。它的核心思想很简单:统计哪些字符组合最常见,把它们合并成一个Token。
经过训练的词表会包含各种片段:有的是完整单词(如"hello"),有的是常见前缀后缀(如"ing"、"un"),有的是字符组合(如"th"、"qu")。
📊 训练数据(简化)
hug hug hug hug hug (5次)
the the the (3次)
th th (2次)
the the the (3次)
...
🔢 第1轮:找到最频繁的对 'h' + 'u' = 'hu'
前
h u g
3个Token
后
hu g
2个Token
🔢 第2轮:找到最频繁的对 't' + 'h' = 'th'
前
t h e
3个Token
后
th e
2个Token
🔢 第3轮:继续... 'th' + 'e' = 'the'
前
th e
2个Token
后
the
1个Token
🎯 结果:经过多次迭代,"the"、"hug"、"the"等常见词都变成单个Token,而罕见词(如"thug")可以拆成"th"+"ug"。
4其他分词算法:BPE不是唯一选择
BPE
Byte Pair Encoding
- 原理:合并最频繁的对
- 优点:简单高效,最流行
- 缺点:可能破坏词义
- 代表:GPT-2, GPT-3, RoBERTa
✅ 主流选择
WordPiece
概率优先合并
- 原理:合并提升概率最大的对
- 优点:更符合语言模型
- 缺点:训练复杂
- 代表:BERT, BERT-tiny
🏆 BERT专用
Unigram
从大到小删除
- 原理:从完整词开始,逐步删除
- 优点:更灵活
- 缺点:计算量大
- 代表:T5, ALBERT
🔬 研究用
🧪 实验发现:大多数现代AI使用BPE,因为它简单高效。WordPiece在BERT中表现出色,但需要更复杂的训练。Unigram相对少见,但在某些特定场景下更灵活。
4为什么Subword是主流?
Token数量适中
保留语义信息
解决未知词问题
💡 例子对比:词表中没有 "unbelievable" 这个词,但能拆成 "un" + "believ" + "able" 三个Token,AI依然能理解它的含义。
5常见问题
Q:同一个句子在不同AI模型中Token数一样吗?
不一样。不同模型使用不同的词表和分词算法。OpenAI的tiktoken、HuggingFace的tokenizers,它们的切分结果可能完全不同。
Q:如何估算一段话的Token数?
可以用专门的工具,比如OpenAI的tiktoken库。一个经验公式:英文约1 Token = 0.75个单词,中文约1 Token = 1.5-2个汉字。
Q:词表越大越好吗?
不是。词表太大会增加模型大小和推理成本。通常3万到10万是个合理的范围,需要在效率和能力之间找到平衡。
Q:中文和英文的分词有什么区别?
英文有天然的分界(空格),中文没有空格。中文分词需要更复杂的算法来判断词的边界。这也是为什么中文AI比英文AI需要更多Token的原因。
Q:如何选择合适的分词算法?
对于大多数场景,BPE是最佳选择。如果你的模型需要更精细的语义理解,可以考虑WordPiece。如果需要处理多语言,可能需要特殊优化。
6实战技巧:如何优化分词效果?
技巧1:选择合适的训练数据
分词器的质量取决于训练数据。训练数据应该覆盖你的应用场景:
- • 通用聊天模型:用维基百科、网络文本等通用数据
- • 医疗AI:用医学文献、病历等专业数据
- • 代码AI:用GitHub代码仓库训练
技巧2:调整词表大小
词表大小需要在效率和效果间权衡:
小词表(3万)
• 效率高,成本低
• Token多一些
• 适合实时应用
大词表(10万)
• 效果更好
• Token少一些
• 适合离线模型
技巧3:特殊Token处理
除了普通Token,还要添加特殊Token:
💡 最佳实践:不要自己从头训练分词器!大多数情况下,用预训练的就行(如GPT-3.5的tiktoken)。除非你的应用场景非常特殊(如医学、法律、代码),否则没必要定制。
7多语言分词的挑战
英文(简单)
- ✅ 有空格作为分界
- ✅ 词形变化少
- ✅ 标点独立
- ✅ 词表相对小
- 📊 Token效率:高
示例:"Hello world" → 2-3 Token
中文(中等)
- ⚠️ 没有空格分界
- ⚠️ 一字多义
- ⚠️ 词义组合复杂
- ⚠️ 词表相对大
- 📊 Token效率:中
示例:"你好世界" → 3-4 Token
日文(困难)
- ❌ 混合文字系统(假名+汉字)
- ❌ 没有空格分界
- ❌ 词形变化多
- ❌ 需要更复杂的算法
- 📊 Token效率:低
示例:"こんにちは" → 4-5 Token
代码(特殊)
- 🔧 结构化语言
- 🔧 关键词保留
- 🔧 缩进敏感
- 🔧 特殊符号多
- 📊 Token效率:高(专门优化)
示例:"print('Hello')" → 4-5 Token
🌍 多语言模型挑战:为支持多语言,模型需要一个统一的词表。这意味着词表会更大,某些语言的Token效率会降低。GPT-4、Claude 3等大模型都面临这个挑战。
8总结
🎓 一句话总结
- ①分词就是把文本切分成Token,是AI处理文本的第一步,直接影响AI的理解能力
- ②三种算法:字符级(太碎)、单词级(词表大)、Subword(平衡,主流)
- ③BPE算法通过统计频率,把常见字符组合合并成Token,简单高效
- ④Subword优势:效率高、保留语义、解决未知词
- ⑤其他算法:WordPiece(BERT)、Unigram(T5)各有特点,但BPE最流行
- ⑥多语言挑战:不同语言分词难度不同,英文最简单,日文最困难
📚延伸阅读
已掌握
- ✓ 分词的定义和作用
- ✓ 三种主要算法
- ✓ BPE算法原理
- ✓ Subword的优势
- ✓ 多语言分词挑战
下一篇
- • 词表的构建
- • 词表大小的权衡
- • 特殊Token
- • 词表优化技巧
进阶学习
- • SentencePiece算法
- • 动态分词
- • 自定义分词器
- • 分词评估指标
✏️小测验
问题1:为什么Subword分词比字符级和单词级更好?
点击查看答案
Subword分词在效率和语义保留之间找到了平衡。它不会像字符级那样产生太多Token,也不会像单词级那样导致词表过大或无法处理未知词。
问题2:BPE算法的核心思想是什么?
点击查看答案
BPE算法通过统计训练数据中最频繁出现的字符对,将它们合并成新的Token。通过不断重复这个过程,逐步构建一个既能覆盖常用词,又能处理生僻词的词表。
问题3:为什么中文比英文需要更多Token?
点击查看答案
中文没有空格作为自然的分界,需要更复杂的算法来判断词的边界。而且中文的词义组合更复杂,一个汉字往往需要和其他汉字组合才能表达完整含义。
→下篇预告
第33篇:词表:AI认识多少个字?
分词需要一个词表作为参考。词表里有多少个Token?这些Token是怎么选出来的?词表大小对AI有什么影响?下一篇,我们来聊聊词表的故事。
✏️ 手绘图解 · AI Catch 出品
第 32 篇 / 共 84 篇