跳转到内容

Seq2Seq — 把翻译变成端到端神经网络

待复核

Seq2Seq 是 2014 年 Google 三个人写的 9 页论文,第一次用两段神经网络把整件事——「读一句法语,吐一句英语」——从头到尾接成一个可训练的整体。

日常类比:像两个翻译员背靠背坐着。第一个(编码器)把法语听完,在脑子里压出一团想法,递给第二个;第二个(解码器)拿着这团想法,一个英语词一个英语词地往外吐,直到吐出句号。

具体做法:

  • 编码器是一个 LSTM,逐词读法语句子,把整句话压成一个 1000 维向量
  • 解码器也是一个 LSTM,从这个向量出发,每次预测下一个英语词,预测完再把词喂回去预测下下个,直到生成 <EOS> 表示句子结束

不理解 Seq2Seq,下面这些事都没法解释:

  • 为什么 encoder-decoder 成了翻译/对话/摘要的默认骨架——Cho 同年先造了词,这篇把它做成能端到端打分的深 LSTM
  • 为什么 attention 机制(2015 Bahdanau)非要发明出来——它就是来修 Seq2Seq 的「固定向量瓶颈」
  • 为什么 Transformer(2017)一出生就是 encoder-decoder 两段——它继承的就是 Seq2Seq 的范式骨架
  • 为什么 GPT 这样 decoder-only 的模型也能做翻译——把 Seq2Seq 的两段拼成一段而已

一句话:这是把翻译从「特征工程 + n-gram」的统计范式,整体改写成「端到端神经网络」的奠基工作。后来的 attention / Transformer / 大模型都是在这块地基上盖楼。

Seq2Seq 的设计可以拆成 三块

  1. 变长 → 定长 → 变长:源句子长度不固定(5 词或 50 词),目标句子长度也不固定。编码器把变长压成一个定长向量,解码器再从定长向量展开成变长。这是关键的「桥」。

  2. 两个 LSTM,参数不共享:编码器和解码器是两套独立的 LSTM,参数完全分开训练。直觉是:「读」和「写」是两件不同的事,强行共享参数反而会互相干扰。

  3. 训练目标极其朴素:给定源句 x 和目标句 y,最大化 P(y|x) = 连乘每一步 P(yt | y1..yt-1, x)。整个网络可以反向传播一起训。

实验配置(论文里的关键数字):

  • 4 层 LSTM,每层 1000 维隐藏状态,参数总量 3.84 亿
  • 8 张 GPU 数据并行训练 10 天
  • 解码用 beam search(束搜索),beam=2 就够好,beam=12 提升不大

论文做了一个很妙的可视化:把不同句子编码后的 1000 维向量降到 2 维。

发现:

  • 「I gave her a book」和「She was given a book by me」在向量空间里距离很近——意思相同,编码器学到了语义而非词序
  • 「John admires Mary」和「Mary admires John」距离很远——主谓颠倒,意思变了,编码器分得清

这告诉你编码器没有死记词序,它学到了一个意义空间。这个观察直接启发了后来的句子嵌入研究。

案例 2:把源句反过来读,BLEU 涨 5 个点

Section titled “案例 2:把源句反过来读,BLEU 涨 5 个点”

论文里有一个看起来非常邪门的 trick:把源语言句子反转输入。教学伪代码:

# 训练一步(反转源句)
x_rev = reverse(source_tokens) # A B C → C B A
h = EncoderLSTM(x_rev) # 压成定长向量
for t in target_tokens: # 目标句不反转
y_hat, h = DecoderLSTM(prev_y, h)
loss += CrossEntropy(y_hat, y_t)
  • 正向输入「A B C → α β γ」:BLEU 25.9
  • 反转输入「C B A → α β γ」:BLEU 30.6(BLEU = 机器译文与人工参考译文的 n-gram 重合打分)

为什么?反转后源句首词 A 离目标句首词 α 只隔几步,梯度好传;正向时中间隔整句,长 RNN 梯度被衰减。这暴露了信息要走很长串行路径的缺陷——正是 attention 要修的

WMT-14 英→法,论文自己的对照表:

  • 文中 phrase-based SMT baseline:BLEU 33.30(被集成模型超过)
  • Seq2Seq 单模型(反转):BLEU 30.6
  • Seq2Seq 5 模型集成:BLEU 34.81 ← 论文主结果,已赢上述 baseline
  • 用集成给 SMT 1000-best 重排序:BLEU 36.5
  • 当年 WMT’14 最强系统(含 SMT 等):BLEU 37.0(仍略高)

所以主结论是:端到端神经网络已经打过他们对比的 SMT baseline,离当年总榜第一还差一口气;重排序说明它也能当 SMT 的「质检员」。一年后 attention 出来,神经翻译才全面压过传统 SMT。

  1. 固定向量瓶颈:50 词和 10 词都要塞进同一个 1000 维。本文用反转后自称对长句相对稳健,但「一句话一个向量」仍是结构上限——Bahdanau attention 一年内就证明:给解码器直达各源词,长句才真正稳住。

  2. 梯度路径太长:反转输入这个 hack 暴露了 RNN 的老毛病——序列一长,前面的信息走不到后面。LSTM 能缓解但治不好根。直到 Transformer 用 self-attention 让任意两个位置 1 步可达才彻底解决。

  3. 一定要用 LSTM 不能用普通 RNN:论文明确提到普通 RNN 完全训不出来,梯度爆炸/消失太严重。这印证了 1997 年 LSTM 的价值。

  4. 解码必须 beam search 不能贪心:贪心解码每步选概率最大的词,但局部最优不等于全局最优。beam=2 已经显著好于 beam=1。

  5. 集成学习是最后一道补丁:单模型 BLEU 30.6,5 个不同初始化的模型集成才到 34.8。每个模型 10 天训练,等于花 50 个 GPU-天换 4 个 BLEU 点——这个性价比在工业部署里完全不能接受,也是后来研究都在追求「单模型直接打过基线」的原因。

  6. 训练数据要足够干净:论文用 WMT-14 的 1200 万句对,过滤掉了不在 16 万词频表里的低频词(用 <UNK> 替代)。词表外的词翻译质量会直接崩——这个问题直到 BPE/WordPiece 出现才被彻底解决。

适用

  • 任何「输入序列 → 输出序列」的任务模板:翻译、摘要、对话、语音识别、代码生成
  • 输入输出长度不固定且没有 1:1 对齐关系的场景
  • 想要一个端到端可训练(不分离子模块)的方案

不适用

  • 输出和输入有强对齐的任务(如词性标注、命名实体识别)——直接序列标注更简单
  • 长文档生成——固定向量瓶颈会咬人,必须上 attention
  • 实时低延迟场景——LSTM 必须串行解码,每步都依赖上一步
  • 2014 年 6 月:Cho 等人在 EMNLP 发表 RNN encoder-decoder(用于 SMT 重排序),是 Seq2Seq 的直接前身。
  • 2014 年 9 月:Sutskever 这篇上 NeurIPS。区别:用 LSTM 不是 GRU,深 4 层不是 1 层,更重要的是定位为端到端翻译而不是 SMT 的辅助件。
  • 2015 年:Bahdanau attention 出现,解决固定向量瓶颈,BLEU 一举超过 SMT。
  • 2016 年:Google 把 Seq2Seq + attention 上线为 GNMT,正式取代 Google Translate 用了 10 年的 SMT 系统。
  • 2017 年:Transformer 出现,把 RNN 整体替换为 self-attention,但 encoder-decoder 这个框架名留下来了。

3 年内,Seq2Seq 的范式赢了,它的具体实现(RNN)被替换了。这是 ML 史上很经典的一次「思想活下来、零件全换」。

一个常见误解:很多教程把 Seq2Seq 直接画成「带 attention 的 encoder-decoder」,但 2014 这篇原始论文里完全没有 attention——它就是两段裸 LSTM 中间挤一个 1000 维向量。理解这一点很重要:你才能明白 attention 是为了解决什么具体问题被发明出来的。

  1. 端到端 vs 分模块:不要预设「这件事必须分成 N 个步骤」。Seq2Seq 把翻译里的对齐、语言模型、调序全融进一个网络,反而比精心设计的 SMT 简洁。
  2. 范式 vs 实现:encoder-decoder 是范式,LSTM 是实现。Transformer 来了之后实现换了,范式还在。学习时要分清。
  3. 诚实地指出瓶颈:论文明确写了「长句翻译变差」「需要反转 trick」,这些坦诚的弱点反而成了下一篇论文的起点。这是研究的健康循环。
  4. 简单 baseline 的力量:3.84 亿参数、纯 LSTM、最朴素的 cross-entropy 损失,没用任何花活,跑出了能挑战十几年 SMT 积累的成绩。
  • attention —— 直接后继,给 Seq2Seq 装上「直达源词的捷径」
  • lstm-1997 —— 编码器/解码器的内部零件
  • transformer —— 范式继承者,把 RNN 换成 self-attention
  • bert-2019 —— 借用 encoder 那一半,丢掉 decoder
  • gpt —— 借用 decoder 那一半,丢掉 encoder
  • fastertransformer-2021 —— Seq2Seq 后裔的工业级推理优化
  • transformer-2017 —— Attention Is All You Need — 用 self-attention 重写序列建模
  • vall-e-2023 —— VALL-E — 3 秒音频样本就能克隆你的声音
  • whisper-2022 —— Whisper — 用 68 万小时”野生”音频教会模型听懂全世界