您的位置:首页 > 其它

Moses 训练步骤

2017-03-24 16:21 246 查看
参考链接:http://www.statmt.org/moses/?n=Moses.Baseline
1.语料预处理
针对源和目标语言的语料库。有三步:

分词--》 大小写格式转换 --》 过滤。

先准备语料文件INPUT_FILE_SRC-DEST.SRC 和 INPUT_FILE_SRC-DEST.DEST

1)Tokenisation 分词
scripts/tokenizer/tokenizer.perl -l SRC_LANG< INPUT_FILE_SRC-DEST.SRC > INPUT_FILE_SRC-DEST.TOK.SRC

同样的,针对目标语言DEST

scripts/tokenizer/tokenizer.perl -l DEST_LANG< INPUT_FILE_SRC-DEST.DEST >OUTFILE_SRC-DEST.TOK.DEST

2)Truecasing 格式转换
先要跑训练脚本,得到所有的统计信息

scripts/recaser/train-truecaser.perl --model truecase_model.SRC --corpus INPUT_FILE_SRC-DEST.TOK.SRC

然后使用上一步生成的model文件,加上原有的分词后的结果文件,统一转大小写。

scripts/recaser/truecase.perl --model truecase_model.SRC < INPUT_FILE_SRC-DEST.TOK.SRC >
INPUT_FILE_SRC-DEST.TOK.True.SRC

3)Cleaning 处理语句长度
限制长度为MIN & MAX,该命令可以一次性处理完双向的两个文件。

scripts/training/clean-corpus-n.perl INPUT_FILE_SRC-DEST.TOK.True SRC DEST
INPUT_FILE_SRC-DEST.cleanMIN MAX

那么将会生成两个文件:INPUT_FILE_SRC-DEST.clean.SRC &INPUT_FILE_SRC-DEST.clean.DEST

2.语言模型训练
针对目标语言的。可以使用moses内置的KenLM, IRSTLM 或者SRILM。

mkdir ~/lm

cd ~/lm

1)使用KenLM的构建N-gram的语言模型

评估并生成模型?

~/mosesdecoder/bin/lmplz -o N <INPUT_FILE_SRC-DEST.True.DEST>INPUT_FILE_SRC-DEST.arpa.DEST

二进制化语言模型文件

将上部结果模型文件进行二进制化,可以加快之后query的加载速度。

~/mosesdecoder/bin/build_binaryINPUT_FILE_SRC-DEST.arpa.DEST
INPUT_FILE_SRC-DEST.blm.DEST

查询测试

可以对该语言模型进行查询,check一下。

$ echo "is this an DEST sentence ?" |~/mosesdecoder/bin/query INPUT_FILE_SRC-DEST.blm.DEST

2)或使用IRSTLM 构建语言模型。
#TODO?

须得编译moses时指定 IRSTLM的路径,例如:

./bjam --with-irstlm=/home/s0565741/workspace/temp/irstlm-5.80.03-j4

但moses官方似乎比较推荐使用KenLM,Personally, I only use IRSTLM as aquery tool in this way if the LM n-gram order is over 7. In most situation, Iuse KenLM because KenLM is multi-threaded and faster.

3.翻译系统训练
1)脚本步骤说明
这一步是重点。主要脚本是train-model.perl.该脚本一次性可以完成9个步骤:

Prepare data (45 minutes)

Run GIZA++ (16 hours)

Align words (2:30 hours)

Get lexical translation table (30 minutes)

Extract phrases (10 minutes)

Score phrases (1:15 hours)

Build lexicalized reordering model (1 hour)

Build generation models

Create configuration file (1 second)

2)脚本参数设置
可以选择使用mgiza++替代giza++来加快训练速度。

mkdir ~/working

cd ~/working

nohup nice~/mosesdecoder/scripts/training/train-model.perl \

-root-dir train \ #指明生成目录

-corpus~/corpus/news-commentary-v8.fr-en.clean \ #指明clean语料库文件名(但不包括语言的extension)

-f fr -e en \ #指明SRC和 DEST 语言,即语料库文件对应的后缀。 Fr->en的情况下。

-alignment grow-diag-final-and \ #指明单词对齐的启发方法

-reorderingmsd-bidirectional-fe \ #指明specifies which reordering models totrain using a comma-separated list of config-strings

-lm0:3:$HOME/lm/news-commentary-v8.fr-en.blm.en:8 \ #语言模型, factory:order:filename

-external-bin-dir~/mosesdecoder/tools \ #指明word alignment tools的可执行文件路径

-mgiza \ #从默认的giza++切换成mgiza++

-cores N \ #指明训练过程可以使用的多核数量。加快训练过程。

>& training.out & #log输出

经过训练之后,moses.ini会在 ~/working/train/models下面生成。

4. Tuning :模型调整
生成的moses.ini 通常有以下两个问题:

加载速度比较慢, 可以用二进制化来解决
moses采用的权值不是最优的

因此需要对模型进行调整,这也是整个过程中最慢的一步。tuning需要一些跟训练数据无关的并行数据。

1)准备tuning数据
下载相应的数据

cd ~/corpus

wget http://www.statmt.org/wmt12/dev.tgz

tar xvzf dev.tgz

根据SRC&DEST 选择相应的数据包,然后对数据进行分词和格式统一化,例如选择de->en, 找到并选择对应的文件newtest2011.de &newtest2011.en

执行tokenize

cd ~/corpus

~/mosesdecoder/scripts/tokenizer/tokenizer.perl-l en < dev/news-test2011.en > news-test2011.tok.en

~/mosesdecoder/scripts/tokenizer/tokenizer.perl-l de < dev/news-test2011.de > news-test2011.tok.de

执行格式化统一。

~/mosesdecoder/scripts/recaser/truecase.perl--model truecase-model.en < news-test2011.tok.en > news-test2011.true.en

~/mosesdecoder/scripts/recaser/truecase.perl--model truecase-model.de < news-test2011.tok.de >news-test2011.true.de

2)进行调整
cd ~/working

nohup nice~/mosesdecoder/scripts/training/mert-moses.pl \

~/corpus/news-test2011.true.fr ~/corpus/news-test2011.true.en \

~/mosesdecoder/bin/mosestrain/model/moses.ini --mertdir ~/mosesdecoder/bin/ \

&> mert.out &

3) 二进制化加速
对phrase-tableand lexicalised reordering models进行二进制化,加速模型文件的加载

mkdir~/working/binarised-model

cd ~/working

~/mosesdecoder/bin/processPhraseTableMin \

-in train/model/phrase-table.gz -nscores 4 \

-out binarised-model/phrase-table

~/mosesdecoder/bin/processLexicalTableMin \

-intrain/model/reordering-table.wbe-msd-bidirectional-fe.gz \

-out binarised-model/reordering-table

然后将mert-work/moses.ini 文件拷贝到binarised-model 文件夹,并phrase & reordering tables 修改指向二进制的文件::

Change PhraseDictionaryMemory to PhraseDictionaryCompact
Set the path of the PhraseDictionary feature to point to $HOME/working/binarised-model/phrase-table.minphr

Set the path of the LexicalReordering feature to point to $HOME/working/binarised-model/reordering-table
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  moses