Moses 训练步骤

参考链接: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的语言模型

  1. 评估并生成模型?

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

  1. 二进制化语言模型文件

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

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

  1. 查询测试

可以对该语言模型进行查询,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 通常有以下两个问题:

  1. 加载速度比较慢, 可以用二进制化来解决
  2. 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 修改指向二进制的文件::

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

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值