字节对编码BPE

参考论文:

Rico Sennrich, Barry Haddow, and Alexandra Birch.2016. Edinburgh neural machine translation systems for wmt 16. arXiv preprint arXiv:1606.02891.

Rico Sennrich, Barry Haddow,and Alexandra Birch. 2016b. Neural Machine Translation of Rare Words with Subword Units. In
Proceedings of the 54th Annual Meeting of the Association for Computational Linguistics (ACL 2016),Berlin, Germany.

Sennrich, Rico, Barry Haddow, and Alexandra Birch. "Improving neural machine translation models with monolingual data." arXiv preprint arXiv:1511.06709 (2015).

参考博客:

https://cloud.tencent.com/developer/article/1089017

 

首先了解一下BPE算法

BPE,(byte pair encoder)字节对编码,也可以叫做digram coding双字母组合编码,主要目的是为了数据压缩,算法描述为字符串里频率最常见的一对字符被一个没有在这个字符中出现的字符代替的层层迭代过程。具体在下面描述。该算法首先被提出是在Philip Gage的C Users Journal的 1994年2月的文章“A New Algorithm for Data Compression”。

算法过程

这个算法个人感觉很简单,下面就来讲解下:

比如我们想编码:

aaabdaaabac

我们会发现这里的aa出现的词数最高(我们这里只看两个字符的频率),那么用这里没有的字符Z来替代aa:

ZabdZabac

Z=aa

此时,又发现ab出现的频率最高,那么同样的,Y来代替ab:

ZYdZYac

Y=ab

Z=aa

同样的,ZY出现的频率大,我们用X来替代ZY:

XdXac

X=ZY

Y=ab

Z=aa

最后,连续两个字符的频率都为1了,也就结束了。就是这么简单。

解码的时候,就按照相反的顺序更新替换即可。

 

在机器翻译中,对英文单词进行编码时,可以考虑使用这种方法进行压缩。(汉语中,utf-8中字被编码为3个byte,也可以看成类似的编码)于是,就有人这么干了

Sennrich大神在WMT16中对字节对编码是这么用的:

First, each word in the training vocabulary is represented as a sequence of characters, plus an end-of-word symbol. All characters are added to the symbol vocabulary. Then, the most frequent symbol pair is identified, and all its occurrences are merged, producing a new symbol that is added to the vocabulary. The previous step is repeated until a set number of merge operations have been learned.
貌似没什么高深的地方。

插一句,在汉语的翻译中,自从引入了BPE编码以后,各种诡异的字符也是越来越多了。

 

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BPE字节对编码(Byte Pair Encoding)的缩写。它是一种学习提供的空格分隔文本的词汇和字节对编码的方法。该方法通常在生产用例中使用。可以使用以下命令行代码进行安装和导入: ``` $ python3 -m pip install --user bpe from bpe import Encoder ``` 引用提供了一个示例,并展示了如何使用BPE进行文本编码。 引用展示了如何使用统计词频的方法来获取文本的词汇表。代码会根据空格将文本分割成单词,并统计每个单词出现的次数。 引用则提示我们可以使用基本的BPE代码进行实践,从最基本的数据预处理开始,到最后实现一句话的简单分词。 所以,通过使用Python中的BPE库,我们可以进行字节对编码,并通过统计词频来获取文本的词汇表。这些方法可以帮助我们实现文本的编码和分词任务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python-bpe:Python的字节对编码!](https://download.csdn.net/download/weixin_42166626/15015483)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [彻底搞懂BPE(Byte Pair Encode)原理(附代码实现)](https://blog.csdn.net/qq_41020633/article/details/123622667)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值