机器翻译实战:基于 Transformer 搭建中英互译模型
·
基于 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预训练模型加速收敛。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)