什么是大模型的分词器?
简单来说,大模型的分词器(Tokenizer)是人类语言和机器语言之间的“翻译官”。
大模型(LLM)本质上是一个巨大的数学函数,它只能处理数字(向量),无法直接理解我们输入的汉字或英文字母。分词器的作用就是把文本切分成模型能理解的最小单位,并转换成数字。
为了让你更透彻地理解,我们可以从以下几个维度来拆解:
1. 核心概念:什么是 Token?
分词器切分出来的最小单位叫做 Token。
- 在英文中:Token 不一定是一个完整的单词。
- 例如单词
unhappiness(不快乐),可能会被切分为un(前缀)、happi(词根)、ness(后缀)三个 Token。
- 例如单词
- 在中文中:Token 不一定是一个字,也不一定是一个词。
- 常见词如“人工智能”可能是一个 Token。
- 生僻组合可能会被拆开,比如“烎”如果不在词表中,可能会被拆成更小的部件或者乱码。
2. 分词器的工作流程
想象你给 ChatGPT 发送了一句:“我爱AI”。分词器会经历以下步骤:
- 切分(Tokenization):
- 输入:
"我爱AI" - 切分结果(假设):
["我", "爱", "AI"]
- 输入:
- 映射(Encoding/Numericalization):
- 分词器有一个巨大的字典(词表),里面记录了每个 Token 对应的唯一编号(ID)。
- 假设字典里:“我”=101,“爱”=205,“AI”=300。
- 转换结果:
[101, 205, 300]
- 输入模型:
- 模型接收这串数字
[101, 205, 300]进行复杂的计算。
- 模型接收这串数字
3. 为什么要这么设计?(为什么不直接用字母或整词?)
目前的流行分词算法(如 BPE - Byte Pair Encoding)采用的是子词(Subword)策略,这是为了在“效率”和“词表大小”之间找平衡:
- 如果按“字符”切分(a, b, c...):
- 优点:词表很小。
- 缺点:句子会变得非常长(“apple”变成5个token),模型处理效率极低,且难以捕捉语义。
- 如果按“整词”切分(apple, banana...):
- 优点:语义完整。
- 缺点:人类语言词汇量无限(比如新造词),词表会大到内存爆炸,且遇到没见过的词(Unknown)模型就傻了。
- 子词策略(现在的做法):
- 高频词保持完整(如
apple)。 - 低频词拆解(如
unhappiness->un+happi+ness)。 - 优势:既控制了词表大小,又能通过组合“字根”来理解没见过的生僻词。
- 高频词保持完整(如
4. 分词器对模型能力的影响
分词器的好坏直接决定了模型的“智商”和“性价比”:
- 上下文长度(Context Window):
- 模型的容量是按 Token 数量算的(比如 GPT-4 支持 128k Token)。
- 如果分词器效率高(压缩率高),同样的 Token 配额能塞进更多的文字。
- 例子:早期的 LLaMA 模型对中文支持不好,一个汉字可能被拆成 2-3 个 Token,导致中文用户可输入的字数变少,且推理速度变慢。
- 数学和拼写问题:
- 你可能发现大模型有时候做简单的数字比较(如 9.11 和 9.9 谁大)会出错,或者让他倒着拼写单词会失败。
- 原因:分词器把
9.11可能看作一个整体 Token,或者拆分成9、.、11。模型看到的是一个抽象的 ID,而不是一位一位的数字,所以它很难理解字符内部的结构。
- 多语言能力:
- 如果分词器的训练语料里主要是英文,那么它在切分中文、阿拉伯文时就会很细碎,导致模型在这些语言上的表现变差。
总结
分词器是大模型的“嘴巴”和“耳朵”。
它决定了模型怎么“听”懂你的话,以及怎么“说”出回答。一个优秀的分词器能让模型读得更快、懂意更准、更省内存。
右滑查看面试常问