小牛翻译开源社区

层次短语系统使用说明

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句子集)
      -- 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
    $> cd ../
    $> mkdir work/model.hierarchy/ -p
    $> cd scripts/
    $> perl NiuTrans-hierarchy-train-model.pl \
            -src ../sample-data/sample-submission-version/TM-training-set/chinese.txt \
            -tgt ../sample-data/sample-submission-version/TM-training-set/english.txt \
            -aln ../sample-data/sample-submission-version/TM-training-set/Alignment.txt \
            -out ../work/model.hierarchy/hierarchy.rule.table
    
    “-out”为生成的层次短语规则表。
    “-src”,“-tgt”和“-aln”分别为源语言,目标语言以及二者之间的词对齐文件(每行一句)。

  • 输出:生成一个文件,放在目录“NiuTrans/work/model.hierarchy/”

    - hierarchy.rule.table                    # 层次短语规则表
    

  • 注意:在运行“NiuTrans-hierarchy-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-hierarchy-generate-mert-config.pl \
            -rule  ../work/model.hierarchy/hierarchy.rule.table \
            -lmdir ../work/lm/ \
            -nref  1 \
            -ngram 3 \
            -out   ../work/NiuTrans.hierarchy.user.config
    
    “-rule”为层次短语规则表。
    “-lmdir”为包含N元语言模型和目标语端词汇表的目录。
    “-ngram”为N元语言模型中的元数。
    “-out”为输出结果,即配置文件。

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

    - NiuTrans.hierarchy.user.config           # 用于MERT和解码的配置文件
    

5. 规则过滤

  • 使用开发集和测试集对规则表进行过滤;如果您对此步不感兴趣,可直接进行“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.hierarchy/hierarchy.rule.table \
            -out     work/model.hierarchy/hierarchy.rule.table.filterDevAndTest \
            -maxlen  10 \
            -rnum    1
    $> vim work/NiuTrans.hierarchy.user.config
       param="SCFG-Rule-Set"          value="../work/model.hierarchy/hierarchy.rule.table"
       修改为
       param="SCFG-Rule-Set"          value="../work/model.hierarchy/hierarchy.rule.table.filterDevAndTest"   
    
    “-dev”为权重调优的开发集,在这里使用的文件将开发集和测试集进行了合并。
    “-in”为待过滤的层次短语规则。
    “-out”为过滤后的层次短语规则。
    “-maxlen”为层次短语规则中规则最大长度。
    “-rnum”为开发集中参考答案的个数,sample data中参考答案个数为1。

  • 输出:配置文件“NiuTrans/work/NiuTrans.hierarchy.user.config”中使用的层次短语规则表重新配置。

6. 权重调优

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

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

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

7. 解码

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

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

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

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

8. 评价

  • 操作说明(要求使用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.2417 (0.2386)

  • 注意:脚本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值的提高,希望有所帮助!