当前位置: 首页 > article >正文

BPE、WordPiece 与 Unigram:三种主流子词分词算法对比

BPE、WordPiece 与 Unigram:三种主流子词分词算法对比

在构建现代自然语言处理模型时,Tokenizer 是连接文本与模型之间的桥梁。而在 tokenizer 的设计中,BPE(Byte Pair Encoding)、WordPiece 和 Unigram 三种子词(subword)分词算法是最常见的实现方式。本文将系统地介绍这三种方法的原理、特点以及适用场景,帮助读者更好地理解它们在大模型训练中的地位。

一、为什么需要子词(Subword)分词?

自然语言中的词汇是开放的,新词层出不穷。如果使用“词级分词”,会导致词表非常庞大,且容易出现 OOV(词表外)问题。而“字符级分词”虽然不需要大词表,但会导致序列过长,模型难以捕捉有用语义。

子词分词正好居中:通过将文本拆成较短、可组合的单元(如词根、词缀、常见组合),既减少了 OOV,又能有效压缩 token 数量,是目前大语言模型的主流选择。


二、BPE(Byte Pair Encoding)

原理:

BPE 是一种基于频率的贪心合并算法。

  1. 初始词表为所有字符。
  2. 每轮找出最常见的相邻 token 对(如 “天”+“气”),合并成一个新 token。
  3. 重复,直到词表达到预定大小(如 32,000)。

特点:

  • 拆词方式唯一,贪心合并。
  • 训练快、实现简单。
  • 对高频组合词(如 “人工智能”)压缩效果好。

应用:

GPT 系列、RoBERTa、Qwen 等模型。

示例(简化版):

语料:"天 气 真 好 天 气 真 好"

  1. 初始:['天', '气', '真', '好']
  2. 最频繁对:('天', '气') → 合并为 '天气'
  3. 继续合并:('真', '好') → 合并为 '真好'
    → 最终结果:['天气', '真好', '天气', '真好']

三、WordPiece

原理:

WordPiece 类似 BPE,但合并策略不是基于频率,而是基于语言模型的似然提升。

  1. 每轮尝试一个合并操作。
  2. 选择让训练语料 log-likelihood 增加最多的组合。
  3. 重复,直到词表达到目标大小。

特点:

  • 合并更“语言感知”,但训练慢。
  • 使用特殊符号表示子词拼接(如 “##ing”)。
  • 更适合英文场景。

应用:

BERT、DistilBERT 等模型。

示例(英文):

单词:"unhappiness"
拆分结果可能为:['un', '##happi', '##ness']
→ 带 ## 表示这是一个接续子词。


四、Unigram Language Model

原理:

Unigram 并不使用合并策略,而是假设一个大词表,保留其中概率最高的子词组合。

  1. 构造所有可能的子词候选。
  2. 初始化每个子词的概率。
  3. 用 EM 算法训练子词概率。
  4. 剪枝掉低概率子词,保留词表。

特点:

  • 多种分词路径可选,灵活性高。
  • 拆分不唯一,有更强的鲁棒性。
  • 特别适合多语言和小语种。

应用:

T5、mT5、ByT5、UL2 等模型。

示例:

语料:"今天真高兴"
候选分词路径可能有:

  • ['今天', '真', '高兴']
  • ['今', '天', '真', '高', '兴']
    Unigram 会保留概率最高的组合路径。

五、对比总结

特性BPEWordPieceUnigram
合并策略字符频率语言模型提升概率剪枝
拆分唯一性✅ 是✅ 是❌ 否
多语言支持中等较弱✅ 强
实现复杂度简单中等较复杂
常见应用模型GPT/QwenBERTT5/mT5/UL2

六、结语

BPE、WordPiece 和 Unigram 是构建高效、泛化性强的 tokenizer 的三种主流方法。它们在子词构建逻辑、鲁棒性、语言兼容性方面各有优势。在实际使用中,我们应结合模型类型、语种覆盖、资源限制等因素综合选择最合适的算法策略。

http://www.lryc.cn/news/2392154.html

相关文章:

  • 青少年编程与数学 02-020 C#程序设计基础 11课题、可视化编程
  • AI时代新词-AI驱动的自动化(AI - Driven Automation)
  • 整合Jdk17+Spring Boot3.2+Elasticsearch9.0+mybatis3.5.12的简单用法
  • Starrocks 物化视图的实现以及在刷新期间能否读数据
  • 前后端传输 Long 类型数据时(时间戳,雪花算法ID),精度丢失的根本原因
  • 探索容器技术:Docker与Kubernetes的实践指南
  • Ubuntu从0到1搭建监控平台:本地部署到公网访问实战教程Cpolar穿透与Docker部署全过程
  • vscode java debug terminal 中文乱码
  • 3D PDF如何制作?SOLIDWORKS MBD模板定制技巧
  • Qt DateTimeEdit(时间⽇期的微调框)
  • C# 类和继承(屏蔽基类的成员)
  • 基于qt5和stk10开发的互联调试
  • matlab雷达定位仿真
  • 基于vue框架的动物园饲养管理系统a7s60(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • MySQL 索引和事务
  • BERT分类器和朴素贝叶斯分类器比较
  • WPS自动换行
  • C#面向对象核心:类继承详解
  • maven中的grpc编译插件protobuf-maven-plugin详解
  • 服务发现Nacos
  • 社群分享:义乌|杭州电商|店群卖家,私域鱼塘运营的排单系统开源|私域鱼塘运营|返款软件开源
  • C#回调函数深度解析
  • 通义智文开源QwenLong-L1: 迈向长上下文大推理模型的强化学习
  • HTTP代理的实际用处有哪些?HTTP代理强在哪里?
  • 低代码——表单生成器以form-generator为例
  • 【Vue Vapor Mode :技术突破与性能优化的可能性】
  • Parasoft C++Test软件单元测试_常见问题及处理
  • vue渲染数组各子项实现文本超出宽度显示tooltip
  • libreoffice容器word转pdf
  • AI模型升级与机器人产业落地同步推进