目录
Tokenizer
/  

Tokenizer

Tokenizer

字符级 Tokenizer (Character-level)

这是最简单的思路:把每个字、每个字母、每个标点都当成一个 Token。

  • 例子: “我爱学习” -> ["我", "爱", "学", "习"]
  • 例子: “Apple” -> ["A", "p", "p", "l", "e"]
  • ✅ 优点: 词表非常小(几十个字母或几千个汉字就能覆盖所有文本),永远不会出现“我不认识这个词”的情况。

❌ 缺点:

  1. 太碎了: 字母 a 本身没有意义,模型要读很多个 Token 才能拼出一个意思,计算压力大。
  2. 序列太长: 同样的一句话,字符级分词后的长度是词级的数倍。

词级 Tokenizer(Word-level)

像我们平时说话一样,按完整的词来切分。通常需要配合空格或分词工具(如 Jieba 分词)。

  • 例子: “我爱学习” -> ["我", "爱", "学习"]
  • 例子: “I love apple” -> ["I", "love", "apple"]
  • ✅ 优点: 每个 Token 都有明确的语义,模型学起来最轻松。

❌ 缺点:

  1. 词表爆炸: 英语有几十万个单词,算上各种时态(walk, walking, walked),词表大到显存塞不下。
  2. OOV问题(Out of Vocabulary): 如果用户输入一个字典里没有的新词(比如新出的网络热词),模型会直接报错,标记为 [UNK](未知词)。

子词级 Tokenizer (Subword-level) - 现代大模型的选择

它的核心逻辑是:常用的词完整保留,不常用的词拆成有意义的碎片。

  • 例子: “Annoyingly”(讨厌地)

    • 这个词不常用,如果词级分词可能不认识。
    • 子词级会把它拆成:["Annoying", "##ly"]
    • 模型认识 Annoying(讨厌),也认识后缀 ly(副词化),合起来它就能猜出意思。
  • 例子: “Today is sunday !”

    • 如果是一个成熟的子词分词器(如 Llama3 或 GPT-4 的 Tokenizer), Todayis 因为是高频词,通常会被作为完整词保留
    • sunday 在有些词表里是完整词,但在一些较小的词表里,可能为会被拆分为 sun + day -- 模型能意识到 sunday 和 sunny 都有 sun 这个根源
    • ! 标点符号通常会被独立起来

✅ 优点:

  1. 平衡词表大小: 通常只需要 3万 到 10万 个 Token 就能覆盖无限的组合。
  2. 解决新词难题: 即使是新词,拆成碎片后,模型也能通过碎片“盲猜”大概意思。**

标题:Tokenizer
作者:gitsilence
地址:https://blog.lacknb.cn/articles/2025/12/27/1766811701429.html