zoukankan      html  css  js  c++  java
  • 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等名词 

  • 相关阅读:
    ACM士兵排队
    ACM两个士兵打牌
    ACM平衡的括号
    ACM复合词
    ACM第二次比赛( C )
    ACM比赛(第二次A)
    ACM比赛(进制转换)
    ACM比赛(11462 Age Sort)
    ACM比赛
    hdu 1241 Oil Deposits(DFS求连通块)
  • 原文地址:https://www.cnblogs.com/inspirationhyl/p/3547990.html
Copyright © 2011-2022 走看看