MOSES 安装以及初级说明
作为初学者对 MOSES 现在也没有什么深入的了解就在这里嫌丑,浅显的介绍一
下。
首先是 moses 的官网:http://www.statmt.org/moses/
里面资料很详细,可以下载说明文档(manual.pdf)按照文档里面的提示一步步
进行,一般来说整体只要依照这个步骤就没有问题
我现在本机上安装的 moses,然后又在服务器上进行的运行,所以安装经验
是本机的,但是两面使用的搭配是一样的都是 moses+boost+GIZA+++IRSTLM。就
是操作系统不一样,本机是 ubuntu,而服务器是 CentOS,但是基本上的过程是
一样的。
一、前期安装准备
1、Boost【ubuntu 下】
apt-get install libboost1.53-all-dev
2、GIZAA++【ubuntu 下】
wget http://giza-pp.googlecode.com/files/giza-pp-v1.0.7.tar.gz
tar xzvf giza-pp-v1.0.7.tar.gz
cd giza-pp
Make
在编译后会生成三个可执行文件
· giza-pp/GIZA++-v2/GIZA++
· giza-pp/GIZA++-v2/snt2cooc.out
· giza-pp/mkcls-v2/mkcls
这三个文件是在之后主要要使用的文件,可以单独把这三个文件提取出来放到一
个方便的位置,不觉得麻烦的话也可以每次键入路径,不过使用频率不算高还可
以。
比如说建立 tools\ 把这三个文件放进去
可以在编译的时候直接指出 GIZA++的位置,也可以在编译的时候不指出,在使
用的时候再指明,我采用的是后者。
3、IRSTLM
这个我在 ubuntu 和 centOS 下都编译了,方法都很简单
1)【ubuntu 下】
在编译 IRSTLM 之前,需要安装两个工具。使用下面的命令来安装这两个工具:
$ sudo apt-get install automake
$ sudo apt-get install libtool
接下来就可以安装 IRSTLM 了。先下载软件包,下载地址为:
http://sourceforge.net/projects/irstlm/files/
使用下面的命令进行安装:
tar zxvf irstlm-5.80.03.tgz
cd irstlm-5.80.03
./regenerate-makefiles.sh
./configure --prefix=$HOME/irstlm
make install
这样就编译安装好了 IRSTLM,记住 irstlm 的位置,以后用得到。
2)【centOS 下】
其实在这个下面和 ubuntu 里面没有什么区别
step 0: sh regenerate-makefiles.sh
step 1: ./configure [--prefix=/path/where/to/install]
step 2: make
step 3: make install
二、正式安装 Moses【ubuntu 下】
由于 moses 的代码均可用 git 下载,所以先安装 git:
$ sudo apt-get install git
还需要 gcc, zlib and bzip2以构建 moses
$ sudo apt-get install build-essential libz-dev libbz2-dev
然后就可以下载 moses 的代码了
git clone git://github.com/moses-smt/mosesdecoder.git
然后进入 mosesdecoder 目录,编译 Moses:
./bjam -j4 \ --with-irstlm=/irstlm 的位置 --with-giza=/giza 的位置
-j4是利用 CPU 是4核的进行编译
也可以./bjam --help 获取帮助
如果在编译过程中遇到什么问题也许是因为一些编译必须的包没有安装成功,安
装一些影响编译的包再进行编译试一下。
可以从目录下的 BUILD-INSTRUCTIONS.txt 获取安装的更多信息。
三、使用 moses
最开始除了最后翻译一步都是在本机上进行的,但是当进行到最后一步翻译就提
醒内存不够了。。所以为了不折腾最好还是一开始就在服务器上跑的好。。
在进行实验之前最好记住刚才安装的几个文件的目录,要不在进行接下来的步骤
还要回去一个个找目录位置还是挺麻烦的。
P.s.这里 w4tcy 是我个人的用户文件夹
Moses:/home/w4tcy/moses/
因为这里主要应用的就是/scripts 和/bin 两个文件夹,所以可以把这两个文件
夹单独提出来
/home/w4tcy/moses/scripts/
/home/w4tcy/moses/bin/
Giza++:/home/w4tcy/tools/giaz/
这个只要把上文所说的三个执行文件提出即可
IRSTLM:/home/w4tcy/tools/irstlm
这个我建议一开始就安装到这里。。我还不太清楚利用的是里面的什么。。
在这里我先使用官方提供的预料进行学习测试,因为语料使用的是官方的所以很
多步骤就简单多了:
1、预料的预处理
在/home/w4tcy/建立一个 corpus 来存放学习集,官方网站下载学习资料
cd
mkdir corpus
cd corpus
wget http://www.statmt.org/wmt13/training-parallel-nc-v8.tgz
tar zxvf training-parallel-nc-v8.tgz
1)tokenisation:在预料的单词和单词之间或者单词和标点之间插入空白,然
后进行后续操作。
/home/w4tcy/moses/scripts/tokenizer/tokenizer.perl -l en <
training/news-commentary-v8.fr-en.en > news-commentary-v8.fr-en.tok.en
/home/w4tcy/moses/scripts/tokenizer/tokenizer.perl -l fr <
training/news-commentary-v8.fr-en.fr > news-commentary-v8.fr-en.tok.fr
2)Truecaser:提取一些关于文本的统计信息
/home/w4tcy/moses/scripts/recaser/train-truecaser.perl --model
truecase-model.en --corpus news-commentary-v8.fr-en.tok.en
/home/w4tcy/moses/scripts/recaser/train-truecaser.perl --model
truecase-model.fr --corpus news-commentary-v8.fr-en.tok.fr
3)truecasing:将语料中每句话的字和词组都转换为没有格式的形式,减少数
据稀疏性问题。
/home/w4tcy/moses/scripts/recaser/truecase.perl --model
truecase-model.en < news-commentary-v8.fr-en.tok.en >
news-commentary-v8.fr-en.true.en
/home/w4tcy/moses/scripts/recaser/truecase.perl --model
truecase-model.fr < news-commentary-v8.fr-en.tok.fr >
news-commentary-v8.fr-en.true.fr
4)cleaning: 将长语句和空语句删除,并且将不对齐语句进行处理。
/home/w4tcy/moses/scripts/training/clean-corpus-n.perl
news-commentary-v8.fr-en.true fr en news-commentary-v8.fr-en.clean 1 80
2、语言模型训练
语言模型(LM)用于确保流利的输出,在这一步使用 Irstlm 进行处理。
/home/w4tcy/tools/irstlm/bin/add-start-end.sh <
news-commentary-v8.fr-en.true.en > news-commentary-v8.fr-en.sb.en
export IRSTLM=$HOME/irstlm; /home/w4tcy/tools/irstlm/bin/build-lm.sh
-i news-commentary-v8.fr-en.sb.en -t ./tmp -p -s improved-kneser-ney -o
news-commentary-v8.fr-en.lm.en
/home/w4tcy/tools/irstlm/bin/compile-lm --text
news-commentary-v8.fr-en.lm.en.gz news-commentary-v8.fr-en.arpa.en
经过这一步之后我们会得到一个*.arpa.en 格式的语言模型文件,接下来为了程
序的更快载入,使用 KenLM 对其进行二值化。
/home/w4tcy/moses/bin/build_binary news-commentary-v8.fr-en.arpa.en
news-commentary-v8.fr-en.blm.en
我们可以在这一步之后测试一下训练的模型是否正确,运用如下的 linux 命令:
$ echo "is this an English sentence ?" | /home/w4tcy/moses/bin/query
news-commentary-v8.fr-en.blm.en
3、翻译模型的训练
mkdir working
cd working
nohup nice /home/w4tcy/moses/scripts/training/train-model.perl
-root-dir train -corpus
/home/w4tcy/corpus/news-commentary-v8.fr-en.clean -f fr -e en
-alignment grow-diag-final-and -reordering msd-bidirectional-fe -lm
0:3:/home/w4tcy/corpus/news-commentary-v8.fr-en.blm.en:8
-external-bin-dir /home/w4tcy/tools/giza >& training.out &
(朱老师的修改)【特别说明先退出当前目录然后进入根目录‘../’或者退出直
接到根目录去用’./’】
./mosesdecoder/scripts/training/train-model.perl
-
root
train
-co
rpus
corpus/news-commentary-v8.fr-en.clean
-f
fr
-e
en
-alignme
nt
grow-diag-final-an
-reordering
msd-bidirectional-fr
-lm
0:3:/
home/trainer1/lm/news-commentary-v8.fr-en.blm.en:8
-external-bin-dir
bin/
4、Tunning 翻译模型
回到 corpus,下载开发集
wget http://www.statmt.org/wmt12/dev.tgz
tar zxvf dev.tgz
在
Corpus 内对开发集预料进行处理
/home/w4tcy/moses/scripts/tokenizer/tokenizer.perl -l en <
dev/news-test2008.en > news-test2008.tok.en
/home/w4tcy/moses/scripts/tokenizer/tokenizer.perl -l fr <
dev/news-test2008.fr > news-test2008.tok.fr
/home/w4tcy/moses/scripts/recaser/truecase.perl --model
truecase-model.en
< news-test2008.tok.en > news-test2008.true.en
/home/w4tcy/moses/scripts/recaser/truecase.perl --model
truecase-model.fr < news-test2008.tok.fr > news-test2008.true.fr
在进行了和学习集相同的处理之后,对原本的 moses.ini 进行调优
进入 working 文件夹然后运行
nohup nice /home/w4tcy/moses/scripts/training/mert-moses.pl
/home/w4tcy/corpus/news-test2008.true.fr
/home/w4tcy/corpus/news-test2008.true.en /home/w4tcy/moses/bin/moses
train/model/moses.ini --mertdir /home/w4tcy/moses/bin/ &> mert.out &
可在最后加上--decoder-flags="-threads 8"以使用多个线程,因为这个过程非
常非常缓慢。
5、测试
可以直接运行进行单句翻译
/home/w4tcy/moses/bin/moses -f
/home/w4tcy/corpus/working/mert-work/moses.ini
当然,这样很慢,所以我们可以在进行一定的处理加快
在 working 文件夹下进行创建
mkdir binarised-model
/home/w4tcy/moses/bin/processPhraseTable -ttable 0 0
train/model/phrase-table.gz -nscores 5 -out
binarised-model/phrase-table
/home/w4tcy/moses/bin/processLexicalTable -in
train/model/reordering-table.wbe-msd-bidirectional-fe.gz
-out
binarised-model/reordering-table
然后将 working/mert-work/moses.ini 复制到 binarised-model 的文件夹内,
做一下改变
1. 将 PhraseDictionaryMemory 改为 PhraseDictionaryBinary
2. 将 PhraseDictionary 特征的路径改为
$HOME/corpus/working/binarisedmodel/phrase-table
3. 将 LexicalReordering 特征的路径改为
$HOME/corpus/binarisedmodel/reordering-table
这样程序的运行就快了很多。
如果要进行全文翻译,在进行翻译前同样要把语句进行预处理
这一步可以到 corpus 下进行
/home/w4tcy/moses/scripts/tokenizer/tokenizer.perl -l en <
dev/newstest2011.en > newstest2011.tok.en
/home/w4tcy/moses/scripts/tokenizer/tokenizer.perl -l fr <
dev/newstest2011.fr > newstest2011.tok.fr