NiuTrans是一个开源的统计机器翻译系统,由中国的 东北大学 自然语言处理实验室 开发,相对于moses,笔者认为Niutrans更好搭建,比如Niutrans内嵌小巧、高效的N-元语言模型,无需其它软件(如SRILM)的外部支持。
另外: NiuTrans支持多个统计机器翻译模型:
a) 基于短语的模型
b) 基于层次短语的模型
c) 基于句法(树到串,串到树,树到树)的模型
所以还是比较好的契合使用需求,关键是Niutrans在windows下也可很好使用,笔者是在32bit的windows下搭建的。
一、准备工作
在正式搭建Niutrans之前,应该保证机器上安装有:Visual Studio 2008,Cygwin,以及 perl(5.10.0 版本或更高)。这里主要是在安装Cygwin的时候遇见了点问题,先对Cygwin做一个简要介绍:
修改cygwin.BAT文件如下 @echo off D: set CYGWIN=tty notitle glob set PATH=%PATH%;d:\cygwin\bin;d:\cygwin\sbin;d:\cygwin\usr\bin;d:\cygwin\usr\sbin;d:\cygwin\usr\local\bin set LD_LIBRARY_PATH=d:\cygwin\lib;d:\cygwin\usr\lib;d:\cygwin\usr\local\lib chdir D:\cygwin\bin bash --login -i 里面的路径改成你的安装路径
PS:其次根据上面的方法便可以做到环境变量的修改,不过注意哦,一定要关闭cygwin环境,重新运行.bat文件,才会有修改。(寡人在这上面耗费了好长时间呢)
二、安装下载niutrans
点击 下载地址1 或 下载地址2 下载系统的源代码和样本数据。解压下载的软件包(假设安装目录是“NiuTrans”),按照如下说明安装系统。
- 在“NiuTrans\src\”下打开“NiuTrans.sln”
- 设置编译模式为“Release”
- 设置平台模式为“Win32”(32位OS)或“x64”(64位OS)
- 构建整体解决方案
在“NiuTrans\bin\”目录下生成了所有的二进制文件。
三、训练
-
a). 训练数据:双语句对以及对应的词对齐结果
b). 开发数据:带有至少一个参考译文的源语句子集
c). 测试数据:新句集
d). 评价数据:测试数据集的参考答案
NiuTrans软件包中提供了一些样本文件,供系统实验以及研究格式要求之用,位于"NiuTrans/sample-data/sample-submission-version"文件夹中。
sample-submission-version/ -- TM-training-set/ # 带有词对齐结果的双语句对集(共有100,000句对) -- chinese.txt # 源语句子集 -- english.txt # 目标语句子集(英文全部转换为小写字符) -- Alignment.txt # 句对的词对齐结果 -- LM-training-set/ -- e.lm.txt # 单语语料,用于训练语言模型(100K目标语句子) -- Dev-set/ -- Niu.dev.txt # 开发数据集,用于权重调优(400句子集) -- Test-set/ -- Niu.test.txt # 测试数据集(1K句子集) -- Reference-for-evaluation/ -- Niu.test.reference # 测试数据集的参考译文(1K句子集) -- Recaser-training-set/ -- english.keepcase.txt # 单语语料,用于训练Recasing模型(10K句子集) -- description-of-the-sample-data # 样本数据的描述
perl NiuTrans-monolingual.clear.illegal.char.pl\ -tgt ../sample-data/sample-submission-version/Test-set/chatWithFriend.txt \ -outTgt ../sample-data/sample-submission-version/Test-set/chatWithFriend.txt.clear \ -lang zh
2.中文测试集的处理(这里主要指的是分词 小编采用短语系统 只有分词完成后 才能翻译):
perl NiuTrans-running-segmenter.pl \
-lang ch \
-input ../sample-data/sample-submission-version/Test-set/chatWithFriend.txt.clear \
-output ../sample-data/sample-submission-version/Test-set/chatWithFriend.txt.pre \
-method 11
perl NiuTrans-phrase-decoder-model.pl \
-test ../sample-data/sample-submission-version/Test-set/chatWithFriend.txt.clear \
-c ../work/NiuTrans.phrase.user.config \
-output chatWithFriend1best.out.pro
看似一切顺利的过程,等小编查看结果时——惊呆了,翻译结果仍然是中文,于是花费很长时间狂找原因,下面提供给大家原因,希望不要走我走过的弯路,NiuTrans的测试数据的格式是“UTF-8 without BOM”,如果不是,就需要转换成这个编码方式才可以进行翻译,多说一句——常用的编辑软件大多都支持编码转换,小编用的是Notepad++ 帮忙转换的。之后就可以进行正常翻译了。
关于编码格式,啰嗦几句,推荐几个查到的资料做参考:
1.http://www.tamasoft.co.jp/en/general-info/unicode.html Unicode的编码表
2.http://www.cnblogs.com/mikecode/archive/2006/03/06/343919.html Unicode编码,简要解释UCS、UTF、BMP、BOM等名词