Ubuntu上搭建和测试翻译Moses

1.Moses的起源。

      Moses是Pharaoh的升级版本,增加了许多功能。它是由英国爱丁堡大学、德国亚琛工业大学等8家单位联合开发的一个基于短语的统计机器翻译系统。 来自这8家单位的研究人员于2006年在约翰霍普金斯大学召开了一次研讨会,利用6个星期的时间共同开发了这一系统。整个系统用C++语言写成,从训练到解码完全开放源代码,可以运行在Linux平台和Windows平台。其开发领导者是Philipp Koehn。具有两大特点:
    1.1Factored翻译模型(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.
     1.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/
2.Moses测试平台的搭建
2.1概述:
       使用Linux平台,安装了当前比较流行的Ubuntu系统,版本为8.10。
  按ACL07统计机器翻译讨论会(ACL 2007 SECOND WORKSHOP ON
STATISTICAL MACHINE TRANSLATION)的介绍搭建了Moses测试平台,其核心框架仍是Kohen的基于短语的SMT框架。平台采用GIZA++进行翻译模型的训练, SRILM工具进行语言模型的训练,Moses工具包进行生成模型的训练及解码,mteval工具包对实验结果进行BLEU评分。
2.2搭建步骤及需要注意的地方
     安装Moses支持工具
  安装Moses
  安装Moses训练脚本
  安装附加脚本及评测工具
  Ubuntu下建立的总路径为:/user/local/moses(注:user是我的用户名)
  如果需要训练,可以在总路径下建立个人的训练文件夹:mkdir test
  以上每一步都需要建立相应的文件夹,具体可参考ACL官方介绍。
3.3Moses支持工具Srilm的安装:
Srilm介绍:Srilm是一个建立和应用统计语言模型的工具包,它主要用于语音识别,统计标识和分割。
下载Srilm从:http://www.speech.sri.com/projects/srilm/download.html.
安装和编译srim之前,一定要安装一些相关依赖包:
sudo apt-get install g++ make gawk gzip tcl8.4 tcl8.4-dev csh
在编译srim之前请确定以上软件包已经安装到你的系统之中。
在安装好以上软件包之后,我们开始编辑srilm:
因为在下载的源码包中,并没有给我们一个配置好的脚本,所以我们需要自己修改脚本中的内容,我们首先需要修改的是:其中的$SRILM是你自己所建立的srilm的路径,我的路径为/usr/local/Srilm/srilm-1.5.6/srilm
cp $SRILM/Makefile $SRILM/Makefile.bak
gedit $SRILM/Makefile
我们现在需要修改Makefile文件中的内容:
SRILM = 在Makefile文件中这个前面是有#,一定要把#去掉,要不编译还是不成功的,而且这里的所写的是srilm的绝对路径,相对于我就是 /usr/local/Srilm/srilm-1.5.6/srilm/      ($SRILM 这个表示srilm的绝对路径)
MACHINE_TYPE = i686
然后我们需要修改common文件夹下的Makefile.machine.i686文件,命令如下:
cp $SRILM/common/Makefile.machine.i686
$SRILM/common/Makefile.machine.i686.bak
gedit $SRILM/common/Makefile.machine.i686
在这个脚本文件中我们所需要修改的主要是gcc和TCL的路径问题,我们用一下命令来替换:
CC = /usr/bin/gcc $(GCC_FLAGS)
CXX = /usr/bin/g++ $(GCC_FLAGS) -DINSTANTIATE_TEMPLATES
这是我们gcc实际安装路径。
TCL_INCLUDE = -I/usr/include/tcl8.4/
TCL_LIBRARY = /usr/lib/libtcl8.4.so
这是我们TCL的实际安装路径。
然后我们开始进行编译,我们回到srilm的当前目录,进行编译,我们利用以下命令:
cd $SRILM
sudo make
如果编译不出现任何错误,我们用以下命令来进行安装:
sudo make World
然后,我们进行环境变量的设置,利用以下命令:
cd /etc
vi pro file
export PATH=$SRILM/bin:$SRILM/bin/i686:$PATH    (注释其中$SRILM是srilm绝对路径,现对于我的系统来说就是/usr/local/Srilm/srilm-1.5.6/srilm)
实际上后来我发现,ubuntu 8.10有自己的NLP处理的deb包,直接下载安装就可以了。
下载位置:http://cl.aist-nara.ac.jp/~eric-n/ubuntu-nlp/dists/intrepid/nlp/
我后面的GIZA++和mkcls都是直接安装的deb包,这样不容易出问题。推荐安装deb包。
3.4Moses的编辑和安装
非常重要的一点,在编辑moses之前,一定要安装所有的依赖包,要不是无法编译通过的,请按照命令安装一下软件包:
 $sudo apt-get install autoconf automake texinfo zlib1g zlib1g-dev zlib-bin  zlibc
然后我们首先安装SVN,然后下载moses的源码包,这是moses的官方推荐的方法:
sudo apt-get install subversion
mkdir -p mosesdecoder
svn co   https://mosesdecoder.svn.sourceforge.net/svnroot/mosesdecoder/trunk mosesdecoder
cd mosesdecoder
   ./regenerate-makefiles.sh
   ./configure –with-srilm=/path-to-srilm path-to-srilm (请注意这里的是写srilm的绝对路径,相对我的系统来说就是/usr/local/Srilm/srilm-1.5.6/srilm)
   make -j 4
3.5安装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
这里需要注意的一点就是,一定要把(GIZA++,mkcls, snt2cooc.out)这三个脚本文件拷贝到BINDIR路径的下面,要不编译的时候,会报错的。
  使用时需要声明环境:
   export   SCRIPTS_ROOTDIR=/full-path-to-workspace/bin/moses-scripts/scripts-YYYYMMDD-HHMM
3.6 安装Moses附加脚本及评测工具
  下载scripts.tgz并解压:
  tar xzf scripts.tgz
  这些脚本包括:
   Tokenizer scripts/tokenizer.perl
   Lowercaser scripts/lowercase.perl
   SGML-Wrapper scripts/wrap-xml.perl
实际上我在进行中英文的翻译的时候还用到了,计算所的分词工具ICTCLAS
  下载NIST,BLEU评测工具:
   wget ftp://jaguar.ncsl.nist.gov/mt/resources/mteval-v11b.pl
3.7Mose运行

建立语言模型

ngram-count -order 5 -interpolate -kndiscount -text corpus/corpus.zh -lm lm/corpus.zh.lm

通过corpus.zh为汉语建立语言模型。

训练语言模型

train-factored-phrase-model.perl -scripts-root-dir $SCRIPTS_ROOTDIR -corpus corpus/corpus -f en -e zh -alignment grow-diag-final-and-reordering msd-bidirectional-fe -lm 0:5:/home/sigsit/workspace/mt2008/lm/corpus.zh.lm:0

对上一步产生的语言模型进行最小错误率训练。这里,-f选项指明源语言(英文)文件后缀,-e选项指明目标语言(中文)文件后缀。运行结束后会生成phrase-table.0-0.gz,内含英语短语到汉语短语的翻译概率。


调整Moses参数

mert-moses.pl tuning/input tuning/references ~sigsit/software/moses/moses-cmd/src/moses model/moses.ini --working-dir tuning --rootdir $SCRIPTS_ROOTDIR

reuse-weights.perl tuning/moses.ini < model/moses.ini > tuning/moses.weight-reused.ini

第一个参数(tuning/input)指明了源语言(英文)文件;第二个参数(tuning/references)指明了参考译文(中文)文件的前缀。这样reference0~ reference3都被用作了参考译文。

解码

echo "how are you ." | moses –config tuning/moses.weight-reused.ini

输出结果含有如下一行:

BEST TRANSLATION: 你好 吗?

说明翻译成功。
3.8参考文章:
http://www.52nlp.cn/moses-introduction/
http://guardiani.us/index.php/Moses_Language_Model_Howto_v2

http://www.sciencenet.cn/m/user_content.aspx?id=205469

原文:http://dan-4899.blog.163.com/blog/static/5825023720090512226886/

你可能感兴趣的:(Linux,Linux,双语,自然语言处理)