Moses安装全记录

说明:该文档中工作文件夹设为working。

系统安装

  1. 下载mosesgit clone https://github.com/moses-smt/mosesdecoder.git
    Moses安装全记录_第1张图片
  2. 下载mgiza++git clone https://github.com/moses-smt/mgiza.git
    Moses安装全记录_第2张图片
    进入mgiza文件夹cd ~/working/mgiza/mgiza++
    进入migza文件夹
  3. 安装mgiza++
    cmake .
    make
    make install

    在moses中配置mgiza++
    cd ~/working/mosesdecoder/
    mkdir word_align_tools
    cp ~/working/mgiza/mgizapp/bin/* word_align_tools/
    cp ~/working/mgiza/mgizapp/scripts/merge_alignment.py word_align_tools/

    Successfully Installing and Running the Moses Statistical Machine Translation System
  4. 下载irstlm
    注意moses官方文档给的irstlm版本过老,可以通过sourceforge镜像网站下载最新版的irstlm。解压后进入解压文件夹。cd ~/下载/irstlm-5.80.08/trunk
    进入解压文件夹
  5. 安装irstlm
    1) 安装准备。
    sh regenerate-makefiles.sh
    2) 配置安装路径,注意安装路径必须使用绝对路径。
    ./configure --prefix=/home/lqj/working/irstlm
    3) 编译irstlm。
    make
    4) 安装irstlm。
    make install
  6. 下载cmph
    cmph2.0下载地址
    同安装irstlm一样,解压后进入下载文件夹。
  7. 安装cmph
    步骤同安装irstlm,注意从2)开始没有1)步骤,详细可参考解压文件夹下install文件。我安装在/usr/local/cmph文件夹下。
  8. 安装xmlrpc(不是必须,但是如果将moses作为服务提供必须安装xmlrpc)
    linux可以通过apt-get install直接安装xmlrpc。

    xmlrpc-c package : Ubuntu - Launchpad该页面介绍了xmlrpc的包。一开始至安装了libxmlrpc-core-c3和libxmlrpc-core-c3-dev那个包,moses编译一直过不去。后来把所有可能相关的包都安装以后可以顺利编译,所以我也不太清楚究竟哪个包才是moses server需要的包。
    libxmlrpc-c++8: lightweight RPC library based on XML and HTTP [C++ runtime libraries]
    libxmlrpc-c++8-dev: lightweight RPC library based on XML and HTTP [C++ development libraries]
    libxmlrpc-core-c3: lightweight RPC library based on XML and HTTP [C runtime libraries]
    libxmlrpc-core-c3-dev: lightweight RPC library based on XML and HTTP [C development libraries]
    libxmlrpc-core-c3-udeb: A lightweight RPC library based on XML and HTTP (core libraries)

  9. 安装moses

./bjam --with-irstlm=/home/lqj/working/irstlm \
--with-mgiza=/home/lqj/working/mgiza/mgizapp \
--with-cmph=/usr/local/cmph -j 4

--with-irstlm 用于指定irstlm的位置
--with-mgiza 用于指定mgiza++的位置
--with-cmph 用于指定cmph的位置
-j 4 用于指定核心数
参考bjam参数
等待几分钟以后,屏幕提示“success“即为编译完成
10. 测试moses
第一次运行moses
11. 为了使用方便,可以修改PATH环境变量。
1) 打开.bashrc文件,该文件位于用户目录下
打开.bashrc文件
2) 在文件最后进行编辑,添加如下几行代码:
IRSTLM="$HOME/working/irstlm"
export IRSTLM
MOSE="$HOME/working/mosesdecoder"
export MOSE
MOSE_SCRIPTS="$MOSE/scripts"
export MOSE_SCRIPTS
PATH="$MOSE/bin:$MOSE_SCRIPTS/training:$MOSE_SCRIPTS/tokenizer:$MOSE_SCRIPTS/recaser:$IRSTLM/bin:$PATH"
export PATH

Moses安装全记录_第3张图片
3) esc键退出插入状态,:wq退出并保存.bashrc文件。重启terminal,环境变量生效。可以利用$echo $PATH查看环境变量是否成功,在PATH内的路径下的脚本文件都可以直接使用。

测试系统搭建

语料准备

  1. 准备双语平行语料(使用NiuTrans所带的语料)
  2. 语料预处理
  3. Tokenization 在单词和单词之间或者单词和标点之间插入空白(中文需要进行分词)
    ×××NiurTrans语料库应该已完成该步骤

    Tokenization的意思,本意是对英文进行词串识别,目的是将字符串转换成词串进而降低信息的不确定性,例如将it’s转换为it is。Moses脚本中的token脚本是针对西文字符的,因此对于中文基本不起作用。对等到中文,可以看做是我们的“中文分词”,这个基本上是我们自己处理中文上的第一步。

  4. Truecaser 提取关于文本的统计信息

  5. Truecasing 语料中每句话的字和词组都转换为没有格式的形式,类似于大写变为小写等等
  6. Cleaning:将长语句和空语句删除,并且将不对齐的语句进行处理

语言模型训练

语言模型使用irstlm进行处理。
1. 加首尾标识符 (irstlm/bin/add-start-end.sh)
2. 生成语言模型文件: ( irstlm/bin/build-lm.sh )
3. 将这个文件转换为标准的ARPA格式: ( irstlm/bin/compile-lm )
4. 使用KenLM对其进行二值化 (这里用到moses/bin/build_binary)
5. 测试训练的模型是否正确: (moses/bin/query )
echo "我是小明" | query b.blm.cn

翻译模型训练

  1. 在工作文件夹下新建文件夹working
    mkdir working(即该文件夹的绝对位置为/home/lqj/working/working,以下操作均在该文件夹中进行)
  2. 使用mgiza进行WordAlignment(使用giza++可以参考官方文档
    注意:下面代码段中的”\”代表换行继续写。

train-model.perl -root-dir train-en -corpus ~/working/corpus/model.clean -f cn -e en -alignment
grow-diag-final-and \
-reordering msd-bidirectional-fe -lm 0:3:/home/lqj/working/lm/model.blm.en -mgiza \
-mgiza-cpus 2 -cores 4 -parallel -external-bin-dir ~/working/mosesdecoder/word_align_tools/

注意model.blm.en文件的位置要使用绝对位置,不能使用相对位置。
运行结束后,新建的working文件夹下会出现train目录,在train/model/能找到配置文件 moses.ini
3. 准备调优语料。该语料独立于训练语料,且规模小于训练语料。(Niutrans的调优语料中英文混合需要分开为两个文件,分别起名字为dev.en和dev.cn)
4. truecase.perl --model truecase-model.en < dev/dev.en > dev.true.en
truecase.perl --model truecase-model.cn < dev/dev.cn > dev.true.cn

5. 调优
**注意**mert-mosese.pl位于mosesdecoder/scripts/training/路径下。前面已经配置过环境变量,故此处可以直接使用。mert-moses.pl /home/lqj/working/corpus/dev.true.cn \
/home/lqj/working/corpus/dev.true.en /home/lqj/working/mosesdecoder/bin/moses train/model/moses.ini \
--mertdir /home/lqj/working/mosesdecoder/bin/ --decoder-flags="-threads 4"

6. binarise
执行完调优以后,翻译系统已能正常工作。但是,运行非常缓慢,并且占用内存接近4G,同时占用swp空间超过3G。查阅官方maillist以及manul,建议对翻译模型进行binarise操作。
**注意**binarise操作需要使用cmph,如果没有按照本文档事先安装cmph,在此时才安装cmph,那么必须进入mosesdecoder安装文件夹重新执行./bjam,并补全irstlm、mgiza、cmph等等参数重新编译moses。否则执行moses.ini时会报错。
1) 在工作文件夹(/home/lqj/working/working)下新建文件夹binarised-model。
2) 在工作文件夹下执行如下语句生成binarise相应的文件。
**注意**processPhraseTableMin和processLexicalTableMin位于mosesdecoder/bin目录下,因为已经配置过环境变量,所以此处可以直接使用。
processPhraseTableMin -in train-en/model/phrase-table.gz -nscores 4 -out binarised-model/phrase-table
processLexicalTableMin -in train-en/model/reordering-table.wbe-msd-bidirectional-fe.gz -out binarised-model/reordering-table
运行完毕以后,可以看到在binarised-model文件夹下多了两个文件:phrase-table.minphr和reordering-table.inlexr。
3) 准备moses.ini
从mert-work文件夹中,复制moses.ini文件到binarised-model文件夹。打开moses.ini,修改参数PhraseDictionaryMemory为PhraseDictionaryCompact,然后在该参数后方有一个path变量,修改值为/home/lqj/working/working/binarised-model/phrase-table(即指向phrase-table.minphr,不用加后缀),同时修改LexicalReordering参数后方path变量为/home/lqj/working/working/binarised-model/reordering-table(即指向reordering-table.inlexr,不用加后缀)。

搭建moses server

如果希望把moses作为service开放使用,必须通过设置将moses设为moses server。具体步骤如下:
1. 安装xmlrpc(如果前面按照本文档已经安装xmlrpc,该步可以略过。否则参见该文档前半部分。安装完成后重新编译moses)。
2. 修改moses.pl参数
进入mosesdecoder/contrib/iSenWeb文件夹,打开moses.pl文件,修改MOSES参数为“path/to/mosesdecoder/bin/moses”,修改MOSES_INI参数为”path/to/working/binarised-model/moses.ini”。关闭并保存。
3. 在terminal中输入nohup ~/working/mosesdecoder/contrib/iSenWeb/moses.pl 10.103.29.144(即本机地址) 8080(端口号) &,屏幕打印[1] 6137
lqj@lqj-PC:~$ nohup: 忽略输入并把输出追加到"nohup.out"
。即成功运行了moses server。
4. 测试翻译平台。
echo "我 是 小明" | nc 10.103.29.144 8080
屏幕打印i am 小明如下图所示:翻译结果

至此,已完成一个基础的moses平台搭建。moses更为细节的使用方式还不了解,慢慢学习吧。

其他数据源参考:
LDC
OPUS

参考来源:
moses官方baseline搭建指南
moses官方maillist
傻瓜版MOSES搭建网页翻译系统
Brain Dump: Successfully Installing and Running the Moses Statistical Machine Translation System
【机器翻译】Moses 实用指南

你可能感兴趣的:(Moses)