BPE论文解读

Posted yealxxy

tags:

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

论文:Neural Machine Translation of Rare Words with Subword Units
https://github.com/rsennrich/subword-nmt

1,一般的词库生成方式:提出问题

  • 词库生成方法:在做nlp的时候,对语料生成词库。为了不让字典太大,我们通常只会把出现频次大于某个阈值的词丢到字典里边,剩下所有的词都统一编码成#UNK。
  • 问题:这种方法不能解决未登录词的问题。未登录词是指在验证集或测试集出现了训练集从来没见到过的单词。这种未登录词对****分词,机器翻译性能影响很大。

2,bpe想法

  • 设想:即不同的词可以通过比词更小的单位进行翻译。(复合词,外来词等等,这些即使没见过,但是翻译工作者仍然可以根据词根等信息进行翻译)
  • 思想:综合word-level和char-level的优势,从语料中学习到所有词里边 频次高的 字符串子串。然后把这些频次高的字符串子串收集起来形成一个字典。
  • 词典:既存在char-level级别的子串,也存在word-level级别的子串。然后把这个字典用于模型的训练。
  • 寻找频次高的子串方法:使用到了bytes-pair-encoding 算法,只不过是把子串进行encoding而已。这个算法也很简单:每次合并在语料中 同一个词里面、相邻的、出现频率最高的两个子串。decoding的时候,根据生成的voc 做相应的替换。

3,bpe算法:

  • 首先,我们用字符词汇表初始化符号词汇表,并将每个单词表示为字符序列,加上一个特殊的单词末尾符号“·”(结束符号用来还原翻译的结果)

  • 然后,迭代地计算所有符号对,并用一个新的符号“AB”替换最频繁出现的每个符号对(“A”、“B”)

  • 最终的符号词汇量大小等于初始词汇量的大小,加上合并操作的数量——合并操作是算法的唯一超参数。

  • 在测试时,首先将单词分割成字符序列,然后应用所学的op(操作)将字符合并成更大的、已知的符号。这适用于任何单词,并且允许使用固定符号词汇表的开放词汇表网络。

  • 两种应用BPE的方法:学习两种独立的编码,一种用于源,一种用于目标词汇,或者学习两种词汇的联合编码(我们称之为联合BPE)。(前者的优点是在文本和词汇量方面更紧凑,并且在各自语言的训练文本中每个子单词单元都有更强的保证,而后者提高了源和目标分割之间的一致性。如果我们独立地应用BPE,同一名称在两种语言中可能被分割成不同的部分,这使得神经模型更难学习子单词单元之间的映射。)

4,bpe应用在机器翻译里

  • 首先,生成词库。code.file会保存每次编码的过程,用于解码语料,对语料按照voc.txt词库进行分割。
    subword-nmt learn-joint-bpe-and-vocab -i .\\en.txt -o .\\code.file --write-vocabulary voc.txt

  • 其次,对语料进行解码。
    subword-nmt apply-bpe -i .\\en.test.txt -c .\\code.file -o result.txt

  • 嵌入到机器翻译中
    如果需要把bpe使用到神经网络中,很简单 使用subword-nmt apply-bpe 对输入语料进行解码得到decode.txt,然后在程序载入subword-nmt生成的字典voc.txt。然后按照机器翻译正常处理语料的套路来做即可:读入decode.txt的每个单词,查找它在voc.txt的字典中的编号。

5,使用bpe的结果

  • 对于罕见词的翻译效果要好
  • 这是前几年的研究了,这个方向也有进一步的发展。

以上是关于BPE论文解读的主要内容,如果未能解决你的问题,请参考以下文章

Glove 原理详细解读

论文解读-SIMPLE BUT TOUGH-TO-BEAT BASELINE FOR SENTENCE EMBEDDINGS

论文解读-SIMPLE BUT TOUGH-TO-BEAT BASELINE FOR SENTENCE EMBEDDINGS

论文解读-SIMPLE BUT TOUGH-TO-BEAT BASELINE FOR SENTENCE EMBEDDINGS

论文解读从可扩展的远程情感监督构建的附有结构和主次标记的MEGA RST 篇章树库

论文泛读67渐进式预训练密集语料库索引用于开放域问答