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论文解读的主要内容,如果未能解决你的问题,请参考以下文章
论文解读-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