什么是NLP的子词切分?

什么是NLP的子词切分?
Nan Wu
子词切分(Subword Segmentation)是 NLP 领域中的一种常见的文本预处理技术,旨在将词汇进一步分解为更小的单位,即子词。子词切分特别适用于处理词汇稀疏问题,即当遇到罕见词或未见过的新词时,能够通过已知的子词单位来理解或生成这些词汇。子词切分在处理那些拼写复杂、合成词多的语言(如德语)或者在预训练语言模型(如BERT、GPT系列)中尤为重要。
子词切分的方法有很多种,常见的有Byte Pair Encoding (BPE)、WordPiece、Unigram、SentencePiece等。这些方法的基本思想是将单词分解成更小的、频繁出现的片段,这些片段可以是单个字符、字符组合或者词根和词缀。[1]
各子词切分方法的区别
Byte Pair Encoding (BPE)
原理:基于字符级别的贪心合并算法,通过迭代合并最频繁出现的字符对(或子词对),生成新的子词单元。- 基本思想:将单词中的字符作为子词,然后根据统计信息合并频繁出现的字符组合,直到满足预设的子词数量。
- 示例:将 “lowest” 切分成 “low”、”est”、”lowest”。
- 优点:简单易实现,能够有效减少词汇表大小。
- 缺点:合并规则依赖于统计信息,可能会导致一些未知词汇的切分问题。
步骤:
- 初始化词汇表为所有单个字符,并在每个词末尾添加特殊符号(如)区分词边界。
- 统计语料中所有相邻子词对的出现频率,合并频率最高的一对,形成新子词并加入词汇表。
- 重复步骤 2,直到达到预设的词汇表大小或迭代次数。
- 切分时,将词分解为已学习的最长子词序列(从长到短匹配)。
适用于:适合单语言、追求效率的场景(如 Transformer 模型),词汇表增长稳定。
WordPiece
原理:基于 BPE 的改进,合并准则从 “频率最高” 改为 “提升语言模型对数似然最大”(即合并后使整体序列概率更高)。- 基本思想:类似于BPE,是BPE的升级,但在合并过程中考虑了子词的概率分布,优先选择能够最大化语言模型概率的子词组合。
- 示例:将 “unhappiness” 切分成 “un”、”happiness”。
- 优点:能够更好地处理低频词和新词,适用于预训练模型。
- 缺点:实现复杂度较高,需要更多的计算资源。
步骤:
- 初始化词汇表为所有单个字符,并添加特殊符号(如)。
- 统计语料中所有子词对的出现频率,计算每对的条件概率。
- 合并概率最高的子词对,形成新子词并加入词汇表。
- 重复步骤 2 和 3,直到达到预设的词汇表大小或迭代次数。
适用于:在语言模型任务中表现更优(如 BERT 的双向预测),合并更注重语义相关性。
Unigram
原理:基于概率模型的子词选择方法,假设最优子词集合是使语料似然概率最大的 “一元语法”(unigram)集合,通过迭代删除低概率子词优化词汇表。- 基本思想:基于概率模型,将词分解为子词的概率分布,选择最优的子词组合。
- 示例:将 “unhappiness” 切分成 “un”、”happy”、”ness”。
- 优点:能够处理复杂的语言结构,适用于多种语言。
- 缺点:需要较大的计算资源和内存。
步骤:
- 初始化词汇表为所有单个字符,并添加特殊符号(如)。
- 计算每个子词的概率分布。
- 根据概率分布选择最优的子词组合,形成新词汇表。
- 切分时,选择概率最高的子词序列。
适用于:适合需要灵活切分(如允许重叠子词)或多语言场景,生成的子词更短。
SentencePiece
原理:并非独立的切分算法,而是一个工具库,支持集成 BPE、Unigram 等方法,并解决了传统方法依赖空格分词的问题(适用于无空格语言如中文、日语)。- 基本思想:将文本切分成子词的序列,每个子词的长度可以是固定的也可以是可变的。
- 示例:将 “unhappiness” 切分成 “un”、”happiness”。
- 优点:能够处理复杂的语言结构,适用于多种语言。
- 缺点:实现复杂度较高,需要更多的计算资源。
步骤:
- 初始化词汇表为所有单个字符,并添加特殊符号(如)。
- 统计语料中所有子词的出现频率。
- 根据频率选择最优的子词组合,形成新词汇表。
- 切分时,选择概率最高的子词序列。
适用于:优先用于无空格语言(如中文、日语)或多语言混合任务,简化预处理流程。
差异对比:
| 维度 | BPE | WordPiece | Unigram | SentencePiece |
|---|---|---|---|---|
| 合并 / 优化准则 | 最高频率的相邻子词对 | 最大语言模型增益(正) | 最大语料似然概率(删除低贡献子词) | 无独立准则,集成其他方法 |
| 词汇表大小 | 固定迭代次数控制 | 固定迭代次数控制 | 迭代删除子词至目标大小 | 由集成的算法决定 |
| 词边界标记 | 用</w>标记词尾 |
用##标记非词首子词 |
无显式标记,依赖概率 | 用▁标记空格(词边界) |
| 无空格语言支持 | 弱(依赖空格预处理) | 弱(依赖空格预处理) | 弱(依赖空格预处理) | 强(直接处理原始文本) |
| 计算复杂度 | 低(贪心合并) | 中(需计算概率增益) | 高(多次迭代与维特比解码) | 由集成的算法决定 |
| 典型应用 | GPT 系列、FastText | BERT、DistilBERT | T5、ULMFit | 多语言模型(如 mBART) |
引用:






