小牛翻译开源社区

句法系统使用说明

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                 # 句对的词对齐结果
           -- chinese.tree.txt              # 源语言句法树
           -- english.tree.txt              # 目标语言句法树
      -- LM-training-set/
           -- e.lm.txt                      # 单语语料,用于训练语言模型(100K目标语句子)
      -- Dev-set/
           -- Niu.dev.txt                   # 开发数据集,用于权重调优(400句子集)
           -- Niu.dev.tree.txt              # 包含源语言端句法树信息的开发集
      -- Test-set/
           -- Niu.test.txt                  # 测试数据集(1K句子集)
           -- Niu.test.tree.txt             # 包含句法树信息的测试数据集
      -- 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.syntax.s2t/ -p
    $> cd scripts/
    $> perl NiuTrans-syntax-train-model.pl \
            -model s2t \
            -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 \
            -ttree ../sample-data/sample-submission-version/TM-training-set/english.tree.txt \
            -out   ../work/model.syntax.s2t/syntax.string2tree.rule
    

    句法树到串

    $> cd NiuTrans/sample-data/
    $> tar xzf sample.tar.gz
    $> cd ../
    $> mkdir work/model.syntax.t2s/ -p
    $> cd scripts/
    $> perl NiuTrans-syntax-train-model.pl \
            -model t2s \
            -src   ../sample-data/sample-submission-version/TM-training-set/chinese.txt \
            -stree ../sample-data/sample-submission-version/TM-training-set/chinese.tree.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.syntax.t2s/syntax.tree2string.rule
    

    句法树到句法树

    $> cd NiuTrans/sample-data/
    $> tar xzf sample.tar.gz
    $> cd ../
    $> mkdir work/model.syntax.t2t/ -p
    $> cd scripts/
    $> perl NiuTrans-syntax-train-model.pl \
            -model t2t \
            -src   ../sample-data/sample-submission-version/TM-training-set/chinese.txt \
            -stree ../sample-data/sample-submission-version/TM-training-set/chinese.tree.txt \
            -tgt   ../sample-data/sample-submission-version/TM-training-set/english.txt \
            -ttree ../sample-data/sample-submission-version/TM-training-set/english.tree.txt \
            -aln   ../sample-data/sample-submission-version/TM-training-set/Alignment.txt \
            -out   ../work/model.syntax.t2t/syntax.tree2tree.rule
    
    “-model”为机器翻译的模型,该参数决定生成那种类型的规则,具体取值为“s2t”,“t2s”或“t2t”。
    “-src”,“-tgt”和“-aln”分别为源语言,目标语言以及二者之间的词对齐文件(每行一句)。
    “-stree”为源语言句子的句法树。
    “-ttree”为目标语言句子的句法树。

  • 输出

    串到句法树

    输出:在“NiuTrans/work/model.syntax.s2t/”目录下生成3个文件

    - syntax.string2tree.rule                    # 句法规则表
    - syntax.string2tree.rule.bina               # 二叉化句法规则表
    - syntax.string2tree.rule.unbina             # 非二叉化句法规则表
    

    句法树到串

    输出:在“NiuTrans/work/model.syntax.t2s/”目录下生成3个文件

    - syntax.tree2string.rule                    # 句法规则表
    - syntax.tree2string.rule.bina               # 二叉化句法规则表
    - syntax.tree2string.rule.unbina             # 非二叉化句法规则表
    

    句法树到句法树

    输出:在“NiuTrans/work/model.syntax.t2t/”目录下生成3个文件

    - syntax.tree2tree.rule                      # 句法规则表
    - syntax.tree2tree.rule.bina                 # 二叉化句法规则表
    - syntax.tree2tree.rule.unbina               # 非二叉化句法规则表
    

  • 注意:在运行“NiuTrans-syntax-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 NiuTrans/scripts/
    $> mkdir ../work/config/ -p
    $> perl NiuTrans-syntax-generate-mert-config.pl \
            -model      s2t \
            -syntaxrule ../work/model.syntax.s2t/syntax.string2tree.rule.bina \
            -lmdir      ../work/lm/ \
            -nref       1 \
            -ngram      3 \
            -out        ../work/config/NiuTrans.syntax.s2t.user.config
    

    句法树到串

    $> cd NiuTrans/scripts/
    $> mkdir ../work/config/ -p
    $> perl NiuTrans-syntax-generate-mert-config.pl \
            -model      t2s \
            -syntaxrule ../work/model.syntax.t2s/syntax.tree2string.rule.bina \
            -lmdir      ../work/lm/ \
            -nref       1 \
            -ngram      3 \
            -out        ../work/config/NiuTrans.syntax.t2s.user.config
    

    句法树到句法树

    $> cd NiuTrans/scripts/
    $> mkdir ../work/config/ -p
    $> perl NiuTrans-syntax-generate-mert-config.pl \
            -model      t2t \
            -syntaxrule ../work/model.syntax.t2t/syntax.tree2tree.rule.bina \
            -lmdir      ../work/lm/ \
            -nref       1 \
            -ngram      3 \
            -out ../work/config/NiuTrans.syntax.t2t.user.config
    
    “-model”表示用于MERT的句法规则类型,具体取值为“s2t”,“t2s”或“t2t”。
    “-syntaxrule”为句法规则表。
    “-lmdir”为包含N元语言模型和目标语端词汇表的目录。

    “-nref”表示源语言句子对应的候选翻译个数。
    “-ngram”为N元语言模型中的元数。
    “-out”为输出结果,即配置文件。

  • 输出

    串到句法树

    输出:生成配置文件并放在目录“NiuTrans/work/config”下,用户可根据需要修改该文件。

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

    句法树到串

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

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

    句法树到句法树

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

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

5. 权重调优

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

    串到句法树

    $> cd NiuTrans/scripts/
    $> perl NiuTrans-syntax-mert-model.pl \
            -model  s2t \
            -config ../work/config/NiuTrans.syntax.s2t.user.config \
            -dev    ../sample-data/sample-submission-version/Dev-set/Niu.dev.tree.txt \
            -nref   1 \
            -round  2 \
            -log    ../work/syntax-s2t-mert-model.log
    

    句法树到串

    $> cd NiuTrans/scripts/
    $> perl NiuTrans-syntax-mert-model.pl \
            -model  t2s
            -config ../work/config/NiuTrans.syntax.t2s.user.config \
            -dev    ../sample-data/sample-submission-version/Dev-set/Niu.dev.tree.txt \
            -nref   1 \
            -round  2 \
            -log    ../work/syntax-t2s-mert-model.log
    

    句法树到句法树

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

  • 输出:MERT之后,最优的特征权重被记录在配置文件“-config”的最后一行中。这些特征权重将被用于对新测试句的解码过程中。

6. 解码

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

    串到句法树

    $> cd NiuTrans/scripts/
    $> mkdir ../work/syntax.trans.result/ -p
    $> perl NiuTrans-syntax-decoder-model.pl \
            -model  s2t \
            -config ../work/config/NiuTrans.syntax.s2t.user.config \
            -test   ../sample-data/sample-submission-version/Test-set/Niu.test.tree.txt \
            -output ../work/syntax.trans.result/Niu.test.syntax.s2t.translated.en.txt
    

    句法树到串

    $> cd NiuTrans/scripts/
    $> mkdir ../work/syntax.trans.result/ -p
    $> perl NiuTrans-syntax-decoder-model.pl \
            -model  t2s \
            -config ../work/config/NiuTrans.syntax.t2s.user.config \
            -test   ../sample-data/sample-submission-version/Test-set/Niu.test.tree.txt \
            -output ../work/syntax.trans.result/Niu.test.syntax.t2s.translated.en.txt
    

    句法树到句法树

    $> cd NiuTrans/scripts/
    $> mkdir ../work/syntax.trans.result/ -p
    $> perl NiuTrans-syntax-decoder-model.pl \
            -model  t2t \
            -config ../work/config/NiuTrans.syntax.t2t.user.config \
            -test   ../sample-data/sample-submission-version/Test-set/Niu.test.tree.txt \
            -output ../work/syntax.trans.result/Niu.test.syntax.t2t.translated.en.txt
    
    “-model”为解码用到的模型类型,具体取值为“s2t”,“t2s”或“t2t”。
    “-config”为配置文件。
    “-test”为测试数据集(每行一句)。
    “-output”为翻译结果文件(如果未规定此选项,则翻译结果将被放入“stdout”中)。

  • 输出

    串到句法树

    输出:在“NiuTrans/work/syntax.trans.result”目录下生成翻译结果文件

    - Niu.test.syntax.s2t.translated.en.txt                # 测试句子的1-best翻译结果
    

    句法树到串

    输出:在“NiuTrans/work/syntax.trans.result”目录下生成翻译结果文件

    - Niu.test.syntax.t2s.translated.en.txt                # 测试句子的1-best翻译结果
    

    句法树到句法树

    输出:在“NiuTrans/work/syntax.trans.result”目录下生成翻译结果文件

    - Niu.test.syntax.t2t.translated.en.txt                # 测试句子的1-best翻译结果
    

7. 评价

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

    串到句法树

    $> perl NiuTrans-generate-xml-for-mteval.pl \
            -1f   ../work/syntax.trans.result/Niu.test.syntax.s2t.translated.en.txt \
            -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
    

    句法树到串

    $> perl NiuTrans-generate-xml-for-mteval.pl \
            -1f   ../work/syntax.trans.result/Niu.test.syntax.t2s.translated.en.txt \
            -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
    

    句法树到句法树

    $> perl NiuTrans-generate-xml-for-mteval.pl \
            -1f   ../work/syntax.trans.result/Niu.test.syntax.t2t.translated.en.txt \
            -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”为测试句子集的源语言句子及参考翻译结果文件。
    “-rnum”为每个测试句子含有的参考译文。
    “-r”为参考翻译文件。
    “-s”为源语句的文件。
    “-t”为MT系统生成的(1-best)翻译结果文件。

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

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