尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Subword-Based Tokenization策略之BPE与BBPE - 指南

Subword-Based Tokenization策略之BPE与BBPE - 指南
📅 发布时间:2026/6/19 20:00:23

在NLP中,Subword算法用于将单词拆分为更小的语义单元,也就是子词,以解决OOV和数据稀疏性问题。

1、BPE

Byte-Pair Encoding,字节对编码

核心思想:词频统计,词表合并

步骤:

  1. 初始化词汇表为所有基础字符。

  2. 统计相邻符号对的频率,合并最高频的对。

  3. 重复合并直到达到预设的词汇表大小或迭代次数。

案例:

语料 = ["low low low", "lower lower", "newest newest", "wider"]

设置迭代次数为2

初始化词汇表:{l,o,w,,e,r,n,s,t,i,d,/w}

统计相邻符号对
low:lo (3) ,ow(3)  w</w>(3)

lower:lo (2) ,ow(2) ,we(2),er(2),r</w>(2)

newest:ne(2),ew(2),we(2),es(2),st(2),t</w>(2)

wider:wi(1),id(1),de(1),er(1),r</w>(1)

最高频的对:lo(3+2) ,ow(3+2) 

在 BPE(Byte Pair Encoding)算法中,当多个字符对频率相同时,选择哪个先合并,没有唯一标准,但通常采用“字典序优先”或“任意选择”。

这个选择会影响最终的子词单元构成,但影响通常是局部的、有限的,在大规模语料中趋于稳定。

这里选择lo

更新词汇表:{l,o,w,,e,r,n,s,t,i,d,</w>,lo}

得到规则:l + o = lo

进入下一次迭代

第二次统计符号对:

low:low (3) ,w</w>(3)

lower:low(2) ,we(2),er(2),r</w>(2)

newest:ne(2),ew(2),we(2),es(2),st(2),t</w>(2)

wider:wi(1),id(1),de(1),er(1),r</w>(1)

最高频的子词:low(3+2)

更新词汇表:{l,o,w,,e,r,n,s,t,i,d,</w>,lo,low}

得到规则:lo + w = low

结束迭代

得到最终词汇表:{l,o,w,e,r,n,s,t,i,d,</w>,lo,low}

存在的问题
  • 基本词汇表需要包含所有可能的基本字符,可能相当大.

  • 比如所有Unicode中文字符都被视为基本字符的话,有 10w+。

2、BBPE

Byte-Level Byte-Pair Encoding,BPE的字节级扩展版本,主要用于处理多语言 NLP 任务。

BBPE vs. BPE
特性BPEBBPE
处理单位字符或子词字节、UTF-8编码
适用语言适用于空格分隔语言适用所有语言
OOV 处理仍可能遇到OOV几乎不会有 OOV 问题
存储开销词表较小词表较大,但更具泛化能力

工作原理:原理和BPE一致,只是使用字节(byte)作为初始token,适用于任何文本。

案例:        

语料:深度学习需要一定的学习深度

预处理

首先将句子转换为UTF-8编码的字节序列,十进制表示:

230 183 177 229 186 166 229 173 166 228 185 176 233 156 128 232 166 129 228 184 128 229 174 154 231 154 132 229 173 166 228 185 176 230 183 177 229 186 166
 初始化词汇表

初始词汇表为所有唯一的字节 0-255,但此处仅包含语料中出现的字节:

{128, 129, 132, 154, 156, 166, 171, 173, 174, 177, 183, 184, 185, 186, 228, 229, 230, 231, 232, 233}
初始分词结果

每个字节单独成词

230 183 177 | 229 186 166 | 229 173 166 | 228 185 176 | 233 156 128 | 232 166 129 | 228 184 128 | 229 174 154 | 231 154 132 | 229 173 166 | 228 185 176 | 230 183 177 | 229 186 166
统计字节对频率

遍历所有相邻的字节对,统计出现频率:

字节对频率
(230, 183)2
(183, 177)2
(229, 186)2
(186, 166)2
(229, 173)1
......
合并最高频字节对

选择频率最高的字节对进行合并,如 (230, 183)。 合并操作:

  • 将 230 \:\: 183 替换为新符号 230\_183。

  • 为该符号新分配一个ID,如 256。

  • 更新词汇表:新增 256 = 230\_183。

  • 此时,我们可以更新分词结果了

    256 177 | 229 186 166 | 229 173 166 | 228 185 176 | 233 156 128 | 232 166 129 | 228 184 128 | 229 174 154 | 231 154 132 | 229 173 166 | 228 185 176 | 256 177 | 229 186 166
迭代合并

重复统计和合并,直到达到预设的合并次数或词汇表大小。

第二次合并:

  • 统计当前字节对频率,如 (256, 177) 出现 2 次。

  • 合并 256 \:\: 177 为新符号 257 = 256\_177。

更新后的分词结果:

257 | 229 186 166 | 229 173 166 | 228 185 176 | ... | 257 | 229 186 166

第三次合并:

  • 合并 (229, 186)。

  • 新符号 258 = 229\_186。

更新后的分词结果:

257 | 258 166 | 229 173 166 | 228 185 176 | ... | 257 | 258 166
 最终词汇表

经过多次合并后,词汇表会包含初始字节和常见组合:

  • 初始字节:230, 183, 177, 229, 186, ...

  • 合并后的符号:

    • 256 = 230\_183

    • 257 = 256\_177

    • 258 = 229\_186

    • 259 = 258\_166

符号的层级关系

如 257 = 256\_177,而 256 = 230\_183,因此 257 实际表示 230\_183\_177,即完整的"深"的UTF-8字节序列。

编码示例

原始句子编码为:

257 259 | 229 173 166 | 228 185 176 | ... | 257 259

其中 257 表示"深",259 表示"度"

当然了,(257, 259) 出现 2 次,下一步合并 (257, 259) → 新符号 260 = 257\_259,即"深度"的完整Token。

所以,这怎么可能会出现 OOV 的问题?

相关新闻

  • 基于springboot志愿服务管理系统设计与搭建(附源码)
  • /etc/systemd/system和/lib/systemd/system的区别 - Leone
  • 详细介绍:LSTM与GRU:解决RNN梯度消失问题的利器(含代码)

最新新闻

  • 武汉买猫买狗去哪看?梦宠山庄实地体验分享 - 园友3800037
  • 从零到一:Jetlinks物联网平台服务器部署实战与避坑指南
  • (转)一次ANSYS EM 2023R1 “Request name electronics_desktop does not exist in the licensing pool.“的离谱解决记录
  • 面试被问“你的缺点是什么”,90%的应届生都答错了!(附满分话术)
  • Spring Cloud Alibaba 最佳实践:基于 Spring Boot 4.0 的完整微服务示例项目
  • 三步掌握AI斗地主:如何用DouZero智能助手提升你的游戏胜率

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号