Skip to content

WtaoZhao/Machine-Translation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

面向段落对齐语料的层级注意力翻译模型

Neural Machine Translation with Hierarchical Attention Networks based on Paragraph-parallel Corpus

flowchart

1. 收集段对齐语料

(1)在 Amazon 中国官网下载英汉双语小说电子版;

(2)将电子版小说转换为文本;

(3)结合程序进行人工校正对齐;

(4)整理得到段对齐语料库,拆分为训练集、验证集、测试集(/sentAlignProcess/src/)。

注:数据集中也包含收集到的其它类型的段对齐语料,如WIT语料库

2. 段落分割:将段对齐语料转化为句对齐语料

(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

3. 数据集预处理

将上一步骤中得到的语料放入 /hannmtModel/HANNMT/preprocess/src 中,调用脚本 prepare.sh 进行预处理,对训练集和验证集分别进行英语标准化和汉语分词,得到预处理好的数据集(/hannmtModel/HANNMT/preprocess/dataset)。

注:第3、4、5部分参考了 idiap/HAN_NMT 的代码,是论文 [2] 中提到的篇章级层级注意力网络的 OpenNMT-Pytorch 实现。我们对原代码进行修改,使之更适合段落级的翻译,其中英语标准化使用 moses 工具,中文分词使用 jieba Python 库。此部分代码运行要求在 /hannmtModel 目录下安装 moses。

4. 训练模型

运行 shell 脚本直接训练模型,模型超参数需要在脚本中调节,包含以下四个脚本:

trainingBase.sh 训练句级 Transformer 基准模型

trainingEnc.sh 训练层级编码器(基于句级)

trainingDec.sh 训练层级解码器(基于句级)

trainingJoint.sh 训练层级联合模型(基于层级编码器、解码器)

每训练 1 个 epoch , 模型 checkpoint 自动保存,有助于预训练或更换数据集进一步训练。

5. 测试模型

将第 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 分数。

6. 模型对比与评估

将第 2 部分生成的语料库作为以下翻译模型的输入,进行训练、测试、计算 BLEU 分数,对比评估本文提出的模型相对于前人翻译模型的优势与不足,代码位于 /hannmtModel/HANNMT/compare/ ,Pytorch 实现,参考代码 bentrevett/pytorch-seq2seq

1 - RNN Encoder-Decoder for SMT [code] (parallel-gpu)

Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation, 2014/9

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.

About

大创项目,层级注意力机器翻译

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published