(1)在 Amazon 中国官网下载英汉双语小说电子版;
(2)将电子版小说转换为文本;
(3)结合程序进行人工校正对齐;
(4)整理得到段对齐语料库,拆分为训练集、验证集、测试集(/sentAlignProcess/src/)。
注:数据集中也包含收集到的其它类型的段对齐语料,如WIT语料库。
(1)利用 hardcut.py 将 /src 中段对齐语料库直接按标点拆开,并作相应标记,放入 /dest 中;
(2)利用 Champollion-1.2 开源句对齐工具包将 /dest 中文件生成粗略句对齐索引文件,放入 /afterChamp 中,该对齐工具基于论文 [1] ;
/home/[your DIR]/champollion-1.2/bin/champollion.EC_utf8 train[valid/test].cut.en train[valid/test].cut.zh train[valid/test].cut.align
(3)利用 generate.py 中算法整理得到标准句对齐语料和段落索引文件,放入 /corpus 中。
注1:在实际实验过程中,我们发现 Champollion 无法处理过大文件(此处的训练集)的对齐,所以我们考虑将训练集按段落拆分成1000个小文件(详见trainSetMap.py),然后分别用 Champollion 对齐(详见drive.sh),再合并至一个对齐文件 train.cut.align(详见trainSetReduce.py);
注2:.doc 段落索引文件含义详见 idiap/HAN_NMT。
将上一步骤中得到的语料放入 /hannmtModel/HANNMT/preprocess/src 中,调用脚本 prepare.sh 进行预处理,对训练集和验证集分别进行英语标准化和汉语分词,得到预处理好的数据集(/hannmtModel/HANNMT/preprocess/dataset)。
注:第3、4、5部分参考了 idiap/HAN_NMT 的代码,是论文 [2] 中提到的篇章级层级注意力网络的 OpenNMT-Pytorch 实现。我们对原代码进行修改,使之更适合段落级的翻译,其中英语标准化使用 moses 工具,中文分词使用 jieba Python 库。此部分代码运行要求在 /hannmtModel 目录下安装 moses。
运行 shell 脚本直接训练模型,模型超参数需要在脚本中调节,包含以下四个脚本:
trainingBase.sh 训练句级 Transformer 基准模型
trainingEnc.sh 训练层级编码器(基于句级)
trainingDec.sh 训练层级解码器(基于句级)
trainingJoint.sh 训练层级联合模型(基于层级编码器、解码器)
每训练 1 个 epoch , 模型 checkpoint 自动保存,有助于预训练或更换数据集进一步训练。
将第 2 部分生成的测试语料用于此步的模型测试,尝试将英文翻译成中文。测试环节分以下几个步骤:
(1)运行脚本 translate.sh 对测试语料中的英文进行翻译,生成翻译原始文件 prediction.raw.zh ;
(2)对上述原始文件,调用 process.py 处理,生成翻译句子级文件 prediction.sent.zh 和段落级文件 prediction.para.zh ;
(3)计算 BLEU 分数 [3]。直接调用 calculateBLEU.py 进行计算,输出 1,2,3,4-BLEU 分数,对翻译结果的充分性和流畅性进行评估,也便于与其它翻译模型进行比较。
说明:在计算 BLEU 分数时,将句子级预测 prediction.sent.zh 作为待评估文件(candidate),将测试语料目标文件 test.corpus.zh 、测试语料源文件 test.corpus.en 的 Google/Baidu 翻译结果三者作为参考文件(Reference),以便计算得到更客观合理的 BLEU 分数。
将第 2 部分生成的语料库作为以下翻译模型的输入,进行训练、测试、计算 BLEU 分数,对比评估本文提出的模型相对于前人翻译模型的优势与不足,代码位于 /hannmtModel/HANNMT/compare/ ,Pytorch 实现,参考代码 bentrevett/pytorch-seq2seq。
1 - RNN Encoder-Decoder for SMT [code] (parallel-gpu)
2 - LSTM Encoder-Decoder for NMT [code] (parallel-gpu)
Sequence to Sequence Learning with Neural Networks, 2014/12
3 - RNN Encoder-Decoder with Attention Mechanism [code] (parallel-gpu)
Neural Machine Translation by Jointly Learning to Align and Translate, 2016/5
4 - ConvS2S for NMT [code] (parallel-gpu)
Convolutional Sequence to Sequence Learning, 2017/7
5 - Transformer model [code] (parallel-gpu)
Attention Is All You Need, 2017/12 (i.e. sentence-level HAN)
[1] Ma, Xiaoyi. "Champollion: A Robust Parallel Text Sentence Aligner." LREC. 2006.
[2] Miculicich, Lesly, et al. "Document-level neural machine translation with hierarchical attention networks." arXiv preprint arXiv:1809.01576 (2018).
[3] Papineni, Kishore, et al. "BLEU: a method for automatic evaluation of machine translation." Proceedings of the 40th annual meeting of the Association for Computational Linguistics. 2002.