关于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 deocdercd ~/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++.