实验室换了新机器,重新安装了最新的Ubuntu 8.10,这样不得不重新搭建moses测试平台。拿自己写的<<Moses相关介绍>>作参考,感觉写得不够细,这里把安装的全过程记录下来,属于一个step-by-step的过程,希望对大家有用。
一、在用户52nlp目录下建立moses平台主目录mtworkdir:
52nlp@52nlp-desktop:~$ mkdir mtworkdir
52nlp@52nlp-desktop:~$ cd mtworkdir/
二、安装语言模型工具SRILM:
1、建立srilm目录:
52nlp@52nlp-desktop:~/mtworkdir$ mkdir srilm
52nlp@52nlp-desktop:~/mtworkdir$ cd srilm/
2.下载最新的的srilm包(目前最新版本为 srilm-1.5.7.tar.gz)
52nlp@52nlp-desktop:~/mtworkdir/srilm$ wget ’ftp://ftp.speech.sri.com/pub/people/stolcke/srilm/srilm-1.5.7.tar.gz’
显示信息如下:
=> `srilm-1.5.7.tar.gz’
正在解析主机 ftp.speech.sri.com… 130.107.33.205
正在连接 ftp.speech.sri.com|130.107.33.205|:21… 已连接。
正在以 anonymous 登录 … 登录成功!
==> SYST … 完成。 ==> PWD … 完成。
==> TYPE I … 完成。 ==> CWD /pub/people/stolcke/srilm … 完成。
==> SIZE srilm-1.5.7.tar.gz … 完成。
==> PASV … 完成。 ==> RETR srilm-1.5.7.tar.gz … 完成。
长度:48526656 (46M) (非正式数据)
出现下载进度条,等待约一段时间之后,下载完毕
3.解压:tar -zxvf srilm-1.5.7.tar.gz
4.首先确认srilm依赖的这些工具是否已安装:
A template-capable ANSI-C/C++ compiler, preferably gcc version 3.4.3 or higher.
GNU make, to control compilation and installation.
GNU gawk, required for many of the utility scripts.
GNU gzip to unpack the distribution, and to allow SRILM programs to handle “.Z” and “.gz” compressed datafiles (highly recommended).
bzip2 to handle “.bz2″ compressed files (optional).
p7zip to handle “7-zip” compressed files (optional).
The Tcl embeddable scripting language library (only required for some of the test executables).
除了上面这些工具外,还需要装一个csh。Ubuntu8.10自带的软件不多,安装时用apt-get或新利得都行。
5. 修改MakeFile:
在以上工具都安装完毕后,首先修改srilm/MakeFile:
cp Makefile Makefile.bak(备份)
vi Makefile
修改或在第7行下面加上一行
# SRILM = /home/speech/stolcke/project/srilm/devel (原)
SRILM = $(PWD) (修改)
再修改srilm/common/Makefile.machine.i686:
cd common/
cp Makefile.machine.i686 Makefile.machine.i686.bak
vi Makefile.machine.i686
将第15行 # Use the GNU C compiler下的三行修改如下:
GCC_FLAGS = -mtune=pentium3 -Wreturn-type -Wimplicit
CC = gcc $(GCC_FLAGS)
CXX = g++ $(GCC_FLAGS) -DINSTANTIATE_TEMPLATES
注:我的新机器的cpu是intel64位,所以尝试了一下64位的编译方法,不太成功,这里的方法对于64位机器也是可以的。
将51行 # Tcl support (standard in Linux) 下的两行修改如下:
TCL_INCLUDE = -I/usr/include/tcl8.5
TCL_LIBRARY = -L/usr/lib/tcl8.5
注:我装的是tcl8.5,如果是其他版本,请相应修改。
6.回到srilm目录下编译:
cd ..
make World
顺利的话,srilm就编译通过了。如果出现问题,很可能就是相应的依赖工具没有装完全,请回到第4步检查。
7.进入srilm/test目录下进行测试:
编译通过不等于编译成功,必须利用srilm提供的测试模块进行测试
首先声明srilm编译成功后工具报所在的环境变量:
export PATH=$PATH:/home/52nlp/mtworkdir/srilm/bin/i686:
/home/52nlp/mtworkdir/srilm/bin
然后进入test测试:
cd test
make all
出现如下信息:
*** Running test class-ngram-simple ***
0.50user 0.11system 0:00.61elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+1288outputs (0major+4684minor)pagefaults 0swaps
class-ngram-simple: stdout output IDENTICAL.
class-ngram-simple: stderr output IDENTICAL.
….
需要等待一段时间,如果出现多是IDENTICAL,很少的DIFFERS,就证明srilm编译成功了!
三、安装翻译模型训练工具Giza++,mkcls
1、 在mtworkdir目录下下载并解压Giza++:
cd /home/52nlp/mtworkdir
wget http://ling.umd.edu/~redpony/software/giza++.gcc41.tar.gz
tar -zxvf giza++.gcc41.tar.gz
解压后得到GIZA++-v2/目录
2、编译Giza++:
cd GIZA++v2
make
以前这一步都比较顺利,没想到这一次出了问题:编译过程中提示stream.h文件无法找到,开始以为自己的编译环境没有配置完全,但是检查了几项必要的都安装了。在Google上搜这个问题,国内好像还没有人遇到过,最终在Google code giza-pp的issue上找到了的答案(http://code.google.com/p/giza-pp/issues/detail?id=7):
Cannot compile with gcc 4.3 or greater
Giza++不能被gcc,g++4.3或更高版本编译。这个问题也是最近被发现的,属于一个bug,而ubutu8.10默认安装的gcc,g++都是4.3版本,这个帖子里提出了几种解决方案,我用了最简单的一种:
安装g++-4.1: sudo apt-get install g++-4.1
修改GIZA++-v2里的Makefile:vi Makefile
将第5行CXX=g++
替换为:CXX=g++-4.1
OK, 可以重新make了:
make
make snt2cooc.out
一切顺利!
3、下载解压并编译mkcls:
cd ..(重新进入mtworkdir目录)
wget http://ling.umd.edu/~redpony/software/mkcls.gcc41.tar.gz
tar -zxvf mkcls.gcc41.tar.gz
cd mkcls-v2
make
这一步一般没啥问题。
4、建立bin目录,并将giza++,mkcls工具拷贝到bin目录下:
cd ..
mkdir -p bin
cp GIZA++-v2/GIZA++ bin/
cp GIZA++-v2/snt2cooc.out bin/
cp mkcls-v2/mkcls bin/
四、安装解码器Moses及相关脚本
1、建立目录,通过svn下载moses:
mkdir -p moses
svn co https://mosesdecoder.svn.sourceforge.net/svnroot/mosesdecoder
/trunk moses
Ubuntu8.10下需自行安装svn.
2、下载完成后编译:
cd moses
./regenerate-makefiles.sh
./configure –with-srilm=/home/52nlp/mtworkdir/srilm
make -j 4
cd ..
注:srilm指向绝对路径。
3、安装Moses训练脚本
建立训练脚本目录:
mkdir -p bin/moses-scripts
修改makefile:
vi moses/scripts/Makefile
将第13、14行修改如下:
TARGETDIR=/home/52nlp/mtworkdir/bin/moses-scripts
BINDIR=/home/52nlp/mtworkdir/bin
编译:
cd moses/scripts/
make release
cd ../..
使用时需要声明环境:
export SCRIPTS_ROOTDIR=/home/52nlp/mtworkdir/bin/moses-scripts
/scripts-20090113-1019
4、安装Moses附加脚本及评测工具
下载scripts.tgz并解压:
wget http://www.statmt.org/wmt07/scripts.tgz
tar -zxvf scripts.tgz
这些脚本包括:
Tokenizer scripts/tokenizer.perl
Lowercaser scripts/lowercase.perl
SGML-Wrapper scripts/wrap-xml.perl
下载NIST,BLEU评测工具:
wget ftp://jaguar.ncsl.nist.gov/mt/resources/mteval-v11b.pl
完整的安装过程结束,这次安装中最大的问题是Giza++不能被gcc,g++4.3或更高版本编译,以后肯定会有很多人遇到这个问题,希望放在这里对大家有所帮助。
Moses相关介绍
一 Moses简介
Moses是Pharaoh的升级版本,增加了许多功能。它是由英国爱丁堡大学、德国亚琛工业大学等8家单位联合开发的一个基于短语的统计机器翻译系统。来自这8家单位的研究人员于2006年在约翰霍普金斯大学召开了一次研讨会,利用6个星期的时间共同开发了这一系统。整个系统用C++语言写成,从训练到解码完全开放源代码,可以运行在Linux平台和Windows平台。其开发领导者是Philipp Koehn。具有两大特点:
1、Factored翻译模型(Factored Translation Model):
在factored翻译模型中,一个单词不仅仅是一个符号(token),而是一个包含多个factor的向量,例如表面词形、词干、词性等。这些factor共同作用来刻画一个单词。
Moses features novel factored translation models, which enable the integration linguistic and other information at many stages of the translation process.
2. 混合网络解码(Confusion Network Decoding):
当前的机器翻译系统能够接受的输入一般是纯文本形式的一串单词(一句话或者一篇文章),而现在将机器翻译系统作为一个大的信息处理系统的组成部分的需求日益增长,它的输入可能不再是纯文本的形式,而是其它模块的输出结果,例如命名实体识别的结果,或者语音识别的结果。这样的输入不再是单一的,而是可能含有错误的、多种可能性的输入。混合网络解码允许这种多可能性的输入,最终选择最优译文。
Moses allows the decoding of confusion networks, enabling easy integration with ambiguous upstream tools, such as automatic speech recognizers .
资源链接及相关参考:
Moses主页:http://www.statmt.org/moses/
Moses介绍(ACL07):Moses: Open Source Toolkit for Statistical Machine Translation
JHU06研讨会的Final Report:Open Source Toolkit for Statistical Machine Translation: Factored Translation Models and Confusion Network Decoding
计算所何中军等:统计机器翻译开源软件介绍
二、Moses测试平台搭建
1、概述
使用Linux平台,安装了当前比较流行的Ubuntu系统,版本为7.10。
按ACL07统计机器翻译讨论会(ACL 2007 SECOND WORKSHOP ON
STATISTICAL MACHINE TRANSLATION)的介绍搭建了Moses测试平台,其核心框架仍是Kohen的基于短语的SMT框架。平台采用GIZA++进行翻译模型的训练, SRILM工具进行语言模型的训练,Moses工具包进行生成模型的训练及解码,mteval工具包对实验结果进行BLEU评分。
2、步骤
安装Moses支持工具
安装Moses
安装Moses训练脚本
安装附加脚本及评测工具
Ubuntu下建立的总路径为:/home/user/mtbaseline/(注:user是我的用户名)
如果需要训练,可以在总路径下建立个人的训练文件夹:mkdir test
以上每一步都需要建立相应的文件夹,具体可参考ACL官方介绍。
3、安装Moses支持工具-SRILM
在SRILM的主页上有下载及安装介绍,主要要配置一些必须的工具,有版本要求:
A template-capable ANSI-C/C++ compiler, preferably gcc version 3.4.3 or higher.
GNU make, to control compilation and installation.
GNU gawk, required for many of the utility scripts.
GNU gzip to unpack the distribution, and to allow SRILM programs to handle “.Z” and “.gz” compressed datafiles (highly recommended).
bzip2 to handle “.bz2″ compressed files (optional).
p7zip to handle “7-zip” compressed files (optional).
The Tcl embeddable scripting language library (only required for some of the test executables).
The CYGWIN porting layer, to build SRILM on a Microsoft Windows system. CYGWIN comes with the packages above, so this is all you will need.
按SRILM上的安装文件介绍(INSTALL file )安装时遇到了一些问题;
参考了一篇国内的SRLIM安装介绍,主要有几个问题需要注意:
必须安装一些需要依赖的软件包;
要修改一些文件,如makefile等,在该页面上有介绍;
最后要检测是否安装成功,有可能需要反复几次安装才能成功
4、安装Moses支持工具-GIZA
包括mkcls, GIZA等,但是需要注意的是,ACL官方给出的Och的主页已不存在,我是在另一个国外的介绍网站上下载并安装的,下载命令为:wget http://ling.umd.edu/~redpony/software/giza++.gcc41.tar.gz
这部分的安装比较简单,按上面的介绍就可以了:
cd GIZA++-v2/makemake snt2cooc.outcd ../mkcls-v2/make
将编译好的这几个文件拷贝到主目录文件下的bin目录下;
5、安装Moses
通过Subversion下载并管理Moses:
mkdir -p moses
svn co https://mosesdecoder.svn.sourceforge.net/svnroot/mosesdecoder/trunk moses
编译 Moses
cd moses
./regenerate-makefiles.sh
./configure –with-srilm=/path-to-srilm path-to-srilm
make -j 4
说明:
Subversion是当前很流行的开源版本管理软件,sourceforge网站已采用;
编译Moses时指向SRILM的路径必须是绝对路径而不能是相对路径,我安装的时候在这个问题上花了好长时间才搞明白错误;
语言模型训练工具除了SRILM可选外,还可以使用新出的irstlm,ACL07上有介绍,可以处理大规模的单语语料库,对其进行高效压缩。
Windows下编译说明:
解压moses.2008-02-20.tgz
The Visual Studio 2005 build require:
a. VLD (Visual Leak Detector)
b. zlib. Moses uses the statically-linked version.
The Windows build doesn’t uses SRILM
6、安装Moses训练脚本
建立训练脚本目录:
mkdir -p bin/moses-scripts
修改makefile:
TARGETDIR=/full-path-to-workspace/bin/moses-scripts
BINDIR=/full-path-to-workspace/bin
编译:
cd moses/scripts/
make release
使用时需要声明环境:
export SCRIPTS_ROOTDIR=/full-path-to-workspace/bin/moses-scripts/scripts-YYYYMMDD-HHMM
7、安装Moses附加脚本及评测工具
下载scripts.tgz并解压:
tar xzf scripts.tgz
这些脚本包括:
Tokenizer scripts/tokenizer.perl
Lowercaser scripts/lowercase.perl
SGML-Wrapper scripts/wrap-xml.perl
下载NIST,BLEU评测工具:
wget ftp://jaguar.ncsl.nist.gov/mt/resources/mteval-v11b.pl
8、相关参考:
ACL 2007 SECOND WORKSHOP ON SMT: Shared Task: Baseline System
9、补充说明:
除去SRILM,GIZA++,Moses这几个大型程序用C++写外,其它脚本(如训练脚本,附加脚本,评测工具)均用Perl写成。
Perl是一种脚本语言,支持正则表达式,除了具备强大的字符串处理功能之外,还有“胶水”作用,Perl能够将各种应用程序或者各种语言的代码结合起来。
三、实验和总结部分略。
(注:这是08年6月份给实验室内部做得关于开源解码器Moses的相关报告,内容由PPT整理而成。转载请注明出处,谢谢!)