大模型分词器原理详解
目录
1. BPE(Byte Pair Encoding,字节对编码)
前言
大模型分词器(Tokenizer)是大语言模型(LLM)中的一个关键组件,负责将原始文本转换成模型能够理解的数字形式(即token ID)。
分词器是大语言模型的一个基础且关键的组件,它直接影响了模型的能力上限和理解方式。
简单来说,分词器就是模型的“翻译官”,负责在人类可读的文本和模型可理解的数字之间进行转换。
一、分词器是什么?
分词器 是一个将原始文本分割成更小单元(称为 Token)的程序,并将这些 Token 映射成模型能够处理的数字 ID。
你可以把它想象成一个非常特殊的“词典”和“切词工具”的结合体。
核心工作流程如下:
人类文本 → 分词器 → Token序列 → 数字ID序列 → 模型处理
模型输出 ← 分词器 ← Token序列 ← 数字ID序列 ← 模型生成
二、为什么需要分词?(文本->Token->数字)
模型是数学实体,无法直接理解字符或单词。它们只能处理数字。因此,我们需要一种方法将文本转换为数字。
-
解决词汇表无限的问题:一种简单的方法是为每个单词分配一个ID。但语言中的单词是无限的(新词、拼写变体、专业术语等),这种方法不可行。
-
解决未登录词问题:如果模型遇到一个没见过的单词,简单的单词级映射就会失败。
-
平衡序列长度和语义:以字符为单位会使序列过长,模型难以捕捉语义;以单词为单位会使序列过短,但无法处理新词。
分词器通过在“字符”和“单词”之间找到一个折衷点——即“子词单元”——来解决这些问题。
三、分词器是如何工作的?(常见算法)
不同的模型使用不同的分词算法。以下是三种主流的算法:
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(低频) -
统计发现
e和s经常挨着,合并为es。 -
接着发现
es和t经常挨着,合并为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 字符工作,能更好地处理各种语言(包括中文、日文、代码等),而不仅仅是英语。 |
| 处理生僻词和新词 | 强大的子词分词能力使模型能够处理训练时未见过的单词。 |
总结
分词器是大语言模型与人类语言世界之间的桥梁。 它不是一个简单的“空格切割器”,而是一个复杂的、经过训练的组件,其核心思想是将单词分解为有意义的子词单元,从而使模型能够以高效、可推广的方式学习和处理人类语言的无限复杂性。
更多推荐



所有评论(0)