如何运行Moses

1. Moses的历史

  Moses是Pharaoh的升级版本,增加了许多功能。它是一个基于短语的统计机器翻译系统,整个系统用C++语言写成,从训练到解码完全开放源代码,可以运行在Linux平台和Windows平台。它有两大特点:

  1.1 Factored Translation Model

   在Factored Translation Model中,一个单词不仅仅是一个符号(token),而是一个包含多个因子的向量,例如表面词形、词干、词性等。这些因子共同作用来刻画一个单词。

  1.2 Confusion Network Decoding

   当前的机器翻译系统能够接受的输入一般是纯文本形式的一串单词(一句话或者一篇文章),而现在将机器翻译系统作为一个大的信息处理系统的组成部分的需求日益增长,它的输入可能不再是纯文本的形式,而是其它模块的输出结果,例如命名实体(NE)识别的结果,或者语音识别的结果。这样的输入不再是单一的,而是可能含有错误的、多种可能性的输入。Confusion Network Decoding允许这种多可能性的输入,最终选择最优译文。

2. Moses基本框架

  Moses核心框架仍是Philipp Koehn的基于短语的SMT框架。平台采用GIZA++进行翻译模型的训练,SRILM进行语言模型的训练,Moses进行生成模型的训练及解码,mteval对实验结果进行BLEU评分。

  2.1 总调用部分:moses-cmd/src/Main.cpp

  2.2 解码器初始入口部分

   i. 参数设置:

    moses/src/Parameter.cpp

   ii. 模型数据加载:

    moses/src/StaticData.cpp

  2.3 句子翻译处理部分

   i. 解码器算法实现总调度:

    Manager.cpp

   ii. 翻译选项处理:

    TranslationOptionCollection.cpp

   iii. 部分翻译处理:

    Hypothesis.cpp

   iv. 包含翻译假设,实现剪枝:

    HypothesisStack.cpp

  2.4 结果输出:moses-cmd/src/Main.cpp

   i. 输出最佳翻译结果:

    moses-cmd/src/IOStream::OutputBestHypo

   ii. n-best生成及输出:

    n-best lists generated in Manager.cpp, output in IOStream.cpp

3. Moses测试平台搭建

  3.1 安装SRILM

   参考http://www.leexiang.com/how-to-configure-srilm-on-ubuntu

   补充:语言模型训练工具除了SRILM可选外,还可以使用IRSTLM

  3.2 安装GIZA++

   参考http://www.leexiang.com/gizapp-report

  3.3 安装Moses

   3.3.1 安装和编译

   在编辑Moses之前一定要安装所有的依赖包,否则无法编译通过,请安装以下软件包:

   $sudo apt-get install autoconf automake texinfo zlib1g zlib1g-dev zlib-bin zlibc libtool libboost-all-dev libxmlrpc-c3-dev build-essential

   推荐通过Subversion下载并管理Moses:

   svn co https://mosesdecoder.svn.sourceforge.net/svnroot/mosesdecoder/trunk moses

   进入moses,运行./regenerate-makefiles.sh

   注:如果gcc 是4.4版本,可能会出现错误,需要修改moses/src,moses-cmd/src,misc三个文件夹中的Makefile.am文件,在AM_CPPFLAGS=…..后面加上-std=c++0x,并修改configure文件中3870行,将MY_ARCH=${with_srilm}/sbin/machine-type 改为MY_ARCH=“i686-gcc4“,重新编译一次。

   ./configure –with-srilm=MT/srilm (SRILM的绝对路径)

   再运行命令make -j 4

   则Moses的解码器编译成功。

   3.3.2 安装Moses训练脚本:

   进入moses/scripts目录,查看Makefile文件。该文件需要指定两个目录TARGETDIR和BINDIR。其中,TARGETDIR会存放编译后的文件,BINDIR需要事先存放3个可执行程序:GIZA++, snt2cooc.out,mkcls(Makefile会调用check-dependencies.pl以检查是否指定目录和包含可执行程序)。

   我们在scripts目录下新建两个目录:target和bin,将之前编译好的GIZA++、snt2cooc.out和mkcls拷贝到bin目录 下,并将Makefile文件的第13-14行修改为:

   TARGETDIR=/home/user/MT/moses/scripts/target

   BINDIR=/home/user/MT/moses/scripts/bin

   在scripts目录下输入命令:

   make release

   注:运行命令后,可能出现错误:/bin/sh: ./check-dependencies.pl: not found,此时需要将scripts/Makefile文件中的@./check-dependencies.pl修改为perl check-dependencies.pl,通过moses邮件列表发现的,至于原因我暂时也不知道,如果您明白请告诉我,谢谢

   编译完成后,会在TARGETDIR 目录下创建一个scripts-timestamp目录,这个目录中存放编译后的脚本。编译后的文件名写入released-files。编译后的脚本路径:SCRIPTS_ROOTDIR=/home/user/MT/moses/scripts/target/scripts- 20100105-1600

   至此,Moses安装成功。

   使用时需要声明环境:

   export SCRIPTS_ROOTDIR=/home/user/MT/moses/scripts/target/scripts-YYYYMMDD-HHMM

   3.3.3 安装Moses附加脚本:

   (1) 下载相关脚本

    从http://www.statmt.org/wmt07/scripts.tgz下载scripts.tgz并解压:

    tar xzf scripts.tgz

    这些脚本包括:

    Tokenizer scripts/tokenizer.perl

    Lowercaser scripts/lowercase.perl

    SGML-Wrapper scripts/wrap-xml.perl

   (2) 下载中科院计算所ICTCLAS中文分词工具

    下载地址:http://www.ictclas.org

   (3) 准备数据

    中英双语平行语料库:train.chn和train.eng(测试集);dev.chn和ref0~3(开发集);

    要求已完成英文token及英文句首字母大写转小写。

    如果没有进行预处理,可参考下面:

    英文切分:scripts/tokenizer.perl -l en < data/english > data/train.seg.eng.upper

    中文切分:使用ICTCLAS实现中文语料分词,获得切分语料库train.seg.chn

    大小写转换:scripts/lowercase.perl < data/ train.seg.eng.upper > data/train.seg.eng

   过滤长句:bin/moses-scripts/scripts-YYYYMMDD-HHMM/training/clean-corpus- n.perl data/train.seg chn eng data/train 1 100

4. 构建语言模型

  此处训练一个5元的语言模型,用kndiscount平滑方法,命令如下:

  ./ngram-count -text train.chn -lm train.chn.gz -order 5 -unk -interpolate -kndiscount -tolower

  参数说明:

   -text:要训练的文本,一行一句

   -lm:输出文件名

   -order n:语言模型的元数

   -unk:未登录词,默认是移除未登录词

   -kndiscount:平滑

   -interpolate:插值

  至此,语言模型训练完成。

5. 训练模型

  运行:/home/user/MT/moses/scripts/target/scripts-20100105-1600/training/train-model.perl (旧版是train-factored-phrase-model.perl)

  -scripts-root-dir /home/user/moses/scripts/target/scripts-20100105-1600

  -root-dir /home/user/MT/moses/data/

  -corpus /home/user/MT/moses/data/train -e eng -f chn

  -max-phrase-length 10

  -alignment-factors grow-diag-final-and

  -reordering msd-bidirectional-fe

  -lm 0:5:/home/user/moses/data/train.chn.gz

  程序会在/home/user/MT/moses/data下建立corpus、giza.eng-chn、giza.chn-eng和model四个目录。

  在model目录里,存放着最终结果:配置文件moses.ini、短语表phrase-table.0-0.gz和重排序表reordering- table.msd-fe.0.5.0-0.gz。

  这一步耗时较长,慢慢等待,期间可以上个厕所……..

  至此,短语抽取完成。

6. 最小错误率训练

  执行最小错误率训练时,必须要采用Moses规定的文件格式。输入文件是纯文本文件,一行一句,没有任何标记。参考译文文件也是相同格式。

  需要注意的是,Moses规定每个参考译文单独存放在一个文件中。

  这里我们使用的参考译文有四个,即ref0~3,运行以下命令:

  /home/user/MT/moses/scripts/target/scripts-20100105-1600/training/mert-moses-new.pl \

  /home/user/MT/moses/data/dev.eng \

  /home/user/MT/moses/data/ref \

  /home/user/MT/moses/moses-cmd/src/moses \

  /home/user/MT/moses/data/model/moses.ini \

  -working-dir /home/MT/moses/data/mert \

  -root-dir /home/user/MT/moses/scripts/target/scripts-20100105-1600 \

  -nbest 200 \

  训练完成,生成一系列文件。

  tail -n 1 run*.cmert.log查看所有迭代的BLEU结果,选择最好的runXX.moses.ini

  用生成的最好的配置文件覆盖moses.ini,输入

cp runXX.moses.ini moses.ini

  最终生成moses.ini文件,至此,最小错误率训练完成。

7. 解码

  echo "I have a book ." | moses –config moses-tuned.ini

  输出结果含有如下一行:

  BEST TRANSLATION: 我 有 一本 书?

  说明翻译成功。

基于短语的统计机器翻(PBMT) 开源工具 :Moses相关推荐

  1. 统计机器翻译(SMT)工具Moses在Ubuntu上的安装及使用(安装篇)

    统计机器翻译(SMT)工具Moses在Ubuntu上的安装及使用(安装篇) 前言 Ubuntu配置 1.关闭系统自动休眠(可选) 2.更换软件源 Moses安装 1.安装相关依赖包: 2.检查gcc和 ...

  2. EMNLP 2018 | 基于短语和神经网络的无监督机器翻译

    无监督机器翻译是目前热门研究方向之一.在仅依赖单语数据情况下,实现语种间的翻译是一个具有实际意义并极赋挑战的任务.文章<Phrase-Based & Neural Unsupervise ...

  3. 统计机器学习方法 for NLP:基于HMM的词性标注

    前言 最近在重刷李航老师的<统计机器学习方法>尝试将其与NLP结合,通过具体的NLP应用场景,强化对书中公式的理解,最终形成「统计机器学习方法 for NLP」的系列.这篇将介绍隐马尔可夫 ...

  4. 统计机器学习方法 for NLP:基于CRF的词性标注

    前言 最近在重刷李航老师的<统计机器学习方法>尝试将其与NLP结合,通过具体的NLP应用场景,强化对书中公式的理解,最终形成「统计机器学习方法 for NLP」的系列.这篇将介绍条件随机场 ...

  5. 《机器学习与数据科学(基于R的统计学习方法)》——1.2 机器学习的实际案例...

    本节书摘来异步社区<机器学习与数据科学(基于R的统计学习方法)>一书中的第1章,第1.2节,作者:[美]Daniel D. Gutierrez(古铁雷斯),更多章节内容可以访问云栖社区&q ...

  6. 基于eBPF的云原生可观测性开源工具Kindling之Kindling-agent 性能测试评估

    背景 Kindling-agent是基于eBPF的云原生可观测性开源工具Kindling中采集端的组件,能够通过采集和分析内核事件,获取运行于同一宿主机上的其他服务的业务.网络等指标.其工作模式是在主 ...

  7. 基于《Kaldi语音识别》技术及开源语音语料库分享

    前言: 数据堂自AI开源计划发起,面向高校和科研机构首次开源的[1505小时中文普通话语音数据集],该数据集句标注准确率达到了98%,得到了很多开发者的认可. 不仅如此,数据堂基于此开源数据集还精选出 ...

  8. ElasticDL:首个基于 TensorFlow 实现弹性深度学习的开源系统

    9 月 11 日,蚂蚁金服开源了 ElasticDL 项目,据悉这是业界首个基于 TensorFlow 实现弹性深度学习的开源系统. Google Brain 成员 Martin Wicke 此前在公 ...

  9. 《机器学习与数据科学(基于R的统计学习方法)》——2.8 读取JSON文件

    本节书摘来异步社区<机器学习与数据科学(基于R的统计学习方法)>一书中的第2章,第2.8节,作者:[美]Daniel D. Gutierrez(古铁雷斯),更多章节内容可以访问云栖社区&q ...

最新文章

  1. java中Hashtable中的t为什么是小写(转)
  2. 全球及中国矿棉板行业运营能力状况与十四五规模预测报告2022年
  3. FTP文件共传输服务
  4. 【学习笔记】网络层——网络层设备、移动IP、IP组播
  5. java数据结构--最大堆
  6. android 如何正确使用 泛型 和 多参数 “偷懒”
  7. MOSS 2010 无法同步用户配置文件
  8. 算法笔记_面试题_22. 图与搜索(BFS/DFS)相关_模板及示例十几道
  9. python调用通达信函数用户指标_通达信自定义指标调用
  10. 【科普】AHCI模式是什么,与IDE模式有什么区别?
  11. 会员积分系统三大营销优势
  12. 中国脑计划颠覆性创新之路六,用互联网与脑科学构建新AI系统模型
  13. 单片机c语言每隔1m闪烁一次,单片机c语言闪烁灯程序
  14. Vue实战篇一: 使用Vue搭建注册登录界面
  15. android 实现3d扫描,DIY:让Android手机轻松变3D扫描仪
  16. 鱼眼图像自监督深度估计原理分析和Omnidet核心代码解读
  17. 842计算机基础考试大纲,(842)考试大纲-计算机专业基础.docx
  18. 软件测试学习 之 进阶之路
  19. 15支持哪些数据库版本 tfs_版本和支持的功能 - SQL Server 2016 | Microsoft Docs
  20. 基于vue的图片剪裁工具vue-croppe

热门文章

  1. Reject: HTTP ‘DELETE‘ is not allowed, Not injecting HSTS.....DELETE请求PUT请求跨域问题
  2. 浅显易懂 Makefile 入门 (10)— 嵌套执行 make、export 的使用
  3. 愿疫情早日过去,向那些在疫情战斗中牺牲的战士致敬
  4. 那还剩下多少学习激情?
  5. 【牛腩新闻发布系统】系统发布06
  6. 《将要淘汰的八种人》读后感
  7. pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法
  8. Git最新版从零开始详细教程(迅速搞定~)
  9. 2021年大数据Hive(十二):Hive综合案例!!!
  10. 2021年大数据Flink(三十一):​​​​​​​Table与SQL案例准备 依赖和​​​​​​​程序结构