基于短语的统计机器翻(PBMT) 开源工具 :Moses
如何运行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中文分词工具
(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的更多相关文章
- 基于.NET平台常用的框架和开源程序整理
自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中 也积累了一些开源的组件,就目前想到的先整理于此,如果再想到, ...
- Phrase-Based & Neural Unsupervised Machine Translation基于短语非监督机器翻译
1. 前言 本文介绍一种无监督的机器翻译的模型.无监督机器翻译最早是<UNSUPERVISED NEURAL MACHINE TRANSLATION>提出.这个模型主要的特点,无需使用平行 ...
- R学习:《机器学习与数据科学基于R的统计学习方法》中文PDF+代码
当前,机器学习和数据科学都是很重要和热门的相关学科,需要深入地研究学习才能精通. <机器学习与数据科学基于R的统计学习方法>试图指导读者掌握如何完成涉及机器学习的数据科学项目.为数据科学家 ...
- GPUImage ==> 一个基于GPU图像和视频处理的开源iOS框架
Logo 项目介绍: GPUImage是Brad Larson在github托管的开源项目. GPUImage是一个基于GPU图像和视频处理的开源iOS框架,提供各种各样的图像处理滤镜,并且支持照相机 ...
- 一款基于css3的3D图片翻页切换特效
今天给大家分享一款基于css3的3D图片翻页切换特效.单击图片下方的滑块会切换上方的图片.动起你的鼠标试试吧,效果图如下: 在线预览 源码下载 实现的代码. html代码: <div id= ...
- 基于HTML5手机上下滑动翻页特效
基于HTML5手机上下滑动翻页特效.这是一款手机移动端触屏滑动翻页代码下载.效果图如下: 在线预览 源码下载 实现的代码. html代码: <section class="u-al ...
- 基于视觉的 SLAM/Visual Odometry (VO) 开源资料、博客和论文列表
基于视觉的 SLAM/Visual Odometry (VO) 开源资料.博客和论文列表 以下为机器翻译,具体参考原文: https://github.com/tzutalin/awesome-vis ...
- GitHub 开源工具整理
技术站点 Hacker News:非常棒的针对编程的链接聚合网站 Programming reddit:同上 MSDN:微软相关的官方技术集中地,主要是文档类 infoq:企业级应用,关注软件开发领域 ...
- 撑起大规模PHP网站的开源工具
撑起大规模PHP网站的开源工具 百万级PHP站点Poppen.de的架构 在 2011年11月27日 那天写的 已经有 3957 次阅读了 感谢 参考或原文 服务器君一共花费了54.510 ...
随机推荐
- bzoj3696
3696: 化合物 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 245 Solved: 131[Submit][Status][Discuss] ...
- json知识笔记
1.全称:JavaScript Object Notation 2.数据格式 3. 数据结构-object String+基本类型(或者数据结构) 数据结构-Array [基本类型] 4.一个样例a ...
- 【插件开发】—— 11 窃听风云(Java事件监听原理-GEF实例讲解)
前文回顾: 1 插件学习篇 2 简单的建立插件工程以及模型文件分析 3 利用扩展点,开发透视图 4 SWT编程须知 5 SWT简单控件的使用与布局搭配 6 SWT复杂空间与布局搭配 7 SWT布局详解 ...
- [App Store Connect帮助]七、在 App Store 上发行(2.1)设定价格与销售范围:为您的 App 设定价格
在您提交 App 以供审核之前,您必须为您的 App 设定一个价格,该价格将用于 App Store 的所有地区.如果您没有<付费应用程序协议>,则只能选择免费. 必要职能:“帐户持有人” ...
- 整体二分例题:POI2011Meteors——Chemist
题目地址:https://www.luogu.org/problemnew/show/P3527#sub 首先这个答案不是操作几次下了几场陨石雨之后的陨石个数,无法在线做,考虑离线做法.暴力的想法就是 ...
- Luogu P2920 时间管理【二分答案】
二分答案水题. (像我这么蒻的人都能十几分钟A掉) https://www.luogu.org/problemnew/show/P2920 开始时间一定在从0到min(t[i]-s[i])的一段区间上 ...
- Hdu 3294 Girls' research (manacher 最长回文串)
题目链接: Hdu 3294 Girls' research 题目描述: 给出一串字符串代表暗码,暗码字符是通过明码循环移位得到的,比如给定b,就有b == a,c == b,d == c,.... ...
- 洛谷 P1600 天天爱跑步
https://www.luogu.org/problemnew/show/P1600 (仅做记录) 自己的假方法: 每一次跑从a到b:设l=lca(a,b)对于以下产生贡献: a到l的链上所有的点( ...
- 解题报告:hdu 1556 Color the ball(区间修改,单点查询)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556 Problem Description N个气球排成一排,从左到右依次编号为1,2,3....N ...
- C#不允许在foreach循环中改变数组或集合中元素的值(注:成员的值不受影响)
C#不允许在foreach循环中改变数组或集合中元素的值(注:成员的值不受影响),如以下代码将无法通过编译. foreach (int x in myArray) { x++; //错误代码,因为改变 ...