机器翻译系统moses平台搭建

关于moses的搭建,网上有篇文章介绍的很详细的 文章1 click here。

今天自己搭建却发现很多的问题,主要是这些构建都更新了。有些地方没有以前那么复杂。

我的目录组织如下:

/data    放双语语料,后面的moses的sample-model也放在这里。

/lm      存放语言模型,后面的test.ln.en放在这里。

/Giza++  GIZA++, snt2cooc.out,mkcls

/srilm   放srilm工具

/moses   放moese工具

/work    最后在这个目录下测试。


SRILM的不同:

参照文章2 click here

SRILM1.60 最近的版本安装时候不用那么复杂,修改SRILM和MACHINE_TYPE就可以运行了。

参照上面那个文章试试  

## ./ngram-count -text train.eng -lm ../…/lm/test.lm.en -order 3 -unk -interpolate -kndiscount -tolower

在lm下面的确有语言模型test.lm.en生成。


moses的不同:

第一步,安装和编译moses。参考文章1。

第二步,测试。安装moses主页 click here 的做法 

Download the sample models and extract them into your working directory:

 cd ~/mosesdecoder
 wget http://www.statmt.org/moses/download/sample-models.tgz
 tar xzf sample-models.tgz
 cd sample-models
Run the deocder
cd ~/mosesdecoder/sample-models
 ~/mosesdecoder/bin/moses -f phrase-model/moses.ini < phrase-model/in > out


在sample-models下面生成两个文件:nbest.txt out。有兴趣可以打开out文件,显示两行this is  a small house。

至此说明安装是成功的。


在文章1中说接下来需要安装相关脚本。

-------------------------------------------------------------------------------

  进入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

 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


--------------------------------------------------------------------------------

但新版的moses似乎不需要这一步。打开moesedecoder-master/scripts/tokenizer。有些脚本已经有了。


我们已经有语言模型,可以测试测试。

在lm目录下先将语言模型转换为二进制存放。manual说可以更快的载入模型。

##     ……/mosesdecoder/bin/build_binary test.lm.en test.blm.en

然后query一下检测语言模型。

##    echo "is this a man?" | ……/mosesdecoder/bin/query test.blm.en

显示

Loading statistics:
user    0.000999
sys     0
VmPeak:    22096 kB
VmRSS:      1340 kB
is=4177 2 -1.49312      this=8365 3 -0.762533   a=27 3 -1.0887  man=4838 2 -3.28otal: -8.5555 OOV: 0
After queries:
user    0.000999
sys     0.000999
VmPeak:    22104 kB
VmRSS:      1468 kB
Total time including destruction:
user    0.000999
sys     0.000999
VmPeak:    22104 kB
VmRSS:      1376 kB

=========================================================上面具体的东西我不是很清楚,以后再回头看看。

第三步,自己训练模型。

我们不需要像文章1一样修改scripts目录下的BINDIR和TARGETDIR变量。(其实你想修改也没地方,新moses那个目录下没有makefile文件)

但我们仍要告诉moese,GIZA++那些命令哪里去找。

在使用这个训练模型的命令时候 train-model.perl-external-bin-dir $HOME/external-bin-dir

后面的那个-external-bin-dir 参数就是告诉moses,去这个目录下面找你想要的东西吧。


大爷的。折腾一晚上没折腾出来。一直报错

……/Giza++/bin/Giza++ -Coo../work/giza.chn-eng/chn-eng.cooc -Coocurrencefile ……/work/corpus/chn-eng-int-train.snt -m1 5 -m2 0 -m3 3 -m4 3 -model1d    umpfrequency 1 -model4smoothfactor 0.4 -nodumps 1 -nsmooth 4 -o ……/work/giza.chn-eng/ch    n-eng -onlyaldumps 1 -p0 0.999 -s ……work/corpus/eng.vcb -t ……/work/corpus/chn.vcb

ERROR: parameter 'coocurrencefile' does not exist.

先以为是报错找不到coocurrencefile文件,明明存在chn-eng.cooc的嘛。网上搜了好久好久。。

后来看manual才知道在7.1.20给出答案

You have a version of GIZA++ which doesn’t support cooccurrence files. To add support for
cooccurrence files, you need to edit the GIZA++Makefile and add the flag -DBINARY_SEARCH_FOR_TTABLE
to CFLAGS_OPT. Then you should rebuild GIZA++.



你可能感兴趣的:(机器翻译系统moses平台搭建)