unilm/infoxlm 中的卷积序列到序列机器翻译:fconv 架构、预训练模型与 WMT 复现全指南
【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm
本文以 infoxlm/fairseq/examples/conv_seq2seq/README.md 为核心,系统讲解 unilm 仓库 infoxlm 子项目内置的 fairseq 框架中,由 Gehring 等人(ICML 2017)提出的全卷积序列到序列模型(Convolutional Sequence to Sequence Learning):包括三个 WMT 预训练翻译模型的清单与使用方法、从数据准备到训练评估的完整复现流程,以及fconv模型的源码级实现解析。读完本文,你将能够下载并使用conv.wmt14.en-fr/conv.wmt14.en-de/conv.wmt17.en-de预训练模型,也能基于fconv_wmt_en_de、fconv_wmt_en_fr架构从零训练自己的卷积翻译模型。
一、背景:为什么研究卷积序列到序列模型
2017 年,Gehring 等人提出了一种完全基于卷积的序列到序列模型(Convolutional Sequence to Sequence Learning),其论文发表于 ICML 2017。与当时主流的 RNN 序列模型不同,该模型使用时间维度的卷积层同时建模编码器与解码器,从而:
- 支持对源序列的并行计算,训练速度显著优于逐时间步展开的循环网络;
- 通过多层卷积堆叠获得足够大的感受野,以捕获长距离依赖;
- 在解码器中配合**多头注意力的变体(多层逐层注意力)**对齐源与目标信息。
在 unilm 仓库的 infoxlm 子项目中,fairseq 框架完整保留了这一模型的实现、预训练权重与复现脚本,对应源码位于 infoxlm/fairseq/fairseq/models/fconv.py。无论是研究卷积翻译模型的历史实现,还是需要在不依赖注意力堆叠的架构下训练翻译系统,这份文档与源码都是直接可用的参考。
二、预训练模型清单
原文档提供了三个基于该模型训练并公开发布的预训练翻译模型,全部使用Moses tokenizer + subword-nmt BPE作为预处理管线(该配置在 fconv.py 的 hub_models 中有明确声明)。清单如下:
| 描述 | 数据集 | 模型 | 测试集 |
|---|---|---|---|
| Convolutional(Gehring et al., 2017) | WMT14 英法(English-French) | conv.wmt14.en-fr(公开 tar.bz2 压缩包) | newstest2014;newstest2012/2013 |
| Convolutional(Gehring et al., 2017) | WMT14 英德(English-German) | conv.wmt14.en-de(公开 tar.bz2 压缩包) | newstest2014 |
| Convolutional(Gehring et al., 2017) | WMT17 英德(English-German) | conv.wmt17.en-de(公开 tar.bz2 压缩包) | newstest2014 |
模型权重以.tar.bz2归档发布,其中包含model.pt等文件;对应的测试集(binarized 形式)也可单独下载,供fairseq-generate批量评测使用。上述三个模型在源码中被注册为 PyTorch Hub 入口(见 fconv.py hub_models),统一使用moses_subword预处理配置,即 tokenizer 为moses、BPE 为subword_nmt。
三、预训练模型的使用与评测
3.1 通过 PyTorch Hub 交互式翻译
在安装 fairseq(位于 infoxlm/fairseq 目录)及预处理依赖后,可通过 PyTorch Hub 直接加载预训练卷积模型进行交互式翻译:
pip install sacremoses subword_nmtimport torch # 查看可用模型列表,其中包含 conv.wmt14.en-fr 等 torch.hub.list('pytorch/fairseq') # 加载 WMT'14 英法卷积翻译模型 en2fr = torch.hub.load( 'pytorch/fairseq', 'conv.wmt14.en-fr', tokenizer='moses', bpe='subword_nmt' ) # 翻译一个句子 en2fr.translate('Hello world!')3.2 命令行批量生成与 BLEU 计算
使用下载的 binarized 测试集,可执行批量的fairseq-generate生成并计算 BLEU(以下为 WMT'14 英法示例,硬件参考为 GTX-1080ti):
mkdir -p>grep ^H /tmp/gen.out | cut -f3- > /tmp/gen.out.sys grep ^T /tmp/gen.out | cut -f2- > /tmp/gen.out.ref fairseq-score --sys /tmp/gen.out.sys --ref /tmp/gen.out.ref其中--remove-bpe用于将 subword 单元还原为词级文本,grep ^H提取假设(hypothesis)、grep ^T提取参考译文(reference)。评测命令与结果格式详见 infoxlm/fairseq/examples/translation/README.md。
四、从零复现:WMT'14 英德与英法训练全流程
原文档明确指出:使用fconv_wmt_en_de与fconv_wmt_en_fr两个命名架构复现 WMT'14 En-De 与 WMT'14 En-Fr 的完整指令,参见 translation README。以下为该 README 中卷积模型部分的完整操作流程。
4.1 数据准备:prepare-wmt14en2de.sh 与 --icml17 选项
数据准备脚本位于 infoxlm/fairseq/examples/translation/prepare-wmt14en2de.sh。默认情况下,它构建的数据集仿照《Attention Is All You Need》的配置,但额外加入 WMT'17 的 news-commentary-v12 数据:
cd infoxlm/fairseq/examples/translation/ # 默认:使用 WMT'17 数据(Europarl-v7 + CommonCrawl + news-commentary-v12) bash prepare-wmt14en2de.sh # 或者仅使用 WMT'14 数据,复现 Gehring et al., 2017 论文结果: # bash prepare-wmt14en2de.sh --icml17脚本核心逻辑(可依据 prepare-wmt14en2de.sh 源码确认):
- 克隆 Moses 与 Subword-NMT 仓库,用于 tokenization、clean 与 BPE 处理;
- 下载 Europarl-v7、CommonCrawl、news-commentary 语料,以及
dev.tgz(含 newstest2013)与test-full.tgz(含 newstest2014); - 传入
--icml17时,将新闻语料替换为 WMT'14 的 news-commentary-v9,输出目录从wmt17_en_de变为wmt14_en_de; - 训练数据抽取
NR%100 == 0的行作为验证集,其余作为训练集; - 使用
learn_bpe.py -s 40000学习4 万条 BPE 合并规则,再对 train/valid/test 应用 BPE; - 用
clean-corpus-n.perl -ratio 1.5过滤过长、比例失衡的句对。
英法数据集则通过 prepare-wmt14en2fr.sh 准备。
4.2 二值化(Binarize)
cd infoxlm/fairseq/ TEXT=examples/translation/wmt17_en_de # 若使用 --icml17,则为 wmt14_en_de fairseq-preprocess \ --source-lang en --target-lang de \ --trainpref $TEXT/train --validpref $TEXT/valid --testpref $TEXT/test \ --destdir>mkdir -p checkpoints/fconv_wmt_en_de fairseq-train \ >cd infoxlm/fairseq/ # 数据准备 bash examples/translation/prepare-wmt14en2fr.sh # 二值化 TEXT=examples/translation/wmt14_en_fr fairseq-preprocess \ --source-lang en --target-lang fr \ --trainpref $TEXT/train --validpref $TEXT/valid --testpref $TEXT/test \ --destdir>fairseq-generate>@inproceedings{gehring2017convs2s, title = {Convolutional Sequence to Sequence Learning}, author = {Gehring, Jonas, and Auli, Michael and Grangier, David and Yarats, Denis and Dauphin, Yann N}, booktitle = {Proc. of ICML}, year = 2017, }总结
围绕 conv_seq2seq README,本文完整覆盖了:三个公开预训练卷积翻译模型(WMT14 En-Fr、WMT14 En-De、WMT17 En-De)的清单与用法;基于 translation README 的 WMT'14 英德/英法从数据准备、二值化、训练到评测的完整复现流程;以及 fconv.py 中编码器/解码器/注意力层的源码级原理,包括 GLU 门控、线性化卷积、残差缩放、权重归一化与各命名架构的超参。读者既可以直接调用预训练模型做推理,也可以复现论文实验或基于fconv架构改造自己的卷积翻译系统。
【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考