大模型教我成为大模型算法工程师之day23: 机器翻译与序列建模
·
Day 23: 机器翻译与序列建模 (Machine Translation & Seq2Seq)
摘要:机器翻译 (Machine Translation, MT) 是 NLP 的圣杯,也是 Seq2Seq (Sequence-to-Sequence) 架构的发源地。从早期的统计机器翻译 (SMT) 到神经机器翻译 (NMT),再到如今的大模型零样本翻译,这几十年的进化史就是一部 AI 发展史。本文将解析 NMT 的核心技术栈,以及多语言模型的奥秘。
1. 神经机器翻译 (NMT) 的崛起
在 2014 年之前,翻译是靠概率统计(统计短语对齐概率)算的,系统极其复杂。
2014 年,Google 推出了 Seq2Seq + Attention,用一个神经网络直接端到端解决问题。
1.1 Seq2Seq 架构回顾
- Encoder:把源语言(如中文)吃进去,压缩成一个向量(Context Vector)。
- Decoder:根据这个向量,把目标语言(如英文)吐出来。
- 痛点:如果句子太长,Encoder 很难把所有信息都压缩到一个固定长度的向量里(信息瓶颈)。
1.2 Attention Is All You Need
Attention 机制(Day 11 已讲)彻底解决了信息瓶颈。Decoder 每吐一个词,都会回头看一眼 Encoder 的所有输出,自己决定该关注哪个词(比如翻译 “apple” 时关注“苹果”)。
2. 经典模型架构
2.1 Transformer (The King)
不用多说,现在 NMT 的标配就是 Transformer。
- 优势:并行计算快,长距离依赖捕捉能力强。
2.2 mBERT / XLM-R (多语言模型)
如果我有 100 种语言互译,难道要训练 100×99=9900100 \times 99 = 9900100×99=9900 个模型吗?
Multilingual Models (多语言模型) 试图用一个模型搞定所有语言。
-
mBERT (Multilingual BERT):
- 做法:把 104 种语言的维基百科数据混在一起训练。
- 神奇之处:没有显式地教它“对齐”。但它学会了把不同语言的“猫”映射到同一个特征空间附近。
- Zero-shot Cross-lingual Transfer:在英文数据上微调做分类,直接拿去测中文,效果竟然不错!
-
XLM-R (Facebook):
- 比 mBERT 更强。引入了 TLM (Translation Language Modeling) 任务。
- TLM:把中英文对应的句子拼在一起:
[CLS] I love you [SEP] 我 爱 你,然后随机遮住几个词让它猜。这强迫模型学会中英文的对应关系。
3. 机器翻译的特殊挑战
3.1 词表爆炸
- 中文有几万字,英文有几万词,日文、韩文…加起来词表会大到显存塞不下。
- 解决:Shared Vocabulary (共享词表) + BPE。所有语言共用一个 25万 大小的词表。很多字根(如 “a”, “tion”, “的”)是通用的或独立的。
3.2 低资源语言 (Low-Resource Languages)
- 中英、英法数据很多(几千万对),但“英-尼泊尔语”可能只有几千对。
- 解决:
- Back-Translation (回译):拿大量尼泊尔语单语数据,用一个烂模型翻译成英文,凑成“伪数据”反过来训练。
- Pivot Translation (中间语言):先翻成英文,再翻成尼泊尔语。
4. 评估指标:BLEU Score
BLEU (Bilingual Evaluation Understudy) 是 MT 领域的金标准。
- 原理:数数。看机器翻译的句子(Candidate)里,有多少 n-gram 出现在了人工参考译文(Reference)里。
- 公式核心:
BLEU=BP×exp(∑wnlogpn) BLEU = BP \times \exp(\sum w_n \log p_n) BLEU=BP×exp(∑wnlogpn)- pnp_npn:n-gram 的精确度(Precision)。
- BPBPBP:惩罚因子。如果机器翻译的太短,要扣分(防止它只输出一个对的词就停了)。
- 缺点:只看字面重叠,不看语义。
- Ref: “He eats an apple.”
- Cand: “He consumes a fruit.”
- BLEU 分数极低,但其实翻译是对的。所以现在也开始用 COMET / BLEURT 等基于模型的语义评估指标。
5. 代码实践:使用 MarianMT 翻译
HuggingFace 提供了大量训练好的 OPUS-MT 模型(基于 Marian 架构)。
from transformers import MarianMTModel, MarianTokenizer
# 1. 加载模型 (Helsinki-NLP 提供了几千个语言对)
# zh -> en
model_name = 'Helsinki-NLP/opus-mt-zh-en'
tokenizer = MarianTokenizer.from_pretrained(model_name)
model = MarianMTModel.from_pretrained(model_name)
# 2. 准备中文输入
src_text = [
"人工智能正在改变世界。",
"今天天气真不错。"
]
# 3. 翻译 (Generate)
# 这里的 generate 内部默认用了 Beam Search
translated = model.generate(**tokenizer(src_text, return_tensors="pt", padding=True))
# 4. 解码输出
tgt_text = [tokenizer.decode(t, skip_special_tokens=True) for t in translated]
print(tgt_text)
# Output:
# ['Artificial intelligence is changing the world.', 'The weather is really nice today.']
6. 总结
- NMT 经历了 RNN →\to→ Transformer 的进化,现在已经是 Transformer 的天下。
- 多语言模型 (XLM-R) 证明了语言之间存在通用的“语义空间”,可以实现零样本迁移。
- 低资源翻译 依然是难点,回译技术是扩充数据的法宝。
- 大模型时代:现在 GPT-4 这种通用大模型的翻译能力已经超越了绝大多数专用翻译模型,尤其是处理生僻词和文化梗时。
思考:为什么现在的翻译软件(如 Google Translate)有时候还是不如 ChatGPT 翻得自然?
- 传统 NMT 往往是基于句子对训练的,只看这一句。而 LLM 见过海量上下文,更能理解语境和语气,所以翻出来更像“人话”。
更多推荐


所有评论(0)