【CS224n笔记】从 Seq2Seq 到 Attention:拆解神经机器翻译的进化之路

79 阅读5分钟

【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")时:

  1. 打分 (Score) :Decoder 会拿着自己的当前状态,去和 Encoder 的每一个状态计算相似度。
  2. 聚焦 (Distribution) :通过 Softmax 算出一个概率分布。这告诉模型:“翻译这个词时,你应该重点看源句子的哪一部分?”(例如翻译 "hit" 时,重点关注 "entarté")。
  3. 加权 (Context) :根据概率分布,对 Encoder 的状态进行加权平均,得到一个动态的上下文向量

Attention 的优势

  • 彻底消除瓶颈:Decoder 可以直接“看见”源句子的任意位置,不再受限于单一向量。
  • 解决长序列遗忘:无论句子多长,只要 Attention 算得准,就能找到相关信息。
  • 可解释性:我们可以通过可视化 Attention 矩阵(对齐图),清楚地看到模型在翻译时到底在看哪里。

6. 总结

CS224n 的这部分课程展示了深度学习解决问题的典型思路:

  1. 抽象问题:将翻译抽象为 P(y|x) 的计算。
  2. 设计架构:提出 Seq2Seq + RNN 解决变长序列问题。
  3. 发现缺陷:识别出定长向量带来的“信息瓶颈”。
  4. 改进机制:引入 Attention,从“全面压缩”进化为“动态聚焦”。

Attention 机制不仅拯救了 NMT,更成为了后来 Transformer 架构(以及现在的 GPT、BERT 等大模型)的基石。理解了这一课,就拿到了通往现代 NLP 大门的钥匙。