什么是子词分词(Subword Tokenization)

什么是子词分词

子词分词Subword Tokenization‍是一种介于“词级分词”(Word Tokenization)和“字符级分词”(Character Tokenization)之间的文本处理技术。它将词语拆分为更小的单元(子词),如词根、前缀、后缀或常见的字母组合。

为什么需要子词分词?

自然语言处理中,传统的词级分词面临两大难题:

  1. 词表膨胀:语言中单词数量庞大(如英语约有50万单词),若将每个单词作为一个独立的词元Token),词表会变得极其庞大,导致模型训练效率低下且难以覆盖所有词汇。
  2. 未登录词(OOV)问题:传统分词无法处理词表中不存在的新词(如新出现的专有名词或拼写错误的词),这类词通常会被标记为 <UNK>,导致信息损失。

子词分词通过将词拆解为更小的子词来解决上述问题。它通过组合已知的子词来表示未知词,从而大幅降低词表规模,同时保留语言的表达能力。


核心原理

子词分词的核心思想是:如果一个完整的词没有出现在词表中,只要它可以被拆分为词表中存在的子词单元,就可以被模型识别和表示

示例

词语 传统词级分词 子词分词(BPE/WordPiece 说明
unhappiness <UNK>(若未登录) un##happiness 或 unhappiness 将未登录词拆解为已知子词
tokenization <UNK> token##ization 保留了词根“token”的语义
lolcats <UNK> lolcats 处理网络流行语

主要算法

子词分词通常使用特定的算法从大规模语料库中自动学习生成词表。以下是三种主流算法:

1. BPE(Byte Pair Encoding

  • 原理:源于数据压缩技术。算法从字符开始(如 h e l l o),统计相邻字符对的出现频率,逐步合并出现频率最高的字符对为一个新符号,重复该过程直至词表达到设定大小。
  • 特点:实现简单,可逆无损;在多语言场景下常采用字节级 BPE(Byte-level BPE),直接处理原始字节流。

2. WordPiece

  • 原理:最初由 Google 开发用于 BERT。与 BPE 类似,但合并策略基于语言模型的概率分布(即合并后出现的词频乘积最大),更注重语言学意义。
  • 特点:词表通常较小(如 30,000 左右),在实际应用中效果优于 BPE。

3. SentencePiece(Unigram Model)

  • 原理:由 Google 提出。它不依赖空格来划分单词,而是直接对原始字符流进行建模。Unigram 方法通过反向减法(从大词表开始,逐步丢弃概率低的子词)来生成词表。
  • 特点:无需预先进行分词(Tokenizer-Free),对中文等无空格语言支持友好,且能自动处理特殊字符和 Unicode。

子词分词的优势与挑战

优势

  1. 缓解 OOV 问题:未知词可以被拆解为已知子词,极大减少 <UNK> 的出现。
  2. 平衡词表规模:通过拆分词语,词表可以控制在几万到十几万规模,显著降低模型的参数量和计算成本。
  3. 共享语义:相同的子词(如 unbreakable)在不同词中共享,有助于模型学习词根的语义。

挑战

  1. 切割粒度:如果切割得过细(接近字符级),模型需要学习的序列太长;切割得过粗(接近词级),又可能出现 OOV 问题。需要在切割粒度和词表大小之间找到平衡。
  2. 中文处理:中文是基于字符的语言,子词分词需要处理好字与词的关系,避免过度切分导致语义丢失。

应用场景

子词分词是现代大型语言模型(LLM)的基础技术之一。无论是 BERTGPT-4o 还是 LLaMA 3,它们在输入文本时都会首先通过子词分词器将句子转化为一串整数 ID(Token IDs),这些 ID 代表了模型所能理解的最小语义单元。

简而言之,子词分词是 NLP 模型在“阅读”语言时的一副“眼镜”,它通过灵活的切割策略,让模型能够看清并理解既熟悉又陌生的语言结构。

来源:www.aiug.cn
声明:文章均为AI生成,请谨慎辨别信息的真伪和可靠性!