核心要点

  • BERT 用 WordPiece 子词分词,而非词级分词

  • 罕见词被拆成已知子词(playing → play + ##ing),未登录词可拆到字符级

  • 子词词表有限但能组合覆盖几乎所有输入,因此几乎无传统 OOV

  • 局限:罕见词可能被拆得过碎丢失整体语义,中文基本按字切分

标准回答

这道题的关键是说清 BERT 靠子词分词(WordPiece)从机制上规避了 OOV,而不是靠某个特殊词。

1. 词级模型的 OOV 问题
传统 word 级模型有一个固定词表,遇到词表外的词只能映射到一个统一的 [UNK],丢失了该词的全部信息。低频词、新词、拼写变体都会变成 UNK,对下游任务伤害很大。

2. BERT 的解法:WordPiece 子词分词
BERT 的词表由约三万个 子词单元 组成,分词时采用贪心最长匹配:

  • 常见词整体在词表里,直接作为一个 token
  • 罕见词被拆成若干已知子词,例如 playing → play + ##ingembeddings → em + ##bed + ##ding + ##s,其中 ## 前缀表示「接在前一个子词后面,非词首」。
  • 极端情况下未登录词会一路拆到 单个字符,而字符都在词表里,所以总能表示,几乎不会真正产生 OOV。

3. 为什么这样有效
子词在不同词之间 共享表示。模型见过 play##ing 的语义,即使从没见过某个新词,也能通过子词的组合获得合理的表示,具备一定的形态学泛化能力(前缀、后缀、词根的复用)。这让 BERT 对未见词、拼写变体、专有名词都更鲁棒。

4. 局限

  • 罕见词若被拆得 过碎,单个子词承载的语义有限,模型需要更多层去重新「拼」出整体含义,可能不如有完整词向量精确。
  • 对中文,WordPiece 基本退化为 按字切分,子词的形态学优势体现不明显,靠的是字与上下文的组合。
  • 子词切分对数字、长串符号等也可能切得不理想。

常见误区

⚠️ 常见踩坑

误以为 BERT 遇到罕见词会输出 [UNK],像 word 级模型那样丢信息。实际上 BERT 通过 WordPiece 把罕见词拆成已知子词甚至字符,几乎不会产生传统 OOV;[UNK] 只在极少数连字符都不在词表的情况下才出现。

追问

追问 1WordPiece 的子词词表是怎么训练出来的?

WordPiece 从字符级别开始,基于训练语料统计,迭代地合并能 最大化语言模型似然(或等价的频率收益) 的相邻单元,逐步形成子词,直到达到预设词表大小。它与 BPE 思路相近,区别在于 BPE 按出现频率合并最频繁的字节对,而 WordPiece 按合并后对似然的提升来选择,倾向保留更有语言意义的子词。

追问 2子词分词会带来什么副作用?如何缓解?

主要副作用是同一个语义被拆成多个 token,序列变长、计算成本增加,且对齐(如 NER 的实体边界、抽取式任务的 span)需要把子词预测重新聚合回原词。缓解办法包括:取每个词首子词的表示代表整词、对子词标签做对齐与合并、或针对领域语料扩充/重训词表以减少过度拆分。

追问 3对中文,WordPiece 的优势还存在吗?

优势大打折扣。中文没有空格分词,且单字本身常是语义单位,WordPiece 基本退化为按字切分,几乎用不到「拆后缀/词根」这类形态学组合。因此中文 BERT 更多依赖字级表示加上下文建模;后续不少中文模型改用全词遮蔽(Whole Word Masking)或词级/混合粒度策略来弥补。

🔗 相似问题

同一考点的不同问法,面试官可能换着问,一起刷更稳

没找到想看的面试题?把你想看的告诉我们 →

延伸学习

按主题分类的相关资源,便于系统复习