小牛翻译开源社区

短语系统使用说明

1. 准备数据

  • NiuTrans翻译系统是“数据驱动”的MT系统,要求使用数据对系统进行训练和/或调参。在运行该系统前要求用户准备好以下数据:
    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     # 样本数据的描述
    
  • 格式:请解压“NiuTrans/sample-data/sample.tar.gz”,有关数据格式的更多信息参见“description-of-the-sample-data”。

  • 以下各步骤中使用上述数据集来讲解如何运行NiuTrans系统(如何训练MT模型,调整特征权重,以及对测试句进行解码等)。

2. 训练翻译模型

  • 操作说明(要求安装perl。此外, Windows用户要求安装Cygwin)

    $> cd NiuTrans/sample-data/
    $> tar xzf sample.tar.gz              # 如果“sample.tar.gz”已经解压缩,则忽略此步
    $> cd ../
    $> mkdir work/model.phrase/ -p
    $> cd scripts/
    $> perl NiuTrans-phrase-train-model.pl \
            -tmdir ../work/model.phrase/ \
            -s ../sample-data/sample-submission-version/TM-training-set/chinese.txt \
            -t ../sample-data/sample-submission-version/TM-training-set/english.txt \
            -a ../sample-data/sample-submission-version/TM-training-set/Alignment.txt
    
    “-tmdir”为生成各种表和模型文件的目标目录
    “-s”,“-t”和“-a”分别指源语句子、目标语句子和二者的对齐结果(每行一句)

  • 输出:在“NiuTrans/work/model.phrase/”目录中生成3个文件

    - me.reordering.table                 # ME调序模型
    - msd.reordering.table                # MSD调序模型
    - phrase.translation.table            # 短语翻译模型
    

  • 注意:在运行“NiuTrans-phrase-train-model.pl”前请进入“NiuTrans/scripts/”目录。

3. 训练N元语言模型

  • 操作说明

    $> cd ../
    $> mkdir work/lm/
    $> cd scripts/
    $> perl NiuTrans-training-ngram-LM.pl \
            -corpus ../sample-data/sample-submission-version/LM-training-set/e.lm.txt \
            -ngram  3 \
            -vocab  ../work/lm/lm.vocab \
            -lmbin  ../work/lm/lm.trie.data
    
    “-ngram”为N元语言模型中的元数。如,“-ngram 3”指3元语言模型。
    “-vocab”为所生成的目标语端语言模型词汇表。
    “-lmbin”为所生成的目标语端语言模型的二进制文件。

  • 输出: 生成两个文件,放在目录“NiuTrans/work/lm/”

    - lm.vocab                            # 目标语端词汇表
    - lm.trie.data                        # 二进制语言模型
    

4. 生成配置文件

  • 操作说明

    $> cd scripts/
    $> perl NiuTrans-phrase-generate-mert-config.pl \ 
            -tmdir  ../work/model.phrase/ \
            -lmdir  ../work/lm/ \
            -ngram  3 \
            -o      ../work/NiuTrans.phrase.user.config
    
    “-tmdir”为包含短语翻译表和调序模型文件的目录。
    “-lmdir”为包含N元语言模型和目标语端词汇表的目录。
    “-ngram”为N元语言模型中的元数。
    “-o”为输出结果,即配置文件。

  • 输出:生成配置文件并放在目录“NiuTrans/work/”下:

    - NiuTrans.phrase.user.config           # 用于解码的配置文件
    

5. 规则过滤

  • 使用该步骤,可以极大提高您使用NiuTrans进行研究的效率;如果您对此步不感兴趣,可直接进行“6. 权重调优”。

  • 操作说明(要求使用perl)

    $> cd ..
    $> cat sample-data/sample-submission-version/Dev-set/Niu.dev.txt \
           sample-data/sample-submission-version/Reference-for-evaluation/Niu.test.reference \
           > sample-data/sample-submission-version/Dev-set/Niu.dev.and.test.txt
    $> bin/NiuTrans.PhraseExtractor --FILPD \
            -dev     sample-data/sample-submission-version/Dev-set/Niu.dev.and.test.txt \
            -in      work/model.phrase/phrase.translation.table \
            -out     work/model.phrase/phrase.translation.table.filterDevAndTest \
            -maxlen  10 \
            -rnum    1
    $> perl scripts/filter.msd.model.pl \
            work/model.phrase/phrase.translation.table.filterDevAndTest \  
            work/model.phrase/msd.reordering.table \
            > work/model.phrase/msd.reordering.table.filterDevAndTest
    
    “-dev”为权重调优的开发集,在这里使用的文件将开发集和测试集进行了合并。
    “-in”为待过滤的短语翻译表。
    “-out”为过滤后的短语翻译表。
    “-maxlen”为短语翻译表中短语的最大长度。
    “-rnum”为开发集中参考答案的个数,sample data中参考答案个数为1。

  • 输出:配置文件“NiuTrans/work/NiuTrans.phrase.user.config”中使用的短语翻译表及MSD调序模型重新配置。

       param="MSD-Reordering-Model"   value="../work/model.phrase/msd.reordering.table"
       修改为
       param="MSD-Reordering-Model"   value="../work/model.phrase/msd.reordering.table.filterDevAndTest"
       
       param="Phrase-Table"           value="../work/model.phrase/phrase.translation.table"
       修改为
       param="Phrase-Table"           value="../work/model.phrase/phrase.translation.table.filterDevAndTest"
    

6. 权重调优

  • 操作说明(要求使用perl)

    $> perl NiuTrans-phrase-mert-model.pl \
            -dev  ../sample-data/sample-submission-version/Dev-set/Niu.dev.txt \
            -c    ../work/NiuTrans.phrase.user.config \
            -nref 1 \
            -r    2 \
            -l    ../work/mert-model.log
    
    “-dev”为权重调优的开发集。
    “-c”为以前的步骤中生成的配置文件。
    “-nref”为每个源语句子提供的参考译文的数量。
    “-r”为执行MERT程序的轮数 (初始设置为1轮 = 15 MERT 循环)。
    “-l”为MERT生成的log文件。

  • 输出:最优的特征权重被记录在配置文件“NiuTrans/work/NiuTrans.phrase.user.config”中。这些特征权重将被用于对测试句的解码过程中。

7. 解码

  • 操作说明(要求使用perl)

    $> perl NiuTrans-phrase-decoder-model.pl \
            -test   ../sample-data/sample-submission-version/Test-set/Niu.test.txt \
            -c      ../work/NiuTrans.phrase.user.config \
            -output 1best.out
    
    “-test”为测试数据集(每行一句)。
    “-c”为配置文件。
    “-output”为翻译结果文件(如果未规定此选项,则翻译结果将被放入“stdout”中)。

  • 输出:在“NiuTrans/scripts/”目录下生成翻译结果文件

    - 1best.out                         # 测试句子的1-best翻译结果
    

8. 恢复大写信息(recasing)

  • 操作说明(要求使用perl)

    $> mkdir ../work/model.recasing -p
    $> perl NiuTrans-training-recase-model.pl \
            -corpus   ../sample-data/sample-submission-version/Recaser-training-set/english.keepcase.txt \
            -modelDir ../work/model.recasing
    $> perl NiuTrans-recaser.pl \
            -config ../work/model.recasing/recased.config.file \
            -test   1best.out \
            -output 1best.out.recased
    
    “-corpus”为训练数据集(每行一句)。
    “-modelDir”为模型文件及配置文件的生成目录。

  • 输出:在“NiuTrans/work/model/recasing”目录下生成模型及配置文件

    - recased.config.file               # Recasing模型配置文件
    - recased.lm.trie.data              
    - recased.lm.vocab
    - recased.null
    - recased.phrase.translation.table
    

    输出:在“NiuTrans/scripts”目录下生成翻译结果文件

    - 1best.out.recased              
    

  • 注意:这个步骤仅对目标语为英文的翻译任务有效。

9. Detokenizer

  • 操作说明(要求使用perl)

    $> perl NiuTrans-detokenizer.pl \
            -in  1best.out.recased \
            -out 1best.out.recased.detoken
    
    “-in”为输入文件。
    “-output”为输出文件。

  • 输出:在“NiuTrans/scripts/”目录下生成最终文件

    - 1best.out.recased.detoken         
    

  • 注意:这个步骤仅对目标语进行过tokenization的语言有效,比如英文

10. 评价

  • 操作说明(要求使用perl)

    $> perl NiuTrans-generate-xml-for-mteval.pl \
            -1f   1best.out \
            -tf   ../sample-data/sample-submission-version/Reference-for-evaluation/Niu.test.reference \
            -rnum 1
    $> perl mteval-v13a.pl \
            -r ref.xml \
            -s src.xml \
            -t tst.xml
    
    “-1f”为测试句子集的1-best翻译结果文件。
    “-tf”为测试句子集的源语言句子及参考翻译结果文件。
    “-r”为参考翻译文件。
    “-s”为源语句的文件。
    “-t”为MT系统生成的(1-best)翻译结果文件。

  • 输出:显示IBM版的BLEU值。如果以上各个步骤正确,您将得到测试样本数据的BLEU值约为0.2412

  • 注意:脚本mteval-v13a.pl依赖XML::Parser包。如果您的系统中没有安装XML::Parser,请按照以下命令行进行安装。

    $> su root
    $> tar xzf XML-Parser-2.41.tar.gz
    $> cd XML-Parser-2.41/
    $> perl Makefile.PL
    $> make install
    


高级用法
除了以上简明操作步骤以外,您可以从这里获得关于NiuTrans更多高级的设置。一般来说,通过使用这些高级的设置,一般会获得BLEU值的提高,希望有所帮助!