使用Moses脚本进行数据预处理
文章将介绍在机器翻译时需要使用到的数据预处理方法,包括tokenize、truecase、bpe等等,好的预处理方法才能提升机器翻译的质量。下文会以en-de双语为例进行讲解。
Moses
这是Moses的github地址,它是一个统计机器翻译模型,我们主要使用里面的perl脚本进行数据预处理。所以确保电脑上已经安装配置好了perl(ubuntu自带)。
Normalize punctuation
其实我也不太懂这个操作,规范化标点?
perl dir_name/mosesdecoder/scripts/tokenizer/normalize-punctuation.perl -l en < data/train.en > data/train.norm.en
其中-l en
是选择语言,同样例如德语:de等等。同样的操作应用于校验集和测试集。
Tokenizer
分词,同样对校验集和测试集做同样的操作。
perl dir_name/mosesdecoder/scripts/tokenizer/tokenizer.perl -a -l en < data/train.norm.en > data/train.norm.tok.en
Clean corpus
控制句子有效长度,将数据集中过长的句子删掉。例如设置有效长度在1~80个单词之间。
perl path/to/mosesdecoder/scripts/training/clean-corpus-n.perl data/train.norm.tok en de data/train.norm.tok.clean 1 80
这样会同时将双语语料进行操作,生成两个处理后的文件train.norm.tok.clean.en和train.norm.tok.clean.de。
Truecase
Truecase不同于lowercase,lowercase相当于把数据中所有的字母小写,而truecase则会学习训练数据,判断句子中的名字、地点等需要大写的内容并将其保留,其余则小写,提升翻译时候的准确性。
- 需要训练一个truecase模型。注意:只能使用训练集训练truecase模型。
perl path/to/mosesdecoder/scripts/recaser/train-truecaser.perl -corpus data/train.norm.tok.clean.en -model path/to/truecase-model.en
- 应用apply:将训练得到的英语truecase模型应用到训练集、校验集和测试集的英文上。
perl dir_name/mosesdecoder/scripts/recaser/truecase.perl -model path/to/truecase-model.en < data/train.norm.tok.clean.en > data/train.norm.tok.clean.tc.en
同样德语也需要训练一个truecase模型。
BPE
这是subword mt的一种思想,将单词进行bpe编码,来自论文
Neural Machine Translation of Rare Words with Subword Units
开源代码在这里。https://github.com/rsennrich/subword-nmt
bpe将原有的单词拆解成了更小单元的高频词进行翻译,有效的解决了未登录词的问题。
BPE 方法拆解成子字单元的具体效果可以通过下面的例子来进行说明:
- he is a good boy .
- h@@ e is a g@@ o@@ o@@ d b@@ oy .
我们使用里面的python脚本对数据进行处理。
- 同样需要对英语和德语进行学习bpe模型。
python path/to/subword_nmt/learn_bpe.py -s 10000 < data/train.norm.tok.clean.tc.en > data/codes.en
-s 后接着的是bpe operations操作的次数,这里设置为10000。同样只对训练集进行训练
- apply:在训练集、校验集和测试集上进行应用。
python path/to/subword_nmt/apply_bpe.py -c data/codes.en < data/train.norm.tok.clean.tc.en > data/train.pre.en
【注意】翻译的时候使用的数据均是经过bpe编码的,因此翻译得到的result也是bpe后的,因此需要对result进行还原,还原回bpe之前的(即norm、tok、clean、tc处理后的)状态,再用它和bpe之前的 test.norm.tok.clean.tc.xxx
计算bleu值。
还原的方法:
cat result.bpe.de | sed -E 's/(@@ )|(@@ ?$)//g' > result.de
在ubuntu上不需要安装sed,windows需要。
BLEU 值的计算:
perl multi-bleu.perl test.norm.tok.clean.tc.de < result.de
使用Moses脚本进行数据预处理相关推荐
- moses中的数据预处理预处理操作
## normalize-punctuation.perl 对标点符号进行规范化 normalize normalize-punctuation.perl -l zh < train.zh &g ...
- moses(mosesdecoder)数据预处理BPE分词moses用法总结
mosesdecoder&BPE数据预处理 moses数据预处理 BPE分词 moses用法总结 moses数据预处理 源码链接: https://github.com/moses-smt/m ...
- 机器学习PAL数据预处理
机器学习PAL数据预处理 本文介绍如何对原始数据进行数据预处理,得到模型训练集和模型预测集. 前提条件 完成数据准备,详情请参见准备数据. 操作步骤 登录PAI控制台. 在左侧导航栏,选择模型开发和训 ...
- python游戏中调整箭头下落速度_入门 | 三行Python代码,让数据预处理速度提高2到6倍...
原标题:入门 | 三行Python代码,让数据预处理速度提高2到6倍 选自TowardsDataScience 作者:George Seif,机器之心编译 在 Python 中,我们可以找到原生的并行 ...
- 3行代码,Python数据预处理提速6倍
在 Python 中,我们可以找到原生的并行化运算指令.本文可以教你仅使用 3 行代码,大大加快数据预处理的速度. Python 是机器学习领域内的首选编程语言,它易于使用,也有很多出色的库来帮助你更 ...
- AI识虫:林业病虫害数据集和数据预处理方法
林业病虫害数据集和数据预处理方法 林业病虫害数据集和数据预处理 读取AI识虫数据集标注信息 数据读取和预处理 数据读取 使用百度与林业大学合作开发的林业病虫害防治项目中用到昆虫数据集.在这一小节中将为 ...
- android生成预处理文件,FFmpeg:Android利用Filter进行音频数据预处理
前言 这篇文件简单介绍下移动端Android系统下利用FFmpeg的Filter进行音频数据预处理的方法. 按照惯例先上一份源码 AndroidFFmpegFilter. 项目实现了: FFmepg编 ...
- 机器学习项目中的数据预处理与数据整理之比较
要点 在常见的机器学习/深度学习项目里,数据准备占去整个分析管道的60%到80%. 市场上有各种用于数据清洗和特征工程的编程语言.框架和工具.它们之间的功能有重叠,也各有权衡. 数据整理是数据预处理的 ...
- 数据集准备及数据预处理_1.准备数据集
数据集准备及数据预处理 In this post I will introduce an example of how to upgrade legacy tensorflow codes to ne ...
最新文章
- 一个硬中断的完整处理过程【转】
- Linux下mysql主从配置
- 一篇文章了解Github和Git教程-AndroidStudio上传Github教程
- 图片裁剪功能学习小结
- servlet指定时间到现在过了多久_就喝一瓶啤酒,多久能开车?交警:过了这个时间,100%没问题...
- 如何实现模糊查询LIKE
- 低代码发展专访系列之一:低代码平台产品的使用者都是谁?
- cent os mysql图形界面_cent os 6.4安装使用mysql
- Java讲课笔记04:变量与常量
- 请求url处理java_【脚本写作】Java: HttpURLConnection请求处理
- 中国的第一座基站,你知道在哪吗?
- 极其艰难地下了决心建立博客虽然没有很好的理由或者仅仅是因为觉得自己的确要改变了......
- c++ 17 新特性理解
- -------------分割线-------
- ROS系统中启用摄像头模块
- UEFI中的Protocol
- HaaS低功耗IP Camera解决方案
- qpython3下载不了_qpython3手机版
- oss上传判断_React实现阿里云OSS上传文件的示例
- qq飞车手游服务器找不到了,QQ飞车手游服务器拉取失败是怎么回事