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

wgethttp://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.perlnews-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 --textnews-commentary-v8.fr-en.lm.en.gz news-commentary-v8.fr-en.arpa.en      经过这一步之后我们会得到一个*.arpa.en格式的语言模型文件,接下来为了程序的更快载入,使用KenLM对其进行二值化。

/home/w4tcy/moses/bin/build_binarynews-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 -alignmentgrow-diag-final-and -reordering msd-bidirectional-fe -lm0: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 -corpus corpus/news-commentary-v8.fr-en.clean -f fr -e en -alignment 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/mosestrain/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 0train/model/phrase-table.gz -nscores 5 -out binarised-model/phrase-table

/home/w4tcy/moses/bin/processLexicalTable -intrain/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

/home/w4tcy/moses/scripts/recaser/truecase.perl --modeltruecase-model.en  <newstest2011.tok.en > newstest2011.true.en

/home/w4tcy/moses/scripts/recaser/truecase.perl --modeltruecase-model.fr  <newstest2011.tok.fr > newstest2011.true.fr

进行翻译

nohup nice /home/w4tcy/moses/bin/moses-f /home/w4tcy/corpus/working/binarised-model/moses.ini< newstest2011.true.fr > newstest2011.out

最后进行BLEU评分

/home/w4tcy/moses/scripts/generic/multi-bleu.perl -lc newstest2011.true.en< newstest2011.out

得到BLEU评分,整个翻译过程就结束了。

最后BLEU评分-lc是无视大小写的BLEU评分,不使用参数-lc是大小写敏感的BLEU评分

在tuning和最终test的时候参考译文的数量以及分词等预处理,语言模型是n-gram的都会影响到最终BLEU分数

四、补充

1、所有training参数

1.1 基本选项

--root-dir-- 存放输出文件的根目录

--corpus-- 语料库文件名 (全路径名),不包含扩展

--e-- 英文语料库的拓展文件

--f-- 外文语料库的拓展文件

--lm-- 语言模型: <factor>:<order>:<filename>(选项可重复)

1.2 翻译模型设置

--alignment-factors--

--translation-factors--

--reordering-factors--

--generation-factors--

--decoding-steps--

1.3 词汇化语法重排模型

--reordering-- 指定重排模型训练一个使用以逗号分隔的config-strings的列表, 参见FactoredTraining.BuildReorderingModel.(default distance)

--reordering-smooth-- 指定参数用在训练词汇化语法重新排序模型。如果字母"u" 跟随着常数, 平滑基于实际数量。(default 0.5)

1.4 部分training

因为MOSES是模块化的可以只使用部分功能,而使用更优异的其他方法

1. 准备数据

2. 运行GIZA++

3. 字对齐

4. 得到词汇转换表

5. 提取短语

6. 短语评分

7. 构建重排序模型

8. 构建生成模型

9. 创建配置文件

--first-step-- 训练过程的第一步 (default 1)

--last-step-- 训练过程的最后一步 (default7)

1.5 文件路径

--corpus-dir-- 语料库的目录 (default$ROOT/corpus)

--lexical-dir-- 词汇翻译概率的目录 (default$ROOT/model)

--model-dir-- 模型目录 (default$ROOT/model)

--extract-file-- 抽取的文件 (default$ROOT/model/extract)

--giza-f2e-- GIZA++ 目录 (default$ROOT/giza.$F-$E)

--giza-e2f-- 倒转的 GIZA++ 目录 (default $ROOT/giza.$E-$F)

1.6 对齐的启发式

--alignment-- 用于词对齐的启发式:intersect, union, grow, grow-final, grow-diag, grow-diag-final (default),grow-diag-final-and, srctotgt, tgttosrc

intersect-- 两个GIZA++算法使用后的交集。这通常产生大量被提取的短语, 因为未对齐短语产生大量自由对齐的短语。

union-- 两个GIZA++算法使用后的并集。

grow-diag-final-- 默认的启发式

grow-diag-- 同上,但是不运行FINAL()功能

grow-- 同上,但是使用不同的临近定义。现在对角相邻对齐点被排除在外。 grow -- 没有对角相邻对齐点,但是有FINAL()

1.7 最大短于长度

--max-phrase-length-- 加入短于表中的最大短于长度(default7)

1.8 GIZA++选项

--giza-option-- GIZA++ 训练的额外选项

1.9 大型训练语料的处理

--parts-- 通过部分运行snt2cooc为GIZA++准备数据

--direction-- 仅在1、2的指导下运行训练步骤 2  (并行化的)

1.10 其他

--verbose-- 打印附加的词对齐信息

--no-lexical-weighting-- 对于短语表仅使用条件概率不使用词汇权重

MOSES统计机器翻译系统实验过程相关推荐

  1. MOSES统计机器翻译系统实现过程

    MOSES安装以及初级说明 作为初学者对MOSES现在也没有什么深入的了解就在这里嫌丑,浅显的介绍一下. 首先是moses的官网:http://www.statmt.org/moses/ 里面资料很详 ...

  2. Ubuntu10.10 32位系统下moses统计机器翻译系统使用命令记录

    准备语料 /disknew/zw/moses/work/corpus translated.ench 1035224句已分词 数据预处理 过滤掉长句子 /tools/moses-scripts/scr ...

  3. 最新的统计机器翻译系统教程(不定期更新)

    本文目标: 基于moses,Giza++和IRSTLM搭建自己的统计机器翻译系统 简单了解统计机器翻译的基本知识原理 提供前人已总结的优质资源和资料 ps:为了保证内容质量以及简单易懂性,我将分多次更 ...

  4. 统计机器翻译(SMT)工具Moses在Ubuntu上的安装及使用(安装篇)

    统计机器翻译(SMT)工具Moses在Ubuntu上的安装及使用(安装篇) 前言 Ubuntu配置 1.关闭系统自动休眠(可选) 2.更换软件源 Moses安装 1.安装相关依赖包: 2.检查gcc和 ...

  5. 神经机器翻译系统资料

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 简介 自2013年提出了神经机器翻译系统之后,神经机器翻译系统 ...

  6. 《中国人工智能学会通讯》——2.27 利用深度学习改进统计机器翻译

    2.27 利用深度学习改进统计机器翻译 利用深度学习改进统计机器翻译的核心思想是以统计机器翻译为主体,使用深度学习改进其中的关键模块,如语言模型[1] .翻译模型 [2] .调序模型 [3] .词语对 ...

  7. moses 编译_手把手教你编译MOSES机器翻译系统 | 学步园

    摩西是一个由英国爱丁堡大学的SMT先锋团队[科恩等人,2007 ]开发的翻译系统.摩西的最新版本支持许多特征和功能.例如,它支持基于短语和基于语法基础的模型(从短语/规则提取解码).同时,它提供的因素 ...

  8. 统计机器翻译与神经机器翻译区别_如果每个人都献出一点爱,就会拥有一套超级牛的机器翻译系统...

    所谓机器翻译技术就是利用计算机软件技术实现不同语言之间的自动翻译,目的为了帮助解决或缓解人工翻译代价过高和效率过低的问题.特别是针对大规模数据的实时和低成本翻译的应用场景,非人工翻译所为,有效利用机器 ...

  9. NiuTrans 统计机器翻译开源系统

    NiuTrans统计机器翻译开源系统由东北大学自然语言处理实验室开发.该系统使用C++/C编程语言进行编码,具有运行速度快.使用内存少等优点.目前NiuTrans支持基于(层次)短语的模型. NiuT ...

最新文章

  1. python 绘图脚本系列简单记录
  2. GAN生成对抗网络-text to image原理与基本实现-文字转图像-11
  3. EOJ_1102_任务调度问题
  4. linux下时间同步的两种方法分享
  5. python-mysql超简单银行转账
  6. linux 下拉式 终端,Gnome桌面的下拉式终端: Guake
  7. 计算机硬件系统三个子系统,硬件:计算机的体系结构3.ppt
  8. 基于MyEclipse+JSP+Mysql+Tomcat开发得塞北村镇旅游网站设计
  9. 很多人都对3dB带宽有一定误解
  10. 新支点“B4G+5G”聚合路由器多链路图传技术巩固安防监控行业
  11. python模拟ios_使用Xcode + Python进行IOS运动轨迹模拟!
  12. Python生成截图选餐GIF动画
  13. Digital Roots
  14. 汽车电子PKE与RKE学习笔记
  15. 硬皮病 中医疗法大全
  16. QNAP NAS SSH 下如何 重置网络与虚拟交换机
  17. 计算机主机报警是什么原因,不同的电脑故障声音分别是什么意思【详解】
  18. 一枚工程师的深圳印象
  19. 靠着这份年终总结,我涨薪8K,成为领导眼中最闪亮的星~
  20. RunTime Error! R6025 -pure virtual function call

热门文章

  1. 骑士CMS4.1.23本地包含漏洞
  2. JVM-内存区域 堆、方法区,虚拟机栈、程序计数器详解
  3. 把uTorrent做成绿色版
  4. 0基础女生学网络安全合适吗
  5. 22-23 - 页式内存管理
  6. Recon-NG进行信息收集
  7. 第86场双周赛 NO.3 被列覆盖的最多行数
  8. Electron 实现百度快搜
  9. 多线程+SOCKET编程实现qq群聊的服务端和客户端
  10. SSH——Hibernate初学者之旅(四)