mlwithme/TransformerTranslation
Star159 Fork39 最后更新2025-06-07

TransformerTranslation 是一个基于 PyTorch 从零实现的德英机器翻译代码仓库,基于论文 Attention Is All You Need 的 Transformer 架构,在 Multi30K EN→DE 数据集上完成训练、推理与 BLEU 评测,配套 Multi-Head Attention、位置编码、Encoder-Decoder 等核心模块的实现过程。

仓库简介#

TransformerTranslation 是论文 Attention Is All You Need 的 PyTorch 实现,聚焦 德语 → 英语 (EN→DE) 文本翻译任务。基于 Multi30K 经典数据集,从零搭建完整的 Transformer 架构(Multi-Head Attention、Positional Encoding、Encoder/Decoder、点式前馈网络、自定义学习率调度),并配套训练、推理、BLEU 评测全流程。

仓库包含两部分配套:

  • 代码:在 train.py 中完成 Multi30K 数据预处理、Transformer 训练与学习率调度;在 translate.py 中加载模型对新句子做 Beam Search 推理;提供 BLEU 评测脚本在 val / test_2016_flickr 上对比翻译质量。
  • 教程:配套「图解 Transformer 入门教程」系列 9 讲,从 Multi-Head Attention 动机与公式、位置编码原理,到 PyTorch 完整实现、翻译模型实战、文本分类与对联生成扩展,全部基于 PyTorch 与 Transformer 教程与可视化代码。

在学习使用本项目之前建议先掌握 Transformer 整体架构,相关内容可参考 「图解 Transformer 入门教程」 系列教程。

适用人群#

  • 想深入理解 Transformer 架构(Multi-Head Attention、Positional Encoding、Encoder/Decoder)的研究 / 工程人员;
  • 计划基于 PyTorch 从零实现机器翻译、Seq2Seq 任务的开发者;
  • 想在 Multi30K、WMT 等公开数据集上训练与评估翻译模型的 NLP 实战学习者;
  • 教学场景中需要"论文 + 代码 + 数据集 + 评测"完整闭环的讲师与学生。

内容结构#

  • train.py — 训练入口:加载 Multi30K 数据集 → spaCy 分词 → 训练 → 自定义学习率调度 → 周期性保存 checkpoint;
  • translate.py — 推理入口:加载模型,对新德语句子做 Beam Search / 贪心解码并输出英语译文与参考译文的对比;
  • config/config.py — 训练与模型超参配置(batch size、head 数、层数等),可按需修改或保持默认;
  • data/ — 数据与依赖资源:
    • train.de / train.en / val.de / val.en / test_2016_flickr.de / test_2016_flickr.en:Multi30K 数据集官方划分;
    • de_core_news_sm-3.0.0.tar.gz / en_core_web_sm-3.0.0.tar.gz:spaCy 3.0.0 德语 / 英语分词模型离线包(需手动 pip install);
  • model/ — Transformer 各核心模块的 PyTorch 实现:
    • MyTransformer.py:Multi-Head Attention、Scaled Dot-Product Attention、Encoder/Decoder Layer 完整实现;
    • Embedding.py:Token Embedding + Positional Encoding;
    • TranslationModel.py:Transformer 端到端翻译模型组装;
    • CustomScheduleLearningRate.py:论文中的 Noam 自定义学习率调度器;
  • utils/data_helpers.py — 数据加载、分词、Batch 构造、Mask 生成;
  • utils/log_helper.py — 训练日志与可视化辅助;
  • test/ — 单元测试:test_Config.py / test_Embedding.py / test_MyTransformer.py / test_TranslationModel.py / test_LoadEnglishGermanDataset.py
  • imgs/ — README 中训练过程 / 学习率曲线 / BLEU 评测结果图;
  • requirements.txt — Python 依赖(PyTorch 1.5.0、torchtext 0.6.0、spaCy 等)。

配套章节#

以下 6 讲系统讲解 Transformer 整体架构与德英翻译任务实战,覆盖 Multi-Head Attention 动机、位置编码原理、PyTorch 从零实现到翻译模型训练 / 推理 / BLEU 评测,均配套 PyTorch Python 实现与可视化代码,是 Transformer 与机器翻译入门到实战的完整教程。

章节 重点小节
第 1 讲 Multi-Head Attention Multi-Head Attention 图解教程:从动机到 Q/K/V 与多头分割原理
第 2 讲 位置编码 Transformer 位置编码教程:图解正弦 Positional Encoding 与编解码过程
第 3 讲 Attention 代码实现 Multi-Head Attention 代码实现教程:基于 PyTorch 手写多头注意力与掩码
第 4 讲 Transformer 完整实现 Transformer PyTorch 完整实现教程:从 Token Embedding 到 Encoder/Decoder
第 5 讲 翻译模型实战 Transformer 翻译模型实战教程:Multi30K EN→DE 数据预处理与 Seq2Seq 训练
第 6 讲 文本分类扩展 Transformer 文本分类实战教程:基于 Encoder 复刻 BERT 的 AG_News 分类实现

使用方式#

1. 环境准备#

  • Python 3.x
  • PyTorch 1.5.0
  • torchtext 0.6.0
  • spaCy 离线模型(从 data/ 目录安装):
pip install de_core_news_sm-3.0.0.tar.gz
pip install en_core_web_sm-3.0.0.tar.gz

2. 训练#

直接执行 train.py 即可启动训练(可按需修改 config/config.py 中的超参):

git clone https://github.com/mlwithme/TransformerTranslation.git
cd TransformerTranslation
pip install -r requirements.txt
python train.py

训练过程示例:

Epoch: 2, Train loss: 5.685, Train acc: 0.240947
Epoch: 2, Train loss: 5.668, Train acc: 0.241493
...

学习率变化(Noam 调度,warmup 后逐步衰减):

Transformer 学习率曲线

3. 推理(inference)#

训练完成后运行 translate.py 即可对测试集做推理:

python translate.py

翻译示例:

德语:Eine Gruppe von Menschen steht vor einem Iglu.
翻译:A group of people standing in fraon of an igloo .
英语:A group of people are facing an igloo.
=========
德语:Ein Mann in einem blauen Hemd steht auf einer Leiter und putzt ein Fenster.
翻译:A man in a blue shirt is standing on a ladder cleaning a window.
英语:A man in a blue shirt is standing on a ladder cleaning a window.