在机器翻译中,目前都采用的方法是bpe切分子词的方法来处理翻译中的未登录词。
如何使用?
https://github.com/rsennrich/subword-nmt这里面已经写了详细的方法,本文主要记录我处理中英语料时的步骤。
1.共享词典
直接clone了这个项目,但是没有安装的情况下,我们使用python命令来处理。否则参考原文给出的命令处理语料。
如果我们进行翻译的双语是共享字母表的,那么我们可以为这两种语言建立一个共享词典,比如:
python subword-nmt/learn_joint_bpe_and_vocab.py --input corpus.tc.en corpus.tc.de -s 32000 -o bpe32k --write-vocabulary vocab.en vocab.de
通过上述方法我们可以得到bpe32k这个子词词表和 vocab.en,vocab.de的双语词典(里面是这两种语言的子词及其出现的频率)
接下来我们使用以下命令来对双语的语料进行subword切分处理,以下是对训练集进行处理,我们使用相同的命令来对验证集和测试集进行处理。
python subword-nmt/apply_bpe.py -c bpe32k --vocabulary vocab.en --vocabulary-threshold 50 < corpus.tc.en > corpus.bpe32k.en
python subword-nmt/apply_bpe.py -c bpe32k --vocabulary vocab.de --vocabulary-threshold 50 < corpu