fairseq WMT20 新闻翻译提交模型实战:Tamil/Inuktitut 低资源机器翻译与语言模型加载指南
【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm
本指南围绕 fairseq 的 WMT'20 新闻翻译任务官方提交模型展开,完整讲解 Facebook-FAIR 在英语 ↔ 泰米尔语(Tamil)、英语 ↔ 因纽特语(Inuktitut)两组低资源语言对上发布的单模型翻译与配套语言模型(Language Model)的模型清单、归档构成与 torch.hub 加载方式。读完本文,你将能够通过几行 Python 代码直接加载并调用这些 WMT20 模型完成翻译与文本采样,并理解 fairseq 的 hub 模型注册与from_pretrained加载链路的底层原理。本文主体对应仓库内文档 decoding/IAD/fairseq/examples/wmt20/README.md,并以当前仓库内置的 fairseq 源码(decoding/IAD/fairseq)作为实现佐证。
背景:WMT'20 新闻翻译任务与 FAIR 提交
WMT(Conference on Machine Translation)的 news translation task 是机器翻译领域最具代表性的年度评测任务之一。本文所述的模型来自 Facebook-FAIR 在 WMT'20 新闻翻译任务中的正式提交(论文《Facebook AI's WMT20 News Translation Task Submission》,Chen et al., 2020),覆盖两组语言对:
- 英语 ↔ 泰米尔语(English ↔ Tamil,ISO 代码
ta); - 英语 ↔ 因纽特语(English ↔ Inuktitut,ISO 代码
iu),其中 Inuktitut 是典型的低资源语言。
对于 Inuktitut,模型进一步按**领域(domain)**区分发布:
- News domain(新闻领域),归档名中的
.news后缀; - Nunavut Hansard domain(努纳武特议会议事记录领域),归档名中的
.nh后缀。
该 README 位于当前仓库的decoding/IAD/fairseq代码树内。decoding/IAD是 Input-guided Aggressive Decoding(IAD)项目(详见 decoding/IAD/README.md),它内置了一份完整可用的 fairseq 代码库,因此 WMT20 示例模型与 IAD 的解码工具可以共享同一套模型注册与加载逻辑——这也让本示例文档在仓库中具备了直接可复用的价值。
单模型最优机器翻译模型(在 WMT20 news dev 集部分数据微调后)
原始文档给出了 6 个方向的**单模型最优(single best)**翻译模型。这些模型均在 WMT20 新闻开发集(news dev set)的部分数据上做过微调,且均为单模型、非集成(ensemble)版本。下表完整列出模型名与说明:
| 模型 | 说明 |
|---|---|
transformer.wmt20.ta-en | Ta->En(泰米尔语 → 英语) |
transformer.wmt20.en-ta | En->Ta(英语 → 泰米尔语) |
transformer.wmt20.iu-en.news | Iu->En(因纽特语 → 英语,News 领域) |
transformer.wmt20.en-iu.news | En->Iu(英语 → 因纽特语,News 领域) |
transformer.wmt20.iu-en.nh | Iu->En(因纽特语 → 英语,Nunavut Hansard 领域) |
transformer.wmt20.en-iu.nh | En->Iu(英语 → 因纽特语,Nunavut Hansard 领域) |
在源码层面,这 6 个模型的下载入口被逐一登记在 fairseq 标准 Transformer 模型的hub_models()注册表中,见 decoding/IAD/fairseq/fairseq/models/transformer.py#L56-L99。从该注册表可以进一步确认每个模型归档的文件名(例如wmt20.en-ta.single.tar.gz、wmt20.iu-en.news.single.tar.gz等),并注意到每个条目都统一走spm(path)配置:即SentencePiece BPE 子词切分 + space 分词器。这意味着这些翻译模型的数据管线与 WMT19 系列模型(使用 Moses + fastBPE)不同,加载时 fairseq 会自动按 SentencePiece 方式做预处理。
配套 Transformer 语言模型
除了翻译模型,FAIR 还发布了 4 个配套的 Transformer 语言模型,用于解码时重排序(reranking)等场景。完整清单如下:
| 模型 | 说明 |
|---|---|
transformer_lm.wmt20.en | En Language Model(英语语言模型) |
transformer_lm.wmt20.ta | Ta Language Model(泰米尔语语言模型) |
transformer_lm.wmt20.iu.news | Iu Language Model(因纽特语语言模型,News 领域) |
transformer_lm.wmt20.iu.nh | Iu Language Model(因纽特语语言模型,Nunavut Hansard 领域) |
这些 LM 条目注册在TransformerLanguageModel的hub_models()中,见 decoding/IAD/fairseq/fairseq/models/transformer_lm.py#L168-L201。从源码可以看到,WMT20 语言模型同样使用spm(path)(SentencePiece + space tokenizer)配置,与翻译模型保持一致,归档文件名分别为wmt20.en.tar.gz、wmt20.ta.tar.gz、wmt20.iu.news.tar.gz、wmt20.iu.nh.tar.gz。
使用方式一:通过 torch.hub 加载翻译模型
原始文档推荐的最简使用方式是通过torch.hub按模型名加载。torch.hub.load会根据模型名在对应注册表中找到归档地址,自动完成下载、解压与缓存(默认缓存在~/.cache/torch/hub),并返回一个可直接调用的推理接口对象。
前置条件:环境中已安装torch,且pytorch/fairseq仓库(或本仓库内置的decoding/IAD/fairseq)可被 torch.hub 访问。翻译用法如下(完整继承自原文档):
import torch # English to Tamil translation en2ta = torch.hub.load('pytorch/fairseq', 'transformer.wmt20.en-ta') en2ta.translate("Machine learning is great!") # 'இயந்திரக் கற்றல் அருமை!' # Tamil to English translation ta2en = torch.hub.load('pytorch/fairseq', 'transformer.wmt20.ta-en') ta2en.translate("இயந்திரக் கற்றல் அருமை!") # 'Machine learning is great!' # English to Inuktitut translation en2iu = torch.hub.load('pytorch/fairseq', 'transformer.wmt20.en-iu.news') en2iu.translate("machine learning is great!") # 'ᖃᒧᑕᐅᔭᓄᑦ ᐃᓕᓐᓂᐊᕐᓂᖅ ᐱᐅᔪᒻᒪᕆᒃ!' # Inuktitut to English translation iu2en = torch.hub.load('pytorch/fairseq', 'transformer.wmt20.iu-en.news') iu2en.translate("ᖃᒧᑕᐅᔭᓄᑦ ᐃᓕᓐᓂᐊᕐᓂᖅ ᐱᐅᔪᒻᒪᕆᒃ!") # 'Machine learning excellence!'几个要点:
- 返回值是 fairseq 的
GeneratorHubInterface(内部封装了模型、任务与生成器),提供.translate()方法,开箱即用,无需手动加载字典或 SentencePiece 模型; - 模型名中的
.news/.nh后缀决定了 Inuktitut 使用哪个领域模型,翻译非新闻类文本时应按领域选择; - 示例输出体现了低资源语对的实际翻译质量:Tamil 与 Inuktitut 的短句翻译均能得到合理的英文/目标语言结果。
使用方式二:通过 torch.hub 加载语言模型并采样
配套语言模型的用法与翻译模型完全对称,只是调用.sample()方法进行续写采样(而非翻译)。完整示例继承如下:
# Sample from the English LM en_lm = torch.hub.load('pytorch/fairseq', 'transformer_lm.wmt20.en') en_lm.sample("Machine learning is") # 'Machine learning is a type of artificial intelligence that uses machine learning to learn from data and make predictions.' # Sample from the Tamil LM ta_lm = torch.hub.load('pytorch/fairseq', 'transformer_lm.wmt20.ta') ta_lm.sample("இயந்திரக் கற்றல் என்பது செயற்கை நுண்ணறிவின்") # 'இயந்திரக் கற்றல் என்பது செயற்கை நுண்ணறிவின் ஒரு பகுதியாகும்.' # Sample from the Inuktitut LM iu_lm = torch.hub.load('pytorch/fairseq', 'transformer_lm.wmt20.iu.news') iu_lm.sample("ᖃᒧᑕᐅᔭᓄᑦ ᐃᓕᓐᓂᐊᕐᓂᖅ") # 'ᖃᒧᑕᐅᔭᓄᑦ ᐃᓕᓐᓂᐊᕐᓂᖅ, ᐊᒻᒪᓗ ᓯᓚᐅᑉ ᐊᓯᙳᖅᐸᓪᓕᐊᓂᖓᓄᑦ ᖃᓄᐃᓕᐅᕈᑎᒃᓴᑦ, ᐃᓚᖃᖅᖢᑎᒃ ᐅᑯᓂᖓ:'.sample()接受一段前缀文本并返回续写结果,适合用于评估语言模型的流畅度、做领域自适应重排序,或为下游任务(如 IAD 解码中的打分)提供先验。
源码级原理解析:hub 模型是如何被找到和加载的
要理解上述几行代码背后发生了什么,需要串联三个源码文件:
1. torch.hub 的入口注册:fairseq 仓库根目录的 hubconf.py 先做依赖检查(dataclasses、hydra、numpy、omegaconf、regex、requests、torch),随后遍历MODEL_REGISTRY中所有已注册的模型类,对每个类的hub_models()中登记的每个模型名,执行:
globals()[model_name] = functools.partial( _cls.from_pretrained, model_name, )即把transformer.wmt20.en-ta这样的名字在模块级暴露为from_pretrained('transformer.wmt20.en-ta')的偏函数,这正是torch.hub.load(..., 'transformer.wmt20.en-ta')最终命中的对象。
2. 模型名 → 归档地址的映射:from_pretrained的基类实现位于 decoding/IAD/fairseq/fairseq/models/fairseq_model.py#L227-L265。它接收model_name_or_path,并传入archive_map=cls.hub_models()作为解析表——即前面提到的 transformer.py#L56-L99 与 transformer_lm.py#L168-L201 中的注册内容。参数checkpoint_file默认为model.pt(即归档内的主 checkpoint 文件名),data_name_or_path默认为.(表示复用模型归档内的数据/字典文件)。下载与缓存由fairseq.hub_utils完成,最终返回GeneratorHubInterface(x["args"], x["task"], x["models"])——这就是示例代码中.translate()/.sample()两个方法的来源。
3. 预处理管线的一致性:从两个hub_models()中可以看到,所有 WMT20 条目都统一使用spm(path)辅助函数,其返回的配置为{"path": path, "tokenizer": "space", "bpe": "sentencepiece"}。可以推断,WMT20 的模型归档内同时打包了 checkpoint(model.pt)、词典与 SentencePiece 模型,加载器据此自动装配分词与子词切分流程,用户无需手动指定--bpe sentencepiece。
在本仓库中的落地:从 hub 模型到本地推理(结合 IAD)
当前仓库的decoding/IAD项目(decoding/IAD/README.md)提供了一个基于 fairseq 的输入引导式激进解码(Input-guided Aggressive Decoding)实现,其推理入口与 WMT20 这类标准 fairseq checkpoint 是兼容的。具体有两种方式:
方式一:直接使用 fairseq 自带的交互式解码脚本。IAD 仓库提供了封装脚本 decoding/IAD/interactive.sh,调用方式为:
bash interactive.sh $PTPATH $BATCH $BEAM $INPPATH $BINDIR $OUTPATH其中PTPATH指向checkpoint*.pt模型文件,BINDIR是包含 src/tgt 词典的 bin 数据目录,INPPATH为待翻译文件(如conll*.bpe.txt),OUTPATH为输出文件。
方式二:使用 IAD 的推理入口:
python inference.py --checkpoint-path $PTPATH --bin-data $BINDIR --input-path $INPPATH --output-path $OUTPATH --aggressive结合上文可以推断:torch.hub 加载与本地 checkpoint 加载共用同一套 fairseq 模型注册与 checkpoint 恢复逻辑(MODEL_REGISTRY+from_pretrained)。因此,通过 torch.hub 自动下载的 WMT20 翻译模型/LM 归档,在解压后即可像 IAD README 中描述的那样作为本地PTPATH使用,只需按 IAD 的数据约定(bin 数据与词典、BPE 预处理)准备好BINDIR与INPPATH。这套组合使 WMT20 模型不仅能用于常规翻译评测,也可以作为 IAD 解码管线中的基础模型进一步实验。
引用规范
如果你在研究中使用了这些模型或本文档内容,原始文档给出的引用信息如下:
@inproceedings{chen2020facebook title={Facebook AI's WMT20 News Translation Task Submission}, author={Peng-Jen Chen and Ann Lee and Changhan Wang and Naman Goyal and Angela Fan and Mary Williamson and Jiatao Gu}, booktitle={Proc. of WMT}, year={2020}, }完整的模型下载地址、归档构成与用法细节,均可直接查看仓库内原始文档 decoding/IAD/fairseq/examples/wmt20/README.md,以及两个hub_models()注册表源码(transformer.py#L56-L99、transformer_lm.py#L168-L201)。
【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考