WordPiece 详解与示例

发布于:2025-04-18 ⋅ 阅读:(17) ⋅ 点赞:(0)

在这里插入图片描述

WordPiece详解

1. 定义与背景

WordPiece 是一种子词分词算法,由谷歌于2012年提出,最初用于语音搜索系统,后广泛应用于机器翻译和BERT等预训练模型。其核心思想是将单词拆分为更小的子词单元(如词根、前缀/后缀),从而解决传统分词方法面临的词汇表过大未知词(OOV)处理难题。例如,在BERT中,WordPiece通过子词拆分实现了对复杂词汇的灵活处理。

2. 核心原理与算法步骤

WordPiece 的流程可分为以下步骤:

a. 初始化与预分词

  • 初始词汇表:从基础字符(如字母、汉字)开始,并添加特殊标记(如[UNK]表示未知词)。
  • 预分词:将文本按空格或标点分割为单词,例如将句子“hugging face”拆分为["hugging", "face"]

b. 子词拆分与合并规则

  • 拆分前缀:每个单词的非首字符添加前缀(如##),例如“word”拆分为["w", "##o", "##r", "##d"]
  • 合并策略:基于互信息分数选择合并的子词对,公式为:
    score = 词对频率 首子词频率 × 次子词频率 \text{score} = \frac{\text{词对频率}}{\text{首子词频率} \times \text{次子词频率}} score=首子词频率×次子词频率词对频率
    优先合并低频但共现频繁的子词对,以最大化训练数据的似然概率。

c. 迭代构建词表
重复合并最高得分的子词对,直至达到预设的词汇表大小或似然增益低于阈值。

3. 与BPE的对比

WordPiece 常与BPE(Byte-Pair Encoding)对比,二者关键差异如下:

特征 BPE WordPiece
合并标准 选择频率最高的子词对 选择使数据似然最大化的子词对
前缀处理 无特殊符号 非首字符添加##标记
应用场景 GPT-2、RoBERTa BERT、多语言模型
语言模型依赖 需预训练语言模型辅助评分

示例:对于词对("un", "happy"),若un出现100次,happy出现200次,且共现50次,则BPE直接合并(因共现频率高),而WordPiece计算得分为 50 / ( 100 × 200 ) = 0.0025 50/(100×200)=0.0025 50/(100×200)=0.0025,可能因分数低而不合并。

4. 实际应用案例
  • BERT模型:WordPiece是BERT默认的分词器,通过处理长尾词汇(如“unhappiness”拆为["un", "##happiness"])提升模型泛化能力。
  • 机器翻译:将罕见词(如德语复合词“Donaudampfschifffahrtsgesellschaft”)拆分为子词,避免OOV问题。
  • 多语言模型:mBERT使用WordPiece支持104种语言,通过共享子词实现跨语言迁移。
  • 中文处理:虽然中文以字为单位,但WordPiece仍用于拆分专有名词(如“BACE1”拆为["BA", "##CE", "##1"])。
5. 具体分词示例

网站公告

今日签到

点亮在社区的每一天
去签到