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⁡(∑wnlog⁡pn) 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 见过海量上下文,更能理解语境语气,所以翻出来更像“人话”。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐