翻译任务中的BPE词表实践总结

3 篇文章 0 订阅
3 篇文章 0 订阅

翻译任务中的BPE词表实践总结

BPE是一种数据压缩算法,使用句子中的常见子词(Subword)来编码数据,其粒度处于字符和单词粒度之间,例如给定单词"looked"和"looking",BPE词表往往会划分出"look","ed”,"ing"这些子词部分,在降低词表大小的同时也能有效编码词义信息。
BPE分词可以很好地平衡词表大小和编码运算复杂度的关系。BPE算法包括词表构建、编码和解码三个主要部分,由于网上已经有很多相关介绍,本文对一些细节问题做一些总结和说明。

词表构建

BPE词表的构建需要以下几个条件:

  1. 充足的无监督语料;
  2. 词表大小size值;
  3. 每个句子的句尾或句首需要添加标识(如’w’或’\w’)。

词表构建时的注意事项:

  1. 带有首尾标记符的子词不能与不带标记符的子词混合计算,因为首尾标记符的目的是统计子词在句首或句尾的分布情况;
  2. 如果某个子词是另一个大子词的一部分,即语料中没有出现该子词单独出现时的情况,则大子词合并后需要将该子词删除。算法迭代时可以对比子词和大子词的频率是否相等,相等说明需要删除,否则就有子词单独出现的情况;
  3. 阈值的选择非常重要,阈值过高可能忽略关键子词,阈值低可能将不相关子词也计入词表,容易造成类似“过拟合”的情况,也会使Word Embedding更加稀疏,不设定阈值时,默认当前切分状态下子词频率都为1时终止,即使词表大小不够。

子词编码

子词编码按如下原则进行:最长匹配,且同长度高频匹配。具体流程如下:

  1. 遍历句子的每一个字符,在词表中寻找以该字符起始的最长匹配子词(注意分首尾);
  2. 找到所有最长匹配字词后,如果这些切分没有歧义(即分段没有交集),则直接切分并将剩下部分继续解码,如果存在歧义则保留频率高的切分
  3. 如果当前字符在词表中没有找到对应值,则按未知词(unk)处理。
    使用上述字词编码方法,可以得到基于当前词表的子词切分序列,用于后续Tokenizer编码。切分后的序列在排除未知词后,也能与训练时训练集的切分状态保持一致。因而由上述算法也不难看出,BPE编码对分词歧义问题还是能有效避免的。

子词解码

按照编码id逐一在词表中查询,句首和句尾的id在匹配出位于句首或句尾的子词后,需要添加空格等分界符。
有关句首和句尾的规则,这里做进一步的说明:
一个词在句中的位置有四种情况:B(句子起始)、M(句中)、E(句子结尾)和S(单独出现)。
如果词表构建时加了句首标记(continuing_subword_prefix),则B、S为一个子词(在词表中一般加前缀‘##’),M、E为另一个子词。
如果词表构建时加了结尾标记(end_of_word_suffix),则E、S为一个子词,B、M为另一个子词。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BPE是字节对编码(Byte Pair Encoding)的缩写。它是一种学习提供的空格分隔文本的词汇和字节对编码的方法。该方法通常在生产用例使用。可以使用以下命令行代码进行安装和导入: ``` $ python3 -m pip install --user bpe from bpe import Encoder ``` 引用提供了一个示例,并展示了如何使用BPE进行文本编码。 引用展示了如何使用统计词频的方法来获取文本的词汇表。代码会根据空格将文本分割成单词,并统计每个单词出现的次数。 引用则提示我们可以使用基本的BPE代码进行实践,从最基本的数据预处理开始,到最后实现一句话的简单分词。 所以,通过使用PythonBPE库,我们可以进行字节对编码,并通过统计词频来获取文本的词汇表。这些方法可以帮助我们实现文本的编码和分词任务。<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、付费专栏及课程。

余额充值