分词(Tokenization):大语言模型的基础核心技术
分词(Tokenization)是大语言模型(LLM)的核心基础技术,旨在将文本拆分为具有语义的词元(token)。主流分词方法包括词粒度、字符粒度和子词粒度,其中子词粒度(如BPE、WordPiece)通过平衡词表大小与语义表达成为LLM的默认选择。分词质量直接影响模型性能,是导致LLM拼写错误、数字处理异常等问题的根源。当前主流工具库(如SentencePiece、Hugging Face T
分词(Tokenization):大语言模型的基础核心技术
分词(Tokenization)是自然语言处理(NLP)尤其是大语言模型(LLM)的基础步骤,其核心目的是将连续输入文本拆分为一个个具有相对完整、独立语义的词元(token),为后续的词嵌入(embedding)学习、模型输入等任务提供基础支撑。好的分词方案能直接影响模型的语义理解能力、训练效率与泛化性能,而分词缺陷也是导致LLM诸多“怪异问题”的核心根源。
一、分词的核心粒度:从词到子词的平衡艺术
分词的“粒度”决定了token的大小与语义承载能力,目前主流分为词粒度、字符粒度与子词粒度三类,三者各有优劣,适用于不同场景。
1. 词粒度(Word-level)
以自然语言中的“词”作为基本token,例如英文依赖空格实现天然分割,中文则需借助jieba等工具完成分词。
- 优点:能完整保留词的边界与语义,符合人类对语言的认知习惯。
- 缺点:存在两大核心问题——一是词表易因“长尾效应”变得异常庞大,包含大量稀有词,不仅增加存储与训练成本,且稀有词往往难以被模型充分学习;二是无法解决“未登录词”(OOV,out of vocabulary)问题,面对词表之外的新词时完全失效。
2. 字符粒度(Char-level)
以单个字符作为基本token,例如英文的26个字母、中文的单个汉字(约5000个常用字即可覆盖大部分场景)。
- 优点:彻底解决OOV问题,且词表规模极小,大幅降低存储成本。
- 缺点:单个字符无法承载丰富语义(如“电”与“脑”单独存在时语义模糊,组合为“电脑”才具备明确含义);同时会显著增加序列长度,导致模型计算成本飙升。
3. 子词粒度(Subword-level)
粒度介于词与字符之间,核心思想是“常用词保持完整形态,生僻词拆分为子词”,通过子词共享实现词表压缩与语义保留的平衡。
- 优点:可较好平衡词表大小与语义表达能力——既能通过子词组合解决OOV问题,又能避免字符粒度的语义碎片化;同时可处理单词的形态与词缀关系(如“run”“running”可拆分为共享子词,减少训练冗余,捕捉词间关联)。
- 代表算法:目前主流的子词分词算法包括BPE(字节对编码)、WordPiece与Unigram Language Model(ULM),是GPT、BERT等主流LLM的默认分词方案。
二、分词对LLM的关键影响:那些“怪异问题”的根源
文档明确指出,“Tokenization是很多LLM问题的核心”,看似简单的分词步骤,实则决定了LLM的多项能力上限:
- 为何LLM不会拼写单词?因分词将词拆分为子词,模型学习的是子词组合逻辑而非完整拼写规则。
- 为何LLM难以完成反转字符串、简单算术等任务?因分词会破坏字符连续性(如“456+1234”可能被拆分为“456”“+”“1234”),导致模型无法捕捉细粒度的字符或数字逻辑。
- 为何LLM在日语等非英语语言上表现较差?因这些语言无天然分隔符,分词难度更高,易产生不合理子词,直接影响语义理解精度。
- 为何GPT-2在Python编程时会遇到过多不必要的麻烦?因代码语法(如“class”“def”)的分词规则设计不当,导致模型难以捕捉完整的语法结构。
正如文档所述:“Tokenization is at the heart of much weirdness of LLMs. Do not brush it off.”(分词是LLM诸多怪异问题的核心,不容忽视。)
三、主流分词算法详解:从合并到删减的不同思路
目前主流的子词分词算法虽均以“平衡词表与语义”为目标,但核心逻辑与实现步骤差异显著,以下为四大核心算法的关键解析。
1. BPE(Byte Pair Encoding,字节对编码)
核心思想
从基础小词表(如英文26个字母+各类符号)出发,通过反复合并训练语料中最高频的连续token对,逐步生成新子词,直到词表大小达到预设值。
关键步骤
- 准备基础词表:初始化包含最小单元(如字符、符号)的词表,并为每个单元分配唯一ID。
- 拆分语料:将训练语料按基础词表拆分为最小单元(例如“low”拆分为“l o w ”,其中“”用于标记词结尾)。
- 合并高频对:统计所有相邻单元对的出现频率,选择频率最高的对进行合并(如“r”与“”合并为“r”),并更新词表。
- 循环终止:重复步骤3,直到词表大小达到预设值或下一个最高频率为1。
优缺点
- 优点:能高效平衡词表大小与编码步数(编码句子所需的token数量),且实现逻辑简单易懂。
- 缺点:基于贪婪策略进行合并,无法提供带概率的多个分词结果;解码时可能存在歧义(如“Hello”既可能拆分为“Hell o”,也可能拆分为“He llo”)。
2. BBPE(Byte-level BPE,字节级BPE)
核心思想
将BPE从“字符级”扩展到“字节级”,基础词表固定为256个UTF-8字节,解决多语言场景下稀有字符占用词表、限制词表紧凑性的问题。
关键优势
- 多语言共享性好:即使不同语言的字符集不重叠,也可通过字节级子词实现跨语言迁移。
- 无损压缩:能根据文本中的重复模式与常见片段动态生成词表,压缩效率高且无信息损失。
- 词表极小:基础词表仅包含256个字节,大幅降低初始存储成本。
缺点
- 编码序列更长:相比传统BPE,相同文本的token数量更多,会增加模型的计算成本。
- 解码有歧义:从字节解码为文本时可能出现歧义,需结合上下文信息与动态规划确保输出有效句子。
3. WordPiece
核心思想
与BPE类似,从基础词表逐步合并生成子词,但核心差异是按“token间的互信息”选择合并对(而非频率)——即优先合并那些合并后能最大程度提升训练数据概率的token对,确保合并的子词在语义上具有更强关联性。
关键步骤
- 初始化基础词表,将训练语料拆分为最小单元。
- 训练unigram语言模型,通过极大似然估计计算每个子词在语料中的出现概率。
- 计算所有token对的互信息(互信息越高,说明两token的关联性越强),合并互信息最高的token对。
- 重复步骤3,直到词表大小达标或合并带来的概率增量低于某一阈值。
优缺点
- 优点:合并的子词语义关联性更强,能更好平衡词表大小与OOV问题。
- 缺点:可能产生不合理子词(如出现错误切分);对拼写错误非常敏感,且对单词前缀的支持不足(解决方案通常是将复合词、前缀单独拆分)。
4. ULM(Unigram Language Model,单字语言模型)
核心思想
与BPE、WordPiece“从小学大”的思路相反,ULM采用“从大到小”的策略——先初始化一个极大词表(如包含所有字符+高频ngram,也可通过BPE算法预初始化),再通过unigram语言模型计算“删除每个子词后对总损失的影响”,保留损失高(即重要性高)的子词,直到词表大小降至预设值。
关键优势
- 支持多概率分词:能为同一文本提供多个带概率的分词结果,适配不同场景需求。
- 语义保留好:优先保留高频且语义关键的子词,减少语义损失(例如高频子词若被删除,会导致模型损失大幅上升,因此会被优先保留)。
缺点
- 依赖初始词表:初始词表的质量直接影响最终分词效果,通常需用BPE预初始化以确保初始词表的合理性。
- 实现复杂:涉及EM算法、维特比算法(用于寻找最优分词结果)等,计算流程比BPE更繁琐。
四、常用分词工具库:高效落地的“利器”
实际应用中,无需重复实现复杂算法,主流工具库已封装好完整功能,以下为两大核心库的特点解析。
1. SentencePiece
核心优势
- 多粒度支持:兼容BPE、ULM、词粒度、字符粒度四种分词模式,可根据场景灵活选择。
- 多语言友好:以Unicode编码处理所有输入语言(英文、中文、日语等),解决多语言编码方式不同的问题。
- 编解码可逆:通过元符号“▁”(U+2581)转义空白字符,确保“Decode(Encode(Normalized(text)))=Normalized(text)”,无信息丢失。
- 无须预分词:可直接从原始文本(raw text/sentences)进行训练,省去手动预分词步骤,提升效率。
2. Tokenizers(Hugging Face)
核心特点:完整的编码流水线
调用Tokenizer.encode或Tokenizer.encode_batch时,文本会经过四步标准化处理,确保输入模型的文本质量:
- 归一化(Normalization):对文本进行清理(如删除多余空格、去除变音符号、转为小写、Unicode标准化),例如将“Héllò hôw are ü?”处理为“hello how are u?”。
- 预分词(Pre-tokenization):将文本拆分为更小的“准单词”(如按空格拆分),为最终token设定数量上限(最终token是这些“准单词”的一部分)。
- 模型(Model):调用具体的分词算法(如BPE、WordPiece)生成最终token。
- 后处理(Post-processing):添加模型所需的特殊token(如[CLS]、[SEP]),适配不同LLM的输入格式。
五、主流分词方法对比:选择的核心依据
不同分词算法的核心差异可通过下表清晰区分,实际选择时需结合业务场景、数据特点与模型需求综合考量:
| 对比维度 | BPE | WordPiece | ULM |
|---|---|---|---|
| 核心思路 | 合并高频token对 | 合并高互信息token对 | 删减低重要性子词 |
| 词表变化方向 | 从小到大(增量扩展) | 从小到大(增量扩展) | 从大到小(减量精简) |
| 决策依据 | token对出现频率 | token对互信息 | 子词删除损失(重要性) |
| 多概率分词支持 | 不支持 | 不支持 | 支持 |
| 典型应用场景 | GPT-2、GPT-3等生成式LLM | BERT、ALBERT等理解式LLM | T5、XLNet等多任务LLM |
| 核心缺点 | 解码有歧义 | 易出现错误切分 | 依赖初始词表,实现复杂 |
总结:分词的选择原则
分词无“绝对最优方案”,仅“最适配场景的方案”,核心选择原则如下:
- 若需处理多语言场景或追求编解码可逆性,优先选择SentencePiece;
- 若为生成式LLM(如GPT系列)预训练,BPE/BBPE是兼顾效率与效果的选择;
- 若为理解式LLM(如BERT系列),WordPiece的高语义关联性更适配;
- 若需为文本提供多概率分词结果(如多场景适配的NLP任务),ULM是唯一合适的方案。
分词作为LLM的“第一道工序”,其设计质量直接决定后续模型的学习效率与效果,需结合数据特点、模型目标与计算成本进行精细化选择。
更多推荐


所有评论(0)