Niutrans 机器翻译系统的搭建

  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做一个简要介绍:

这是一个在windows 上模拟linux的软件,使用的命令与linux下的命令行相同,软件从http://www.cygwin.com/install.html 上下载,并按照步骤安装即可。
 
     安装成功之后,要配置环境变量,我当时在windows配置环境变量后,想在cygwin上运行perl脚本,发现显示“command not found”,这时使用echo $PATH命令查看安装路径——发现perl的安装路径不在其中,决定在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\”目录下生成了所有的二进制文件。    

 

三、训练

_ 学习翻译模型learning translation model
_ 学习语言模型learning n-gram language model
 
 详细步骤可参见网站:http://www.nlplab.com/NiuPlan/NiuTrans.Phrase.ch.html
 
这里强调一点:要准备训练数据,这一点很关键
 
  • 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     # 样本数据的描述

 

这个过程需要的时间可能较长,需耐心等待,另外,如果想用自己的句子做训练的话,可参照:http://www.nlplab.com/NiuPlan/NiuTrans.YourData.ch.html
 
四 使用自己的语料做测试
 
  关于这点,东北大学NLP实验室已经做了很好的说明,这里列举一下,我在这个过程中遇见的问题,当我在测试我自己的数据时(我用汉语做的测试),我首先进行这样几个工作:
 
 1.单语乱码过滤(用于去掉训练语料中多余的行,并且对语料中出现的时间等格式进行规范):
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

  

 3.进行翻译,翻译过程同原带测试数据的翻译方式相同:
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等名词 

posted @ 2014-02-13 13:53  inspirationhyl  阅读(2711)  评论(0编辑  收藏  举报