简单来说,分词器是大语言模型的“翻译官”,它在人类可读的文本和模型能够理解的数字语言之间进行转换。

我们可以从两个核心过程来理解它的作用:编码解码


1. 编码:将文本转化为模型能理解的数字(Tokens)

模型本质上是一个极其复杂的数学函数,它不直接理解单词或字符,只处理数字。分词器的作用就是搭建一座桥梁。

  • 步骤
    1. 输入:你输入一段文本,比如 “我喜欢吃披萨。”
    2. 分词:分词器将这句话切分成模型“词汇表”中存在的较小单元,即 Token。这个过程可能不是简单按空格切分。
      • 可能的结果:[“我”, “喜欢”, “吃”, “披”, “萨”, “。”]
      • 注意:“披萨”这个词被拆成了“披”和“萨”两个 Token,这是因为分词器的词汇表中可能没有“披萨”这个完整的词。
    3. 映射为ID:每个 Token 都会被映射到词汇表中一个唯一的整数 ID。
      • 例如:“我” -> 1001, “喜欢” -> 2056, “披” -> 3450, “萨” -> 5678
    4. 输出:最终,句子 “我喜欢吃披萨。” 被转换成一个数字序列:[1001, 2056, ..., 3450, 5678, ...]。这个数字序列才是模型真正的输入。

为什么需要分词?
如果直接把每个字符(包括字母、汉字、标点)当作一个 Token,虽然简单,但效率很低。一个句子会变得非常长,模型难以捕捉单词和短语级别的语义关系。通过分词,模型可以用更少的单元处理更多的信息。


2. 解码:将模型的数字输出转化回人类可读的文本

当模型完成计算,会生成一个数字序列(Token IDs 的概率分布)。分词器需要将这个序列“翻译”回我们能看懂的文本。

  • 步骤
    1. 输入:模型生成一个数字序列,比如 [1001, 2056, 1024, 3450, 5678, 1012]
    2. 映射回Token:分词器将这些 ID 映射回对应的 Token。
      • 1001 -> “我”, 2056 -> “喜欢”, 3450 -> “披”, 5678 -> “萨”
    3. 合并:将 Token 序列合并成连贯的文本。
      • [“我”, “喜欢”, “吃”, “披”, “萨”, “。”] 合并成 “我喜欢吃披萨。”
    4. 输出:最终,我们得到了一段流畅的文本。

分词器的关键作用和影响

  1. 定义模型的“基本认知单元”:分词器的词汇表就是模型认识的“所有字词”的集合。如果词汇表中没有某个概念(如“碳中和”),模型处理起来就会很困难(需要拆成“碳”、“中”、“和”来理解)。

  2. 直接影响模型的性能

    • 处理未知词:一个好的分词策略能更好地处理生僻词、专业术语或新造词。常见的策略如 BPEWordPieceSentencePiece 就是为了平衡词汇表大小和分词效率而设计的。
    • 多语言能力:像 SentencePiece 这样的分词器可以无缝处理多种语言,这对于多语言大模型至关重要。
    • 计算效率:Token 的数量直接影响模型的计算量。更有效的分词可以减少序列长度,提升训练和推理速度。
  3. 决定模型的上下文长度

    • 模型的上下文窗口(如 4K、8K、128K Tokens)是以 Token 数量 而非字符数量来衡量的。一个高效的分词器(例如,对于中文,一个汉字可能就是一个 Token)相比低效的分词器(例如,对于英文,一个单词可能被拆成多个 Token),在相同的上下文窗口内能处理更多的实际字符信息。

一个生动的比喻

你可以把分词器想象成 “乐高说明书”

  • 人类:看到的是最终成品的图片(完整的句子)。
  • 模型:只能理解和操作一个个乐高积木(Tokens)。
  • 分词器:就是那份说明书,它负责:
    • 编码:把成品图片分解成搭建步骤和所需的积木编号(将文本转为 Token IDs)。
    • 解码:根据一堆积木编号,还原出成品的样子(将 Token IDs 转回文本)。

总结

分词器是大语言模型与人类语言交互的基石。它不仅是简单的字符串拆分工具,更通过其分词策略和词汇表,深刻地影响着模型的效率、能力边界和对语言的理解方式。没有分词器,LLM 就无法处理我们输入的文本,也无法输出我们能看懂的结果。

Logo

更多推荐