目录

前言

一、分词器是什么?

二、为什么需要分词?(文本->Token->数字)

三、分词器是如何工作的?(常见算法)

1. BPE(Byte Pair Encoding,字节对编码)

2. WordPiece

3. Unigram

四、示例

五、为什么分词器如此重要?

总结


前言

大模型分词器(Tokenizer)是大语言模型(LLM)中的一个关键组件,负责将原始文本转换成模型能够理解的数字形式(即token ID)。

分词器是大语言模型的一个基础且关键的组件,它直接影响了模型的能力上限和理解方式。

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


一、分词器是什么?

分词器 是一个将原始文本分割成更小单元(称为 Token)的程序,并将这些 Token 映射成模型能够处理的数字 ID。

你可以把它想象成一个非常特殊的“词典”和“切词工具”的结合体。

核心工作流程如下:

人类文本分词器Token序列数字ID序列模型处理
模型输出分词器Token序列数字ID序列模型生成

二、为什么需要分词?(文本->Token->数字)

模型是数学实体,无法直接理解字符或单词。它们只能处理数字。因此,我们需要一种方法将文本转换为数字。

  1. 解决词汇表无限的问题:一种简单的方法是为每个单词分配一个ID。但语言中的单词是无限的(新词、拼写变体、专业术语等),这种方法不可行。

  2. 解决未登录词问题:如果模型遇到一个没见过的单词,简单的单词级映射就会失败。

  3. 平衡序列长度和语义:以字符为单位会使序列过长,模型难以捕捉语义;以单词为单位会使序列过短,但无法处理新词。

分词器通过在“字符”和“单词”之间找到一个折衷点——即“子词单元”——来解决这些问题。

三、分词器是如何工作的?(常见算法)

不同的模型使用不同的分词算法。以下是三种主流的算法:

1. BPE(Byte Pair Encoding,字节对编码)

  • 代表模型:GPT 系列、RoBERTa、Llama

  • 工作原理:从基础字符(如字母)开始,迭代地合并出现频率最高的相邻字符对,直到达到预定的词汇表大小。

  • 例子

    • 原始词:l o w(低频), l o w e r(低频), n e w e s t(低频), w i d e s t(低频)

    • 统计发现 es 经常挨着,合并为 es

    • 接着发现 est 经常挨着,合并为 est

    • 最终,"lowest" 可能被分词为 ["low", "est"],而不是一个完整的单词。

2. WordPiece

  • 代表模型:BERT、DistilBERT

  • 工作原理:与 BPE 类似,但合并策略不同。BPE 基于频率,而 WordPiece 基于合并后能最大程度地增加语言模型概率的符号对。

  • 效果:与 BPE 非常相似,但产生的词汇表在某些任务上略有优势。

3. Unigram

  • 代表模型:ALBERT、T5、SentencePiece(一种分词器工具)

  • 工作原理:与 BPE/WordPiece 的“自下而上”合并相反,Unigram 是“自上而下”的。它从一个大的种子词汇表开始,迭代地移除对整体似然度贡献最小的单元,直到词汇表缩小到目标大小。

  • 优势:可以灵活地计算同一个句子的多种分词方式的概率。

四、示例

假设我们有一个基于 BPE 的分词器,词汇表里包含:

  • 常见词: the, cat, sits

  • 子词单元: un(前缀), happ(词根), y, ily(后缀), ##ing(后缀)

分词过程:

  • 句子: "The unhappy cat is sitting."

  • 分词结果: ["The", "un", "happ", "y", "cat", "is", "sit", "##ting", "."]

  • 数字ID: [2, 154, 231, 75, 24, 11, 189, 543, 7]

这样分词的好处:

  • 模型学到了 "un" 是一个表示否定含义的前缀。

  • 模型学到了 "##ing" 是一个表示进行时的后缀。

  • 即使模型从未见过 "unsatisfied" 这个词,它也能合理地将其分为 ["un", "satisf", "ied"],并理解其大意。

五、为什么分词器如此重要?

分词器的设计直接影响了模型的方方面面:

方面影响
模型性能一个好的分词器能更高效地表示语言,减少歧义,从而提升模型的理解和生成能力。
上下文窗口分词器将句子切分成更少的 Token,模型就能在有限的上下文窗口内处理更长的文本。例如,一个“聪明”的分词器可能用 10 个 Token 表示一段话,而一个“笨”的分词器可能需要 15 个。
多语言支持像 SentencePiece 这样的分词器可以基于 Unicode 字符工作,能更好地处理各种语言(包括中文、日文、代码等),而不仅仅是英语。
处理生僻词和新词强大的子词分词能力使模型能够处理训练时未见过的单词。

总结

分词器是大语言模型与人类语言世界之间的桥梁。 它不是一个简单的“空格切割器”,而是一个复杂的、经过训练的组件,其核心思想是将单词分解为有意义的子词单元,从而使模型能够以高效、可推广的方式学习和处理人类语言的无限复杂性。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐