查看全课大纲(第 38 / 69 节)
- 1.NLP 的研究领域、应用与学习路径
- 2.自然语言的基本术语
- 3.信息论基础:信息熵与交叉熵
- 4.语言的进化与语义变迁
- 5.主观概率、客观概率与条件概率
- 6.贝叶斯原理与推理
- 7.随机变量:二项式、期望方差与联合概率
- 8.常见概率分布
- 9.辛普森悖论与贝叶斯解题实例
- 10.语言模型:语言概率与词袋模型
- 11.n-gram 语言模型(二元 / 三元 / N-Gram)
- 12.语言模型评价:交叉熵、困惑度与插值
- 13.朴素贝叶斯文本分类:垃圾邮件
- 14.拼写检查
- 15.中文分词:构词法、最大匹配、最优路径与 Jieba
- 16.词表示问题与语义相似度
- 17.TF-IDF 权重处理
- 18.One-Hot 表达与词表示的局限
- 19.Word2Vec 核心思想
- 20.Word2Vec 训练过程
- 21.Skip-gram 模型详解
- 22.词性标注任务与标注方法(规则 + N-Gram)
- 23.EM 算法与混合模型
- 24.高斯混合模型 GMM
- 25.从混合模型到隐马尔可夫模型
- 26.隐马尔可夫模型(HMM)推导与维特比解码
- 27.线性链条件随机场 CRF
- 28.贝叶斯网络与图模型
- 29.隐马尔可夫链与 HMM 推导
- 30.PLSA 主题模型
- 31.LSI 与 SVD 向量表达
- 32.LDA 与狄利克雷分布
- 33.主题模型实验复现(困惑度 / 分类 / 相似度 / 延展)
- 34.上下文无关文法(CFG)与句法分析
- 35.概率上下文无关文法 PCFG
- 36.统计机器翻译:词对齐与翻译模型
- 37.统计机器翻译中的对齐模型与参数估计
- 38.从统计机器翻译到神经机器翻译
- 39.神经元与反向传播速览(指向深度学习课)
- 40.CNN 原理及其在 NLP 中的应用
- 41.循环神经网络的基本原理与 Elman / Jordan 网络
- 42.LSTM:长短期记忆网络的核心思想与分步实现
- 43.Encoder-Decoder 框架
- 44.Seq2Seq 与早期注意力机制
- 45.注意力机制的背景与动机
- 46.注意力模型实现原理与匹配函数
- 47.记忆网络:组成与计算
- 48.注意力机制的应用与历史延展
- 49.Transformer 结构:Encoder-Decoder 栈与 Self-Attention
- 50.Multi-Head Attention、FFNN 与位置编码
- 51.层归一化、损失函数与 Universal Transformer 延展
- 52.预训练范式:从 ELMo 到 BERT
- 53.BERT 与掩码语言模型
- 54.BERT 下游任务微调与 GLUE 口径
- 55.GPT 与自回归语言建模
- 56.GPT-1 到 GPT-4 的演进
- 57.指令微调与 RLHF
- 58.分词器:BPE、WordPiece 与中文词表
- 59.上下文窗口与长文本处理
- 60.能力边界、成本与适用场景
- 61.文本分类实战:从朴素贝叶斯到逻辑回归
- 62.命名实体识别实战
- 63.文本生成与摘要实战
- 64.语义检索与向量库实战
- 65.RAG 知识库问答
- 66.NLP 评估指标:BLEU / ROUGE / BERTScore 与人工评估
- 67.幻觉与事实性问题
- 68.文本与知识结合(知识图谱压缩)
- 69.跨媒体信息检索与未来展望
从统计机器翻译到神经机器翻译
小象实战讲义 · 自然语言处理
在掌握了句法分析和早期机器翻译的概率模型基础后,我们迎来了机器翻译领域的一次范式革命。本节将作为关键衔接,回顾统计机器翻译(SMT)的核心思想与局限,并系统性地引入神经机器翻译(NMT)的基本框架。我们将看到,从基于短语和语法的复杂统计系统,到端到端的神经网络模型,不仅是技术路径的转变,更是对“翻译”这一任务认知的深化。本节是理解后续注意力机制、Transformer乃至大模型在翻译任务上演进的重要基石。
💡 核心导读
- 统计机器翻译的遗产:理解基于噪声信道模型和短语对齐的 SMT 如何将翻译分解为翻译模型、语言模型等子问题,并认识其工程复杂性与误差传播的局限。
- 神经机器翻译的范式:掌握编码器-解码器(Seq2Seq)这一核心架构,理解其如何将源语言句子编码为固定维度的上下文向量,再解码为目标语言序列。
- 从 RNN 到注意力:初步了解基于 RNN 的 Seq2Seq 模型在处理长序列时的“信息瓶颈”问题,为下一节深入讲解注意力机制做好铺垫。
- 时代的过渡:明确 SMT 与早期 NMT 各自的优势与挑战,理解为何注意力机制成为 NMT 崛起的关键。
统计机器翻译:基于噪声信道的工程杰作
统计机器翻译将翻译问题形式化为一个噪声信道解码问题:给定一个目标语言(例如英语)句子 ,我们观察到它经过一个“噪声信道”后变成了源语言(例如中文)句子 。我们的任务是找到最可能生成该观测 的原始句子 。根据贝叶斯定理: 其中:
- 是翻译模型,衡量将目标句子 翻译为源句子 的可能性。它通常通过对齐的双语语料库学习得到。
- 是语言模型,衡量目标句子 本身在目标语言中的流畅度。通常使用 n-gram 语言模型。
IBM 模型系列(Model 1-5)是早期构建翻译模型 的奠基性工作(Brown 等,The Mathematics of Statistical Machine Translation: Parameter Estimation,Computational Linguistics, 1993)。它们引入了词对齐(Word Alignment)的概念:对齐是一个从源句位置到目标句位置的映射,每个源语言词恰对应一个目标语言词(或空位 NULL);反过来,一个目标词可以生成多个源词,这种一对多关系要到 Model 3 才由 fertility 显式建模。例如,在句子对 (我 爱 你, I love you) 中,可能的学习对齐是 我-I,爱-love,你-you。
这五个模型不是并列的五种方案,而是一条逐步补短板的演进线:
- Model 1:只学词汇翻译概率 ,对齐在所有长度相容的位置上均匀分布,不区分远近;
- Model 2:在 Model 1 之上加入非均匀的位置对齐概率,开始偏好位置相近的词互译;
- Model 3:引入 fertility(一个目标词生成几个源词)与 distortion(调序),一对多与词序第一次被显式建模;
- Model 4:把调序改写成相对位置描述,更适合刻画整个词组一起移动;
- Model 5:修补前几代的对齐缺陷,避免把概率质量分给“同一位置被多个词占用”这类不可能的对齐。
这条演进线正是 SMT 从“词对词”走向“短语对短语”的铺垫。
随着发展,更实用的 SMT 系统采用了基于短语的翻译。它不再局限于单词对齐,而是学习短语对(Phrase Pair)的翻译概率。一个短语是连续的词序列。系统首先从词对齐的双语语料中抽取所有一致的短语对,然后为每个短语对 估计翻译概率 和 。解码时,系统将源句子分割成若干短语,为每个短语选择候选翻译,再把这些特征(短语翻译概率、语言模型、调序、词惩罚等)以对数线性模型(log-linear model)加权求和,权重由最小错误率训练(MERT)在开发集上调出;代表系统是 Moses(Koehn 等,2007)。
SMT 解码过程示意图(以短语为例):
源句: [我] [爱] [自然语言处理]
| | |
短语表: (我, I) (爱, love) (自然语言处理, natural language processing)
| | |
候选翻译: I love natural language processing
\ /
语言模型评分 & 调序: -> I love natural language processing.SMT 是一个典型的分而治之的工程系统,每个组件(分词器、对齐工具、翻译模型、语言模型、调序模型、解码器)都可以独立优化。它的优势在于可解释性强,能有效利用大量单语数据(训练语言模型)和双语词典。然而,其缺点也非常明显:
- 误差传播:流水线中上游组件的错误会直接影响下游。
- 特征工程复杂:需要精心设计多个子模型和特征函数,并调整其权重。
- 泛化能力有限:系统严重依赖于从平行语料中观察到的短语对,对于未登录词或复杂句式处理能力弱。
- 上下文建模不足:n-gram 语言模型只能捕捉局部依赖,翻译决策缺乏对句子整体语义的把握。
神经机器翻译:端到端的语义学习
神经机器翻译旨在用一个单一的、大型的神经网络模型,直接学习从源语言序列到目标语言序列的映射 ,实现端到端的训练。其核心思想是编码器-解码器(Encoder-Decoder)架构,也称为序列到序列(Seq2Seq)模型。
编码器-解码器(Seq2Seq)框架
- 编码器:读取整个源语言句子 ,并将其编码成一个固定维度的上下文向量(Context Vector)。这个向量旨在捕获源句子的全部语义信息。
- 解码器:以一个特殊的开始符号
<sos>和上下文向量 作为初始输入,逐步生成目标语言序列 ,直到生成结束符号<eos>。在每一步 ,解码器根据当前状态、上一步生成的词以及上下文向量 ,预测下一个词的概率分布 。
基于 RNN 的 Seq2Seq
最初的 NMT 使用循环神经网络(RNN),特别是长短期记忆网络(LSTM)或门控循环单元(GRU)作为编码器和解码器的基础单元。这一架构由两组工作几乎同时提出:Sutskever 等(NIPS 2014)用多层 LSTM 实现序列到序列学习,Cho 等(EMNLP 2014)提出 RNN Encoder–Decoder 并引入 GRU。
- 编码器(RNN):逐个处理源语言词 的嵌入向量,最后一个时间步的隐藏状态 被用作上下文向量 。
源句: f1 f2 f3 ... fT ↓ ↓ ↓ ↓ RNN → RNN → RNN ... → RNN | c = h_T - 解码器(RNN):在训练时,使用教师强制(Teacher Forcing),即将真实的目标序列词作为上一步输入。第一步的隐藏状态初始化为 ,输入为
<sos>。
损失函数是每一步预测词与真实词之间的交叉熵损失之和。解码步骤: 初始: s0 = c, 输入 = <sos> 第1步: s1 = RNN(s0, emb(<sos>)), 输出概率 P(e1|...) 第2步: s2 = RNN(s1, emb(e1_true)), 输出概率 P(e2|...) ...
下面用 numpy 跑一个极简的 RNN 编码器,把不同长度的句子压成同一个固定维度的上下文向量——这正是后面“信息瓶颈”说法的来源。
import numpy as np
# 隐藏维度固定为 4,与句子长度无关
HIDDEN = 4
VOCAB = 10
np.random.seed(42)
embed = np.random.randn(VOCAB, HIDDEN) * 0.1 # 词嵌入
W_xh = np.random.randn(HIDDEN, HIDDEN) * 0.1 # 输入到隐藏
W_hh = np.random.randn(HIDDEN, HIDDEN) * 0.1 # 隐藏到隐藏
def encode(seq):
"""逐词读入,返回最后一个时间步的隐藏状态 c"""
h = np.zeros(HIDDEN)
for w in seq:
h = np.tanh(W_xh @ embed[w] + W_hh @ h)
return h
for name, seq in [("短句(3词)", [1, 2, 3]), ("长句(8词)", [1, 2, 3, 4, 5, 6, 7, 8])]:
c = encode(seq)
print(f"{name} -> 上下文向量维度 {c.shape[0]},前两维 {c[:2].round(4)}")短句(3词) -> 上下文向量维度 4,前两维 [0.0019 0.013 ]
长句(8词) -> 上下文向量维度 4,前两维 [ 0.0015 -0.0098]两个长度差近三倍的句子,最终都只剩同样 4 个数。这个演示只说明一件事:输入长度在变,上下文向量的维度不变——源句的全部信息都必须挤进这个固定槽位。它并没有测量“保留了多少信息”,所以不能据此推断句子越长就丢得越多。能确定的是:当长句的细节超出这个向量的容量、又超出训练时见过的句长分布,解码器就拿不到足够信息,翻译质量随之下降——这正是后面要讲的信息瓶颈。
RNN Seq2Seq 的瓶颈与注意力的萌芽
基于 RNN 的 Seq2Seq 模型存在一个根本性缺陷:信息瓶颈。编码器必须将整个源句子的信息压缩到一个固定维度的上下文向量 中。对于长句子,这个向量很难保留所有细节,导致解码器在生成后续词时信息不足,翻译质量下降。
此外,解码器在生成每一个目标词时,都使用同一个上下文向量 。这意味着无论当前要生成什么词,模型所依赖的源句子信息是静态的、全局的。这显然不符合翻译的直觉:翻译当前词时,我们通常只重点关注源句子中的某一部分(例如当前短语)。
注意力机制(Attention Mechanism)正是为了解决这个问题而被引入(Bahdanau 等,ICLR 2015)。其核心思想是:在解码器的每一步 ,动态地计算一个新的上下文向量 。 是编码器所有时间步隐藏状态的加权和,权重 (注意力分数)表示在生成第 个目标词时,对源句子第 个词的关注程度。这样,模型在生成每个词时都能“回顾”整个源序列,并聚焦于最相关的部分。
其中 是一个对齐模型,用于评估解码器状态 与编码器状态 之间的匹配程度,例如 。
注意力机制极大地提升了早期 NMT 的长句翻译质量,并使得对齐信息得以可视化,增加了模型的可解释性,为后续 NMT 成为主流奠定了基础;但 Bahdanau 2015 本身并未证明 NMT 已全面超越 SMT,NMT 的广泛主流地位是在 Transformer、大规模语料与算力等后续条件下形成的。
SMT 与 NMT 的对比与演进
| 特性 | 统计机器翻译 (SMT) | 神经机器翻译 (NMT) |
|---|---|---|
| 核心思想 | 噪声信道模型,贝叶斯分解 | 端到端序列到序列学习 |
| 模型结构 | 模块化流水线(翻译模型、语言模型等) | 单一神经网络(编码器-解码器) |
| 数据利用 | 需要词/短语对齐的双语语料;可大量利用单语语料 | 直接需要句子对齐的双语语料;单语语料利用早期较难 |
| 特征工程 | 重度依赖,需要设计多个子模型和特征 | 轻度依赖,神经网络自动学习特征表示 |
| 上下文建模 | 局部(n-gram),缺乏长程依赖 | 全局(通过RNN/注意力),能捕捉长程语义 |
| 泛化能力 | 对未登录短语/句式弱 | 较强,能生成未在训练中出现的合理词序 |
| 可解释性 | 较强(词对齐、短语表可查看) | 较弱,但注意力图提供部分对齐可视化 |
| 工程复杂度 | 高,组件多,调参复杂 | 相对低,模型统一,训练端到端 |
从 SMT 到 NMT 的过渡并非一蹴而就。早期 NMT 在资源丰富的语种上迅速展现优势,但在低资源场景下,SMT 因其能更好地利用单语数据和词典先验,仍有一定竞争力。此外,将 SMT 的领域知识(如术语表)融入 NMT 系统,也是研究的一个方向。然而,随着注意力机制的完善、Transformer 架构的出现以及大规模预训练模型的普及,NMT 已成为绝对的主流,SMT 则主要存在于特定历史系统或作为某些混合系统的组件。
📝 动手练一练
- 概念辨析:在基于 RNN 的 Seq2Seq 机器翻译模型中,编码器最后一个隐藏状态作为上下文向量 。请简要分析这种设计在处理长句子时可能遇到的主要问题是什么?注意力机制是如何从原理上解决这个问题的?
👉 点击查看参考答案
主要问题:信息瓶颈。编码器需要将整个源句子的所有信息压缩到一个固定维度的向量 中。对于长句子,尤其是包含复杂结构或大量信息的句子, 的容量可能不足以无损地编码所有必要信息,导致信息丢失。解码器在生成目标序列时,只能基于这个可能已失真的、全局的摘要向量,因此长句翻译质量会下降。
注意力机制的解决原理:注意力机制允许解码器在生成每一个目标词时,动态地访问编码器的所有隐藏状态,而不仅仅是最后的 。具体来说,解码器在每一步 会计算一个注意力分布 ,该分布表示当前生成步骤应对源句子中第 个词赋予多少“注意力”。然后,用这个分布对编码器所有隐藏状态进行加权求和,得到一个与当前生成步骤强相关的、动态的上下文向量 。这样,模型就不再依赖于一个固定的信息瓶颈,而是可以根据需要,在生成不同目标词时灵活地聚焦于源句子的不同部分。
- 手算理解:假设一个极简的编码器-解码器模型,源句子长度为3,编码器隐藏状态分别为 , , 。在解码的某一步,计算出的对齐分数(未归一化)为 。请计算此步骤的注意力分布 和最终的上下文向量 。
👉 点击查看参考答案
首先,使用 softmax 函数对对齐分数 进行归一化,得到注意力分布 :
计算:
- 分母和:
因此:
所以注意力分布 。
接着,计算上下文向量 作为编码器隐藏状态的加权和:
因此,该解码步骤的上下文向量 。可以看到,由于 的注意力权重最高, 的值更接近 。
本章小结
本节我们完成了从统计机器翻译到神经机器翻译的关键跨越。我们回顾了 SMT 基于噪声信道和短语的经典框架,认识到其分治策略的工程成就与固有局限。随后,我们深入探讨了 NMT 的基石——编码器-解码器(Seq2Seq)架构,理解了其如何用单一的神经网络实现端到端的翻译。我们特别指出了早期基于 RNN 的 Seq2Seq 模型存在的“信息瓶颈”问题,这自然引出了下一节的核心:注意力机制。注意力机制通过让解码器动态地聚焦于源句子的不同部分,不仅显著提升了翻译质量,尤其是对长句的处理,也为模型提供了一定的可解释性。
📋 行动清单
- 理清脉络:尝试用自己的话简述 SMT 的“分治”思想与 NMT 的“端到端”思想最根本的区别在哪里。
- 理解瓶颈:明确为什么一个固定的上下文向量 会成为 RNN Seq2Seq 处理长文本的瓶颈。
- 预习衔接:基于对“信息瓶颈”的理解,预习下一节注意力机制,思考它是如何让上下文向量“动”起来的。
—— 小象教研组