BPE,byte-pair encoding 字节对编码算法。主要目的是为了数据压缩,算法描述为字符串里频率最常见的一对字符被一个没有在这个字符中出现的字符代替的层层迭代过程。

该算法在NLP的很多模型中有使用。为什么呢?比如单词,low和lowest,这两个单词都表示低的意思。但是如果我们以词为单位,那它们就算不一样的词,在英语中不同后缀的词非常的多,就会使得词表变的很大,训练速度变慢,训练的效果也不是太好。BPE算法可以实现,将low和lowest拆分成 low,est这两部分。

这样可以把词的本身的意思和词的形态变化部分分开,有效的减少了词表的数量。算法流程如下:

  1. 设定最大 subwords 个数 V,也就是你最后希望有多少个子词
  2. 将所有单词拆分为单个字符,并在最后添加一个结束符 _,同时标记出该单词出现的次数。例如,"low" 这个单词出现了 5 次,那么它将会被处理为 {'l o w _': 5}
  3. 统计连续字节对出现的频率,选择出现频率最高的进行合并出新的subword
  4. 重复第三步,直到subwords的个数为V或者最高频率为1时

举例简单说明:

[5] l o w _
[2] l o w e s t _
[6] n e w e r _
[3] w i d e r _
[2] n e w _

其中[5] low_的5代表该单词出现次数,_代表结束符。

subwords vocabulary
initial  _, d, e, i, l, n, o, r, s, t, w
epoch 1 _, d, e, i, l, n, o, r, s, t, w, r_(因为r_出现9次)
epoch 2 _, d, e, i, l, n, o, r, s, t, w, r_, er_
epoch 3 _, d, e, i, l, n, o, r, s, t, w, r_, er_, ew
epoch 8(中间省略) _, d, e, i, l, n, o, r, s, t, w, r_, er_, ew, new, lo,
low, newer_, low_

在这个过程中会融合很多对字节对,并且我们可以看到这个vocabulary的大小在快速增长。出现频率较高的单词大部分会被表示成单词本身,相反出现少的可能会被表示成subwords。最坏的情况下,每个单词都被分成单个字母了。此处我们只训练了8轮,为了简单,大家可以训练很多次,那么训练后的成果就是这个新的subwords vocabulary,然后可以应用到一些测试的text中去,表示一个单词。

结束符 _ 的意义在于表示 subword 是词后缀。举例来说:st 不加 _ 可以出现在词首,如 st ar;加了 _ 表明改字词位于词尾,如 wide st</w>,二者意义截然不同.

今天关于BPE的部分就到这里结束,感谢大家观看,有任何问题,欢迎随时评论探讨。

第一篇:BPE算法(附加)相关推荐

  1. matlab温度数据怎么滤波_卡尔曼滤波算法思想理解 Kalman filter 第一篇

    卡尔曼滤波算法思想理解 Kalman filter 第一篇 最近在初步的理解目标跟踪的领域, 其中一个非常经典的算法卡尔曼滤波Kalman filter是需要有很好的理解才行, 由于已经脱离了学校,懂 ...

  2. 信息学奥赛一本通 提高篇 第一部分 基础算法 第2章 二分与三分

    信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分 信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分_mrcrack的博客-CSDN博客_信息学奥赛一本通 ...

  3. 第一篇 Frankle-Mccan去雾算法

    因为对图像处理感兴趣,就去本部蹭了丁老师的<数字图像处理>课程,感觉比自学效率高多了: 业余时间打算把课上部分代码实现,于是就有了这个博客:这里会不定期更新一些基础算法,大都是老师课上讲的 ...

  4. ROB 第一篇 DFS BFS (寻迹算法)

    ROB 第一篇 DFS & BFS DFS & BFS 简单介绍 原理 DFS BFS 总结 DFS & BFS 简单介绍 DFS (depth first search) 和 ...

  5. matlab实现鬼波信号压制算法(附鬼波算法压制工具包)  代码实践--第一篇 频率-空间域自适应鬼波压制

    matlab实现鬼波信号压制算法(附鬼波算法压制工具包)  代码实践 涵盖了频率-空间域.频率-波数域.拉东域鬼波压制算法     建议实践之前熟练掌握各个域鬼波压制方法的原理,才能对代码有更深入的了 ...

  6. 决策树经典算法ID3——我的第一篇博客

    简介 决策树是机器学习中一种常见的分类算法,属于有监督学习算法(至于什么是有监督学习,什么是无监督学习读者可以自行百度).决策树算法有多种,ID3算法是其中一种经典的决策树算法,这种算法的核心是信息熵 ...

  7. open62541 (R 1.1.2)中文文档 (译文)第一篇 (1 - 5)

    open62541(R 1.1.2) 文档 注:原文PDF文档 是从官网下载的 Linux64bit的发布版本中自带的文档,原PDF中的源代码用PDF浏览器查看,有残缺.需要结合源文件中的示例代码进行 ...

  8. 自己动手实现蓝牙MESH应用系列 | 第一篇:蓝牙MESH基础概念介绍

    文章目录 1. 前言 2. 概述 2.1. 蓝牙风格(Flavors) 2.2. mesh网络的动机 2.3. mesh网络中的消息传输方式 2.3.1. 以消息为中心的通信 - 发布/订阅(publ ...

  9. 属于窄带噪声的是热噪声_时钟201系列: 非相位噪声的情况 (第一篇)

    欢迎来到Silicon Labs(亦称"芯科科技")的新系列博客文章"时钟201"的第一篇内容-非相位噪声的情况-第一部分.我们之前的系列博文"时钟1 ...

最新文章

  1. 【杂谈】深度学习必备,各路免费爬虫一举拿下
  2. Spring MVC控制器用@ResponseBody声明返回json数据报406的问题
  3. 主管问我:你以为单元测试,只是测试吗?
  4. index mysql_mysql 原理~ index的详解
  5. 读书笔记:javascript高级程序设计
  6. python语言的特点强制可读_python程序语言设计第二讲(笔记)
  7. 神经网络十大学习率衰减提效策略!
  8. centos7修改命令行或图形界面启动模式
  9. python管理后台框架_python3 django layui后台管理开源框架分享(码云)
  10. STM32CAN总线协议讲解
  11. 广袤之中:沿着克拉克三大定律,读懂华为的最深期待
  12. 程序员微信名昵称_推荐几个高逼格的微信昵称?
  13. python tkinter.Text 高级用法 -- 设计功能齐全的文本编辑器
  14. linux系统子接口配置文件,linux配置子接口
  15. GitHub的使用方法
  16. C#扩展(2):Random的扩展
  17. Ubuntu下用C++调用opencv实现点阵字
  18. 真!无钥匙!数字钥匙在智能电动车领域的实践
  19. HTTP请求错误码大全
  20. b450支持服务器内存,微星b450迫击炮内存兼容列表 板子是微星迫击炮b450配什么内存条好...

热门文章

  1. CVPR 2019 | 惊艳的SiamMask:开源快速同时进行目标跟踪与分割算法
  2. 公开课 | 微信高级研究员解析深度学习在NLP中的发展和应用
  3. 李飞飞团队最新论文:如何对图像中的实体精准“配对”?
  4. 昨天,JetBrains 推出“下一代 IDE”,快看有哪些值得期待的功能!
  5. 9种不同的方法帮助你提高国内访问Github的速度!
  6. 面试必备:一个秒杀系统的设计思考
  7. 一套基础自动化部署搭建过程
  8. 【廖雪峰python入门笔记】dict
  9. 自称“房奴”的博士靠开店卖SCI论文10年盈利近百万,论文买卖你怎么看?
  10. 南大新规:博士生在公众号发文且阅读量超1万即可参评国奖!