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
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
相关文章推荐
- Ubuntu 14.04 64位机上用Caffe+MNIST训练Lenet网络操作步骤
- OpenCV 级联分类器训练(一)——步骤和方法
- 采用opencv_cascadetrain进行训练的步骤及注意事项
- Tesseract-OCR3.0语言库训练步骤
- TensorFlow入门深度学习--02.构建神经网络训练算法的步骤
- MOSES翻译系统的训练,调优和使用
- SVM样本训练步骤
- caffe 的一般训练步骤
- MOSES系统训练中间过程和意义详解
- Moses安装训练全过程
- windows环境Caffe安装配置步骤(无GPU)及mnist训练
- HALCON OCR训练文件生成步骤
- Tesseract-OCR3.0语言库训练步骤
- 采用opencv_cascadetrain进行训练的步骤及注意事项
- windows10下alexnet模型训练步骤
- 采用opencv_cascadetrain进行训练的步骤及注意事项
- Tesseract3.02训练生成新的识别语言库的详细步骤
- tensorflow1.2训练cifar10步骤以及问题汇总
- caffe训练自己的模型步骤