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 的设计可以拆成 三块:
-
变长 → 定长 → 变长:源句子长度不固定(5 词或 50 词),目标句子长度也不固定。编码器把变长压成一个定长向量,解码器再从定长向量展开成变长。这是关键的「桥」。
-
两个 LSTM,参数不共享:编码器和解码器是两套独立的 LSTM,参数完全分开训练。直觉是:「读」和「写」是两件不同的事,强行共享参数反而会互相干扰。
-
训练目标极其朴素:给定源句 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 提升不大
案例 1:编码器到底压出了什么
Section titled “案例 1:编码器到底压出了什么”论文做了一个很妙的可视化:把不同句子编码后的 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 Ah = 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 要修的。
案例 3:BLEU 34.8 是什么水平
Section titled “案例 3:BLEU 34.8 是什么水平”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。
-
固定向量瓶颈:50 词和 10 词都要塞进同一个 1000 维。本文用反转后自称对长句相对稳健,但「一句话一个向量」仍是结构上限——Bahdanau attention 一年内就证明:给解码器直达各源词,长句才真正稳住。
-
梯度路径太长:反转输入这个 hack 暴露了 RNN 的老毛病——序列一长,前面的信息走不到后面。LSTM 能缓解但治不好根。直到 Transformer 用 self-attention 让任意两个位置 1 步可达才彻底解决。
-
一定要用 LSTM 不能用普通 RNN:论文明确提到普通 RNN 完全训不出来,梯度爆炸/消失太严重。这印证了 1997 年 LSTM 的价值。
-
解码必须 beam search 不能贪心:贪心解码每步选概率最大的词,但局部最优不等于全局最优。beam=2 已经显著好于 beam=1。
-
集成学习是最后一道补丁:单模型 BLEU 30.6,5 个不同初始化的模型集成才到 34.8。每个模型 10 天训练,等于花 50 个 GPU-天换 4 个 BLEU 点——这个性价比在工业部署里完全不能接受,也是后来研究都在追求「单模型直接打过基线」的原因。
-
训练数据要足够干净:论文用 WMT-14 的 1200 万句对,过滤掉了不在 16 万词频表里的低频词(用
<UNK>替代)。词表外的词翻译质量会直接崩——这个问题直到 BPE/WordPiece 出现才被彻底解决。
适用 vs 不适用场景
Section titled “适用 vs 不适用场景”适用:
- 任何「输入序列 → 输出序列」的任务模板:翻译、摘要、对话、语音识别、代码生成
- 输入输出长度不固定且没有 1:1 对齐关系的场景
- 想要一个端到端可训练(不分离子模块)的方案
不适用:
- 输出和输入有强对齐的任务(如词性标注、命名实体识别)——直接序列标注更简单
- 长文档生成——固定向量瓶颈会咬人,必须上 attention
- 实时低延迟场景——LSTM 必须串行解码,每步都依赖上一步
历史小故事(可跳过)
Section titled “历史小故事(可跳过)”- 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 是为了解决什么具体问题被发明出来的。
- 端到端 vs 分模块:不要预设「这件事必须分成 N 个步骤」。Seq2Seq 把翻译里的对齐、语言模型、调序全融进一个网络,反而比精心设计的 SMT 简洁。
- 范式 vs 实现:encoder-decoder 是范式,LSTM 是实现。Transformer 来了之后实现换了,范式还在。学习时要分清。
- 诚实地指出瓶颈:论文明确写了「长句翻译变差」「需要反转 trick」,这些坦诚的弱点反而成了下一篇论文的起点。这是研究的健康循环。
- 简单 baseline 的力量:3.84 亿参数、纯 LSTM、最朴素的 cross-entropy 损失,没用任何花活,跑出了能挑战十几年 SMT 积累的成绩。
- 论文 9 页 PDF:Sutskever 2014(密度高但可读,附录有可视化)
- 视频教程:Andrew Ng — Sequence to Sequence Models(Coursera NLP 课,1 小时讲完)
- TensorFlow 官方 Neural Machine Translation tutorial(自己写一个 Seq2Seq+attention)
- attention —— Bahdanau 2015,下一篇必读,解决固定向量瓶颈
- lstm-1997 —— Seq2Seq 的零件,理解长程依赖
- 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 万小时”野生”音频教会模型听懂全世界