WordPiece 简介
WordPiece 是 Google 在 2016 年提出的一种 子词(sub‑word)分词算法,最早用于语音搜索系统,随后在机器翻译、BERT 等预训练语言模型中得到广泛采用。它的核心目标是 在保持词汇表规模可控的同时,提升对未登录词(OOV)和稀有词的处理能力。
1. 设计动机
- 词表过大:传统的词级别词表会随语料规模指数增长,导致模型参数膨胀。
- OOV 问题:纯词级别词表无法覆盖所有出现的词,尤其是新词、专有名词等。
- 语言多样性:对没有显式空格分隔的语言(如日语、韩语)也需要有效的切分方式。
WordPiece 通过 将单词拆解为更小的子词单元(word‑pieces),在保持信息完整的前提下显著压缩词表大小。
2. 算法流程(概览)
步骤 | 说明 |
---|---|
① 初始化词表 | 以所有出现的 单字符 为基础词表,同时加入模型需要的特殊标记(如 [CLS]、[SEP]、[UNK] )。 |
② 语言模型训练 | 使用当前词表对训练语料构建 语言模型(通常是最大似然的 n‑gram 或神经语言模型),为后续的合并提供概率评估。 |
③ 计算候选合并对的得分 | 对词表中每一对相邻子词,计算 加入该合并后对训练数据似然性的提升(即概率增益),而不是仅依据出现频率。 |
④ 选择最佳合并 | 选取 增益最大的子词对 进行合并,生成新的子词并加入词表。 |
⑤ 重复迭代 | 重复步骤③‑④,直至达到预设的词表规模或增益阈值停止。 |
⑥ 分词阶段 | 对新句子进行 最长匹配(greedy)切分:从单词左侧开始,寻找词表中最长的子词,若子词不是词首则在前面加 ## 前缀,以标记它是后续片段。 |
3. 与 BPE 的区别
维度 | WordPiece | BPE |
---|---|---|
合并准则 | 基于 语言模型似然增益(概率最大化) | 基于 出现频率最高的字符对 |
是否保存合并规则 | 只保留 最终词表,分词时采用 最长匹配 | 同样只保留词表,但合并规则可用于逆向解码 |
未知词处理 | 若子词不存在,则整个词标记为 [UNK] ,但通过子词拆分可显著降低 [UNK] 率 |
类似,亦会产生 [UNK] ,但频率最高的合并可能导致更粗糙的切分 |
实现细节 | 采用 概率模型,对低频子词有更细致的控制 | 更直接、实现简单,适合快速实验 |
4. 实际应用
- BERT 系列:BERT、DistilBERT、MobileBERT、Funnel‑Transformer、MPNet 等均使用 WordPiece 作为默认 tokenizer。
- 机器翻译:在 Google 的神经机器翻译系统中,WordPiece 通过子词切分提升了对低资源语言的适配能力。
- 多语言模型:WordPiece 能在不依赖空格的语言上直接工作,适用于跨语言预训练模型(如 XLM‑R)。
5. 示例
以英文单词 “unhappiness” 为例,使用 BERT 的 WordPiece 词表进行切分:
un ##happi ##ness
un
、##happi
、##ness
均在词表中,前缀##
表示它们是 后续子词,这样即使完整单词未出现,也能通过已知子词表达其含义。
6. 优势总结
- 词表规模可控:通过概率驱动的合并,能够在数万到数十万的词表大小内覆盖大多数语言现象。
- 降低 OOV 率:子词拆分使得几乎所有词都能被表示,提升下游任务的鲁棒性。
- 语言无关:不依赖空格或特定语言特征,适用于多语言或低资源语言。
- 兼容 Transformer:子词序列长度适中,便于 Transformer 的位置编码和并行计算。
结论
WordPiece 是一种基于 语言模型似然最大化 的子词分词技术,兼具 高效词表压缩 与 强大 OOV 处理 能力,已成为 BERT 及其衍生模型的核心 tokenizer,并在机器翻译、跨语言预训练等多个 NLP 场景中发挥关键作用。
声明:文章均为AI生成,请谨慎辨别信息的真伪和可靠性!