【大模型】分词器 (tokenizer) 的作用大揭秘
LLM中的分词器(tokenizer)是什么???
·
简单来说,分词器是大语言模型的“翻译官”,它在人类可读的文本和模型能够理解的数字语言之间进行转换。
我们可以从两个核心过程来理解它的作用:编码 和 解码。
1. 编码:将文本转化为模型能理解的数字(Tokens)
模型本质上是一个极其复杂的数学函数,它不直接理解单词或字符,只处理数字。分词器的作用就是搭建一座桥梁。
- 步骤:
- 输入:你输入一段文本,比如
“我喜欢吃披萨。”
- 分词:分词器将这句话切分成模型“词汇表”中存在的较小单元,即 Token。这个过程可能不是简单按空格切分。
- 可能的结果:
[“我”, “喜欢”, “吃”, “披”, “萨”, “。”]
- 注意:“披萨”这个词被拆成了“披”和“萨”两个 Token,这是因为分词器的词汇表中可能没有“披萨”这个完整的词。
- 可能的结果:
- 映射为ID:每个 Token 都会被映射到词汇表中一个唯一的整数 ID。
- 例如:
“我” -> 1001
,“喜欢” -> 2056
,“披” -> 3450
,“萨” -> 5678
- 例如:
- 输出:最终,句子
“我喜欢吃披萨。”
被转换成一个数字序列:[1001, 2056, ..., 3450, 5678, ...]
。这个数字序列才是模型真正的输入。
- 输入:你输入一段文本,比如
为什么需要分词?
如果直接把每个字符(包括字母、汉字、标点)当作一个 Token,虽然简单,但效率很低。一个句子会变得非常长,模型难以捕捉单词和短语级别的语义关系。通过分词,模型可以用更少的单元处理更多的信息。
2. 解码:将模型的数字输出转化回人类可读的文本
当模型完成计算,会生成一个数字序列(Token IDs 的概率分布)。分词器需要将这个序列“翻译”回我们能看懂的文本。
- 步骤:
- 输入:模型生成一个数字序列,比如
[1001, 2056, 1024, 3450, 5678, 1012]
。 - 映射回Token:分词器将这些 ID 映射回对应的 Token。
1001 -> “我”
,2056 -> “喜欢”
,3450 -> “披”
,5678 -> “萨”
- 合并:将 Token 序列合并成连贯的文本。
- 将
[“我”, “喜欢”, “吃”, “披”, “萨”, “。”]
合并成“我喜欢吃披萨。”
- 将
- 输出:最终,我们得到了一段流畅的文本。
- 输入:模型生成一个数字序列,比如
分词器的关键作用和影响
-
定义模型的“基本认知单元”:分词器的词汇表就是模型认识的“所有字词”的集合。如果词汇表中没有某个概念(如“碳中和”),模型处理起来就会很困难(需要拆成“碳”、“中”、“和”来理解)。
-
直接影响模型的性能:
- 处理未知词:一个好的分词策略能更好地处理生僻词、专业术语或新造词。常见的策略如 BPE、WordPiece、SentencePiece 就是为了平衡词汇表大小和分词效率而设计的。
- 多语言能力:像 SentencePiece 这样的分词器可以无缝处理多种语言,这对于多语言大模型至关重要。
- 计算效率:Token 的数量直接影响模型的计算量。更有效的分词可以减少序列长度,提升训练和推理速度。
-
决定模型的上下文长度:
- 模型的上下文窗口(如 4K、8K、128K Tokens)是以 Token 数量 而非字符数量来衡量的。一个高效的分词器(例如,对于中文,一个汉字可能就是一个 Token)相比低效的分词器(例如,对于英文,一个单词可能被拆成多个 Token),在相同的上下文窗口内能处理更多的实际字符信息。
一个生动的比喻
你可以把分词器想象成 “乐高说明书”:
- 人类:看到的是最终成品的图片(完整的句子)。
- 模型:只能理解和操作一个个乐高积木(Tokens)。
- 分词器:就是那份说明书,它负责:
- 编码:把成品图片分解成搭建步骤和所需的积木编号(将文本转为 Token IDs)。
- 解码:根据一堆积木编号,还原出成品的样子(将 Token IDs 转回文本)。
总结
分词器是大语言模型与人类语言交互的基石。它不仅是简单的字符串拆分工具,更通过其分词策略和词汇表,深刻地影响着模型的效率、能力边界和对语言的理解方式。没有分词器,LLM 就无法处理我们输入的文本,也无法输出我们能看懂的结果。
更多推荐
所有评论(0)