基于 Transformer 的中英互译模型搭建指南

Transformer 模型凭借自注意力机制在机器翻译中表现优异。以下是完整实现流程:


1. 数据预处理

核心步骤

  • 使用双语平行语料(如 WMT2017 中英数据集)
  • 文本清洗:去除特殊字符、统一大小写
  • 分词:
    • 中文:Jieba 分词
    • 英文:SpaCy 或 Byte Pair Encoding (BPE)
  • 构建词表:
    • 中文词表大小建议 $V_{\text{zh}} \approx 30,000$
    • 英文词表大小建议 $V_{\text{en}} \approx 20,000$
# 示例:BPE 分词
from tokenizers import ByteLevelBPETokenizer

tokenizer = ByteLevelBPETokenokenizer()
tokenizer.train(files=["corpus.txt"], vocab_size=20000)


2. 模型架构

Transformer 关键组件

  • 嵌入层:将词索引映射为 $d_{\text{model}}=512$ 维向量
  • 位置编码:注入序列位置信息
    $$PE_{(pos,2i)} = \sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)$$
    $$PE_{(pos,2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)$$
  • 多头注意力($h=8$ 头):
    $$\text{MultiHead}(Q,K,V) = \text{Concat}(\text{head}_1,\dots,\text{head}_h)W^O$$
  • 前馈网络:两层线性变换 + ReLU
  • 编码器-解码器结构:6 层堆叠

3. PyTorch 实现核心代码
import torch
import torch.nn as nn
from torch.nn import Transformer

class Seq2SeqTransformer(nn.Module):
    def __init__(self, src_vocab_size, tgt_vocab_size):
        super().__init__()
        self.transformer = Transformer(
            d_model=512, nhead=8, num_encoder_layers=6, num_decoder_layers=6
        )
        self.src_embed = nn.Embedding(src_vocab_size, 512)
        self.tgt_embed = nn.Embedding(tgt_vocab_size, 512)
        self.fc_out = nn.Linear(512, tgt_vocab_size)

    def forward(self, src, tgt):
        src_emb = self.src_embed(src)  # 源语言嵌入
        tgt_emb = self.tgt_embed(tgt)  # 目标语言嵌入
        output = self.transformer(src_emb, tgt_emb)
        return self.fc_out(output)


4. 训练策略

超参数设置

  • 优化器:Adam ($\beta_1=0.9, \beta_2=0.98, \epsilon=10^{-9}$)
  • 学习率:预热步数 $w=4000$,遵循公式
    $$lrate = d_{\text{model}}^{-0.5} \cdot \min(step^{-0.5}, step \cdot w^{-1.5})$$
  • 损失函数:标签平滑的交叉熵 ($\epsilon_{\text{ls}}=0.1$)
  • Batch Size:4096 tokens/批次

训练指令

python train.py --epochs 30 --fp16  # 混合精度加速


5. 推理优化
  • 束搜索(Beam Search):束宽 $k=5$
  • 长度惩罚
    $$\text{score} = \frac{\log P(y|x)}{\text{lp}(L)} \quad \text{lp}(L)=(5+L)^\alpha / 6^\alpha$$
    其中 $\alpha=0.6$

6. 评估指标
  • BLEU 值:计算 n-gram 精度加权平均
    $$\text{BLEU} = BP \cdot \exp\left(\sum_{n=1}^4 w_n \log p_n\right)$$
    $BP$ 为简短惩罚因子
  • 在 newstest2017 中英测试集上预期 BLEU ≥ 30

完整项目结构
transformer-mt/
├── data/               # 存放预处理数据
├── model.py            # Transformer 架构
├── train.py            # 训练脚本
├── infer.py            # 推理脚本
└── requirements.txt    # 依赖库

关键提示:使用 8×V100 GPU 时,完整训练需约 24 小时。可复用 Hugging Face 的 Helsinki-NLP/opus-mt-zh-en 预训练模型加速收敛。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐