【CS224n笔记】从 Seq2Seq 到 Attention:拆解神经机器翻译的进化之路
在自然语言处理(NLP)领域,神经机器翻译(Neural Machine Translation, NMT) 是一个里程碑式的任务。斯坦福 CS224n 课程中关于 NMT 的部分,非常清晰地展示了深度学习模型是如何一步步学会“理解”和“生成”语言的。
本文结合 CS224n 的课程内容,带大家深入拆解 NMT 的核心架构:从经典的 Seq2Seq 模型,到为了解决“信息瓶颈”而诞生的 Attention(注意力)机制。
1. 什么是 NMT?其实就是一个条件语言模型
首先,我们需要给 NMT 下一个定义。
传统的统计机器翻译系统极其复杂,而 NMT 试图构建一个单一的神经网络来解决翻译问题。正如课程中所述,NMT 本质上是一个 Seq2Seq(序列到序列) 模型。
更准确地说,它是一个 条件语言模型 (Conditional Language Model) :
-
语言模型:因为解码器(Decoder)在做的事,就是预测下一个单词
P(w_t | w_{<t}) -
条件性:它的预测不仅仅基于前文,还严格依赖于(Conditioned on) 源句子 x。
数学上,我们的目标是直接计算概率 P(y|x),即给定源句子 x,生成目标句子 y 的概率。
2. 经典架构:Encoder-Decoder
为了实现这个目标,经典的 Seq2Seq 模型采用了 Encoder-Decoder 架构。
第一步:Encoder(编码器)—— 读与记
Encoder 是一个 RNN(通常是 LSTM 或 GRU)。它的任务是“读懂”源句子(例如法语 "il a m' entarté" )。
- 每个单词依次输入 RNN。
- RNN 维护一个隐藏状态(Hidden State),随着阅读不断更新。
- 关键点:Encoder 读完最后一个词后的最终隐藏状态,被视为整个句子的向量表示(Context Vector) 。
第二步:Decoder(解码器)—— 想与写
Decoder 是另一个 RNN。它的任务是将 Encoder 给它的向量“翻译”成目标语言(例如英语 "he hit me with a pie" )。
- 初始化:Decoder 的初始状态直接来自 Encoder 的最终状态(灵感的传递)。
- 生成:Decoder 像接龙一样,一个词接一个词地生成。
- 自回归(Autoregressive) :在测试/推理阶段,Decoder 会把自己上一步生成的词,作为下一步的输入。
3. 训练与推理的区别
在实战中,模型是怎么学的?这里有一个关键概念:Teacher Forcing。
-
训练阶段 (Training) : 我们手里有正确答案。不管 Decoder 上一步猜没猜对,下一步我们都强行喂给它正确的单词。这叫 Teacher Forcing,能让模型快速收敛。损失函数(Loss)是每一步预测概率的负对数之和。
-
推理阶段 (Inference) : 这就没有老师带了。Decoder 必须依靠自己,把上一步生成的词喂给下一步。为了避免“一步错步步错”的贪心搜索(Greedy Search),我们通常使用 Beam Search(束搜索) 。
- Beam Search:不仅仅盯着当前概率最大的词,而是时刻保留前 k 个最优的“部分翻译”草稿,最终选择整体分数最高的那条路。
4. 经典模型的致命伤:信息瓶颈 (The Bottleneck)
经典的 Seq2Seq 模型看起来很美,但有一个巨大的隐患。
问题所在: Encoder 必须把源句子的所有信息(语法、语义、细节、语气)全部压缩到一个固定长度的向量中。
这就好比让你读一本小说,然后只准用一张便利贴写下所有摘要,再把书扔掉,仅凭这张便利贴把小说复述出来。
- 对于短句:还能应付。
- 对于长句:信息会严重丢失,尤其是句子开头的信息,传到 Decoder 时早已“遗忘”。
这就是著名的 信息瓶颈(Information Bottleneck) 。
5. 救世主:Attention 机制
为了打破瓶颈,Attention(注意力)机制应运而生。它的核心思想非常直观:不要死记硬背,要学会“抄书”。
Attention 是怎么做的?
在 Attention 模型中,Encoder 不再只输出最后一个状态,而是把所有时间步的隐藏状态都保留下来,交给 Decoder。
当 Decoder 准备翻译某个词(比如 "hit")时:
- 打分 (Score) :Decoder 会拿着自己的当前状态,去和 Encoder 的每一个状态计算相似度。
- 聚焦 (Distribution) :通过 Softmax 算出一个概率分布。这告诉模型:“翻译这个词时,你应该重点看源句子的哪一部分?”(例如翻译 "hit" 时,重点关注 "entarté")。
- 加权 (Context) :根据概率分布,对 Encoder 的状态进行加权平均,得到一个动态的上下文向量。
Attention 的优势
- 彻底消除瓶颈:Decoder 可以直接“看见”源句子的任意位置,不再受限于单一向量。
- 解决长序列遗忘:无论句子多长,只要 Attention 算得准,就能找到相关信息。
- 可解释性:我们可以通过可视化 Attention 矩阵(对齐图),清楚地看到模型在翻译时到底在看哪里。
6. 总结
CS224n 的这部分课程展示了深度学习解决问题的典型思路:
- 抽象问题:将翻译抽象为 P(y|x) 的计算。
- 设计架构:提出 Seq2Seq + RNN 解决变长序列问题。
- 发现缺陷:识别出定长向量带来的“信息瓶颈”。
- 改进机制:引入 Attention,从“全面压缩”进化为“动态聚焦”。
Attention 机制不仅拯救了 NMT,更成为了后来 Transformer 架构(以及现在的 GPT、BERT 等大模型)的基石。理解了这一课,就拿到了通往现代 NLP 大门的钥匙。