CMU Subword Modeling | 01 Things Smaller than Words

什么是 Subword Modeling(子词建模)?

在自然语言处理中(Natural Language Processing, NLP ),我们需要把文本变成数字,这样计算机才能"理解"语言。这个转换的核心步骤之一就是 Tokenization(分词/标记化) :把连续的文字拆成可以处理的最小单位。(dmort27.github.io)

传统的想法是把 word(单词) 当成单位。但是在实际中,这种方式有很大的问题。

1️⃣ 为什么单词不是"原子单位"(Words aren't atomic)

在语言学(Linguistics)里,"单词"其实并不是一个最基本、不可拆的单位。比如:

  • aren't 这个词,有人会把它看成一个词,
  • 但也可以拆成 are + not (两个词)或者 ar + en't (子词形式)。(dmort27.github.io)

这个拆分看起来像数学里的拆因数:选不同的拆法,会影响后面的表示和学习。核心问题是:

  • 如果用完整的词作为单位,词表(vocabulary)会非常大;
  • 而且很多词可能只出现过一两次 ⇒ 数据稀疏性 (sparsity)特别严重。(dmort27.github.io)

语言中的单词频率分布遵循 Zipf 定律 :极少数词非常常见,大部分词非常稀有。(dmort27.github.io) 这意味着如果我们用完整词做 token:

  • 很多词是"低频的"(rare words);
  • 这样的低频词难以学习它们的语义表示;
  • 模型容易因为见过太少而无法泛化。

2️⃣ 用子词(Subwords)作为 Token:Goldilocks 方案

"Subword" 的意思是介于完整单词和字符(characters)之间的单位。也就是说:

  • 字符级 tokenization(character-level)太碎,单个字符没有语义;
  • 单词级 tokenization(word-level)太粗,遇到新词就没办法;
  • 子词级 tokenization(subword-level) 刚刚好:既包含一定语义,也能拆解未登录词(OOV)。(百度智能云)

举个例子:

如果我们见到一个从未出现过的词 "unhappiness",用 word-level 分词,它是一个全新的 token;

而用 subword,则可能分成 un + happy + ness

这样即使没有见过 "unhappiness",模型仍然可以理解其中的成分意义。

这种方式的好处:

✔️ 缓解 open vocabulary problem(开放词汇问题)

✔️ 减少模型需要学习的词表大小

✔️ 让模型通过组合更小的单位学习更多语义

(以上概念在 NLP 领域都广泛使用)(百度智能云)


3️⃣ Linguistic Insight(语言学洞察):Duality of Patterning

语言是分层的!这叫做 Duality of Patterning

  • 最底层是 letters/phonemes(字母或音素)------最小但无语义;
  • 然后组合成 morphemes(语素) ------ 有基本意义单元;
  • 再组合成单词、短语和句子。(dmort27.github.io)

传统 word-level 分词跳过了这个层次结构,只看到了太大颗粒的单位。而 subword 分词就是尝试让 token 更接近语言本身的"有意义单位"。(dmort27.github.io)


4️⃣ 常见子词 Tokenization 方法

在实际模型中,我们需要一种算法来决定这些 subword 是怎么划分的。两个最常见的算法是:

✔️ Byte-Pair Encoding(BPE)

从字符开始,基于统计频率合并常见的字符对,逐渐得到高频子词。这个办法简单但效果非常好,是 GPT/Transformer 系列里常用的方法。(百度智能云)

✔️ Unigram / SentencePiece

从句子里直接学习 subword 概率模型,允许更灵活的划分方式。

这是 Google 的 SentencePiece 所采用的框架。(arXiv)


5️⃣ 为什么 Subword 很重要?

总结下来,用 subword 的核心优势:

🔹 解决 OOV 问题 (可以处理新词、新拼写)

🔹 控制词表规模 (不是每个单词都要学习一个 embedding)

🔹 提高泛化能力 (rare words 也能组合已有子词) (百度智能云)

这也是现代大语言模型如 BERT、GPT、T5 等,都采用 subword tokenization 的原因。


总结

传统 Word-Level Token Char-Level Token Subword Token
太大颗粒 太小颗粒 适中"刚好"
数据稀疏性大 语义太弱 语义 + 稳健
OOV 难处理 容易处理 很好处理

Subword modeling 就是让我们在 NLP 建模中找到一个既不大也不小、语义信息富、有泛化能力的 Token 粒度 。这让机器学习语言的时候既高效又更稳健。(dmort27.github.io)

相关推荐
circuitsosk4 小时前
NL2SQL在工业级场景下的精度优化:Schema Linking + 动态Few-shot实战
人工智能·python·sql·大模型·nl2sql
9000AI4 小时前
9000AI如何工业化生产流量?高质量规模生产与矩阵化饱和覆盖
人工智能
字节数据平台5 小时前
iDA:从 ChatBI 到专业数据分析助手的演进之路
大数据·人工智能·机器学习·数据分析
warpdrivelabs5 小时前
Codex 开源 harness 全面了解
开发语言·人工智能
mit6.8245 小时前
微软如何交付企业级Agent
人工智能
Mininglamp_27185 小时前
明略科技携手海康机器人亮相世界机器人大会,以“Agent+具身“联合进入商业机器人场景
人工智能·科技·机器人·开源·agent·ai agent
2401_894915535 小时前
GEO 优化源码全解析:从搜索引擎到 AI 引擎的底层改写逻辑
java·服务器·前端·数据库·人工智能·分布式·搜索引擎
MobotStone7 小时前
从“听得懂”到“干得了”:工业大模型落地工厂的三层进化路线
人工智能
wangruofeng7 小时前
GLM-5.3-Flash 发布:追平 Opus 4.8 的智力,1/40 的价格,跑在国产芯片上
人工智能·aigc·chatglm (智谱)
皮皮虾❀9 小时前
钉钉AI服务商×教育行业:AI现代产业学院共建一体化实战——从“高校AI教学缺平台”到“校企共建AI产业学院培养数字化人才
人工智能·钉钉