第一篇:BPE算法(附加)

Posted flying_1314

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第一篇:BPE算法(附加)相关的知识,希望对你有一定的参考价值。

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算法(附加)的主要内容,如果未能解决你的问题,请参考以下文章

BPE算法

深度学习系列28:BPE分词模型

带有神秘附加字符的 Javascript Date getTime() 代码片段

第一篇排序算法|冒泡排序

java 简单的代码片段,展示如何将javaagent附加到运行JVM进程

如何在屏幕方向更改时附加片段?