查看全课大纲(第 36 / 69 节)
  1. 1.NLP 的研究领域、应用与学习路径
  2. 2.自然语言的基本术语
  3. 3.信息论基础:信息熵与交叉熵
  4. 4.语言的进化与语义变迁
  5. 5.主观概率、客观概率与条件概率
  6. 6.贝叶斯原理与推理
  7. 7.随机变量:二项式、期望方差与联合概率
  8. 8.常见概率分布
  9. 9.辛普森悖论与贝叶斯解题实例
  10. 10.语言模型:语言概率与词袋模型
  11. 11.n-gram 语言模型(二元 / 三元 / N-Gram)
  12. 12.语言模型评价:交叉熵、困惑度与插值
  13. 13.朴素贝叶斯文本分类:垃圾邮件
  14. 14.拼写检查
  15. 15.中文分词:构词法、最大匹配、最优路径与 Jieba
  16. 16.词表示问题与语义相似度
  17. 17.TF-IDF 权重处理
  18. 18.One-Hot 表达与词表示的局限
  19. 19.Word2Vec 核心思想
  20. 20.Word2Vec 训练过程
  21. 21.Skip-gram 模型详解
  22. 22.词性标注任务与标注方法(规则 + N-Gram)
  23. 23.EM 算法与混合模型
  24. 24.高斯混合模型 GMM
  25. 25.从混合模型到隐马尔可夫模型
  26. 26.隐马尔可夫模型(HMM)推导与维特比解码
  27. 27.线性链条件随机场 CRF
  28. 28.贝叶斯网络与图模型
  29. 29.隐马尔可夫链与 HMM 推导
  30. 30.PLSA 主题模型
  31. 31.LSI 与 SVD 向量表达
  32. 32.LDA 与狄利克雷分布
  33. 33.主题模型实验复现(困惑度 / 分类 / 相似度 / 延展)
  34. 34.上下文无关文法(CFG)与句法分析
  35. 35.概率上下文无关文法 PCFG
  36. 36.统计机器翻译:词对齐与翻译模型
  37. 37.统计机器翻译中的对齐模型与参数估计
  38. 38.从统计机器翻译到神经机器翻译
  39. 39.神经元与反向传播速览(指向深度学习课)
  40. 40.CNN 原理及其在 NLP 中的应用
  41. 41.循环神经网络的基本原理与 Elman / Jordan 网络
  42. 42.LSTM:长短期记忆网络的核心思想与分步实现
  43. 43.Encoder-Decoder 框架
  44. 44.Seq2Seq 与早期注意力机制
  45. 45.注意力机制的背景与动机
  46. 46.注意力模型实现原理与匹配函数
  47. 47.记忆网络:组成与计算
  48. 48.注意力机制的应用与历史延展
  49. 49.Transformer 结构:Encoder-Decoder 栈与 Self-Attention
  50. 50.Multi-Head Attention、FFNN 与位置编码
  51. 51.层归一化、损失函数与 Universal Transformer 延展
  52. 52.预训练范式:从 ELMo 到 BERT
  53. 53.BERT 与掩码语言模型
  54. 54.BERT 下游任务微调与 GLUE 口径
  55. 55.GPT 与自回归语言建模
  56. 56.GPT-1 到 GPT-4 的演进
  57. 57.指令微调与 RLHF
  58. 58.分词器:BPE、WordPiece 与中文词表
  59. 59.上下文窗口与长文本处理
  60. 60.能力边界、成本与适用场景
  61. 61.文本分类实战:从朴素贝叶斯到逻辑回归
  62. 62.命名实体识别实战
  63. 63.文本生成与摘要实战
  64. 64.语义检索与向量库实战
  65. 65.RAG 知识库问答
  66. 66.NLP 评估指标:BLEU / ROUGE / BERTScore 与人工评估
  67. 67.幻觉与事实性问题
  68. 68.文本与知识结合(知识图谱压缩)
  69. 69.跨媒体信息检索与未来展望

统计机器翻译:词对齐与翻译模型

小象实战讲义 · 自然语言处理

机器翻译(Machine Translation, MT)是自然语言处理领域最具挑战性和影响力的任务之一,其目标是实现不同语言之间的自动转换。在本节中,我们将从概率视角出发,深入探讨统计机器翻译(Statistical Machine Translation, SMT)的核心思想。你将理解如何将翻译问题形式化为一个概率生成模型,并学习经典的 IBM 模型系列,特别是其如何通过引入“生育率”、“畸变”等概念来解决词对齐(Word Alignment)这一核心难题。本节是理解从基于规则的翻译到数据驱动的统计翻译范式转变的关键。

💡 核心导读

  • 概率化翻译:将翻译任务建模为在给定源语言句子下,寻找目标语言句子概率最大的问题,并利用贝叶斯公式进行分解。
  • 生成模型视角:将翻译过程视为一个“生成”过程:目标语言句子通过一系列概率步骤“生成”源语言句子。
  • IBM 模型核心概念:引入“生育率”(Fertility)描述一词翻多词,“畸变”(Distortion)描述词序变化,“翻译模型”(Translation Model)描述词对词的翻译概率。
  • 对齐问题:词对齐是统计机器翻译的基石,它建立了双语语料中词与词之间的对应关系,是估计所有模型参数的前提。
  • 参数估计:通过期望最大化(EM)算法,在只有句子对而没有词对齐标注的情况下,迭代估计模型参数。

从概率视角看翻译

我们首先将机器翻译形式化。假设我们有两种语言:源语言(Source Language,例如中文 Chinese,记作 CC)和目标语言(Target Language,例如英文 English,记作 EE)。给定一个源语言句子 cc,机器翻译的目标是找到那个使得条件概率 P(e∣c)P(e \mid c) 最大的目标语言句子 e^\hat{e}: e^=arg⁡max⁡eP(e∣c)\hat{e} = \arg\max_{e} P(e \mid c)

这被称为噪声信道模型(Noise Channel Model)。我们可以通过贝叶斯公式将其改写: P(e∣c)=P(c∣e)P(e)P(c)P(e \mid c) = \frac{P(c \mid e) P(e)}{P(c)}

由于对于给定的 cc,分母 P(c)P(c) 是常数,因此最大化 P(e∣c)P(e \mid c) 等价于最大化分子: e^=arg⁡max⁡eP(c∣e)P(e)\hat{e} = \arg\max_{e} P(c \mid e) P(e)

这里,P(e)P(e) 是语言模型(Language Model),它衡量目标语言句子 ee 本身的流畅度。P(c∣e)P(c \mid e) 是翻译模型(Translation Model),它衡量在“假设 ee 是正确翻译”的前提下,观察到源语言句子 cc 的可能性。整个翻译过程可以理解为:我们先根据语言模型 P(e)P(e) 生成一个可能的目标语言句子 ee,然后通过一个“噪声信道”(即翻译过程)将其“扭曲”成源语言句子 cc;而解码(翻译)就是根据观察到的 cc,去反向寻找最有可能的原始句子 ee。

这种形式化的美妙之处在于,它将一个复杂的、需要“理解”语义的翻译问题,分解为两个相对独立、可基于大量数据统计估计的概率模型。

翻译的挑战:词对齐

在深入模型之前,我们必须直面翻译中的一个根本性挑战:源语言和目标语言的句子之间,词语并非严格一一对应。这种对应关系被称为词对齐(Word Alignment)。

考虑一个简单例子:

  • 中文:我 / 的 / 孩子 / , / 你 / 要 / 回家 / 吗 / ?
  • 英文:My / child / , / will / you / go / home / ?

观察可以发现:

  1. 一对多:中文词“孩子”对应英文词“child”(一对一),但中文词“要”对应英文短语“will you go”?实际上,“要”主要对应“will”,而“你”和“回家”分别对应“you”和“go home”。这表明一个源语言词可能对应零个、一个或多个目标语言词。
  2. 词序变化:对照上方两句,“要”位于中文第 6 位,对应“will”位于英文第 4 位,位置发生了变化;“你”与“you”虽一一对应,但在两句中都是第 5 位,位置并未改变。
  3. 空对应:中文的语气助词“吗”在英文中没有直接的词汇对应,它可能被融合到疑问句的语序或语调中,在词对齐层面可以视为对应一个“空”(NULL)词。

传统的监督学习(如词性标注)要求每个输入词都有一个明确的标签。但在翻译中,我们只有句子对的标注,而没有词与词之间对齐关系的标注。并且,这种对齐关系本身也是不确定的(例如,“杯子”可能被翻译成“cup”或“mug”)。因此,我们需要一个能够隐式建模对齐关系的生成模型。

IBM 模型:一个生成故事的开始

IBM 模型系列(IBM Models 1-5)是统计机器翻译的奠基性工作。其核心思想是为翻译过程 P(c∣e)P(c \mid e) 构思一个详细的生成故事(Generative Story):目标语言句子 ee 是如何一步步“生成”源语言句子 cc 的。

这个故事涉及几个关键的概率组件,我们以从英文 ee 生成中文 cc 为例来说明(注意:在噪声信道模型中,翻译模型是 P(c∣e)P(c \mid e),所以生成方向是从目标语言到源语言)。

1. 生育率(Fertility)

生育率 ϕi\phi_i 描述目标语言句子 ee 中第 ii 个词 eie_i 会“生出”多少个源语言词。它是一个随机变量,其概率分布记为 n(ϕi∣ei)n(\phi_i \mid e_i)。

  • ϕi=0\phi_i = 0:eie_i 不生成任何源语言词(例如,英文冠词“the”在中文中常不翻译)。
  • ϕi=1\phi_i = 1:eie_i 生成一个源语言词(最常见情况,如“computer” -> “计算机”)。
  • ϕi=2\phi_i = 2:eie_i 生成两个源语言词(如“computer” -> “计算” + “机”)。
  • ϕi>2\phi_i > 2:生成多个词(较少见,可能出现在成语或复杂表达的翻译中)。

此外,模型还引入一个特殊的 NULL 词(记作 e0e_0),它可以“生出”源语言句子中那些在目标语言中没有明显对应词的词(如中文语气词“吗”)。NULL 词的生育率概率为 n(ϕ0∣NULL)n(\phi_0 \mid NULL)。

一个句子中所有词的生育率之和,必须等于生成的源语言句子的长度 mm:∑i=0lϕi=m\sum_{i=0}^{l} \phi_i = m,其中 ll 是目标语言句子 ee 的长度。

2. 词汇翻译(Translation)

给定目标语言词 eie_i 及其生育率 ϕi\phi_i,我们需要决定它生成的是哪些具体的源语言词。这个过程由词汇翻译概率 t(c∣e)t(c \mid e) 控制,它表示目标语言词 ee 被翻译成源语言词 cc 的概率。

例如,t(计算机∣computer)t(\text{计算机} \mid \text{computer}) 可能很高,而 t(桌子∣computer)t(\text{桌子} \mid \text{computer}) 则接近零。如果一个词 eie_i 的生育率 ϕi=2\phi_i=2,那么我们需要根据 t(⋅∣ei)t(\cdot \mid e_i) 独立地采样两次,得到两个源语言词(注意:这两个词可能相同,也可能不同)。

3. 畸变(Distortion)

最后,我们需要决定这些生成的目标词(本节例子里是中文词)被放在目标句子的什么位置。畸变概率 d(j∣i,l,m)d(j \mid i, l, m) 描述了:在目标语言句子长度为 ll、生成的目标语言句子长度为 mm 的条件下,由目标语第 ii 个词生成的某个目标词出现在目标语第 jj 个位置的概率。

这里最容易讲错的一点是”一对多怎么摆”。正确的说法是:每个生成出来的词各自独立地按 d(j∣i,l,m)d(j \mid i, l, m) 选位置,模型 3 并不要求同一个源词生出的 ϕi\phi_i 个词必须相邻——它们完全可以被插到句子的不同位置。所谓”连续放置”是很多教材为讲清直觉而加的简化,它对应更靠后的模型(比如 Model 4 用相对位置与词类来约束顺序偏好);把这条简化说成模型 3 的定义,就等于给模型凭空加了一条硬约束。

这是模型 3 与模型 2 最关键的分野:模型 2 里”一个源词→一个目标词”,位置只是那条边的位置;模型 3 引入词位后,一条源词可能拉出多条边,每条边各自带一个位置 (j,i)(j, i)。

完整的生成过程

现在,我们可以描述从英文句子 e=(e1,e2,...,el)e = (e_1, e_2, ..., e_l) 生成中文句子 c=(c1,c2,...,cm)c = (c_1, c_2, ..., c_m) 的完整故事:

  1. 对于每个英文词 eie_i(包括 NULL 词 e0e_0),根据 n(ϕi∣ei)n(\phi_i \mid e_i) 采样其生育率 ϕi\phi_i,确保 ∑i=0lϕi=m\sum_{i=0}^{l} \phi_i = m。
  2. 对于每个英文词 eie_i(包括 NULL 词 e0e_0),根据其生育率 ϕi\phi_i,独立地根据概率 t(⋅∣ei)t(\cdot \mid e_i) 采样 ϕi\phi_i 个中文词。我们得到一个中文词的“词袋”。
  3. 对于每个生成出来的中文词(它由某个英文词 eie_i 产出),独立地根据畸变概率 d(j∣i,l,m)d(j \mid i, l, m) 采样一个目标位置 jj。同一个 eie_i 生出的多个词不强制相邻,各自选位。
  4. 将所有放入位置的中文词按顺序读出,即得到生成的中文句子 cc。

这个生成过程定义了一个复杂的联合概率分布 P(c,a∣e)P(c, a \mid e),其中 aa 代表一个特定的对齐(Alignment),它记录了每个源语言词是由哪个目标语言词生成的。而翻译概率 P(c∣e)P(c \mid e) 则是所有可能对齐 aa 下的概率之和:P(c∣e)=∑aP(c,a∣e)P(c \mid e) = \sum_{a} P(c, a \mid e)。

理解对齐:一个具体例子

让我们通过一个简化的例子来直观理解对齐和上述概念。假设我们有一个小型双语语料库:

英文 (e)中文 (c)假设的对齐 (a)
B C DX Y ZB->X, C->∅(φCφ_C=0,不生成词), D->{Y, Z}
B DX YB->X, D->Y

这里我们人为指定了对齐关系以便说明。在实际训练中,对齐是隐藏的。

1. 估计生育率概率 n(ϕ∣e)n(\phi \mid e):

  • 对于词 B:在两条数据中,B 都只生成了 1 个中文词(X)。所以 n(ϕ=1∣B)=2/2=1.0n(\phi=1 \mid B) = 2/2 = 1.0。
  • 对于词 C:只在第一条数据出现,生成了 0 个词。所以 n(ϕ=0∣C)=1/1=1.0n(\phi=0 \mid C) = 1/1 = 1.0。
  • 对于词 D:出现两次。第一次生成 2 个词(Y, Z),第二次生成 1 个词(Y)。所以:
    • n(ϕ=1∣D)=1/2=0.5n(\phi=1 \mid D) = 1/2 = 0.5
    • n(ϕ=2∣D)=1/2=0.5n(\phi=2 \mid D) = 1/2 = 0.5
  • 对于 NULL:本例 C 的生育率为 0,不生成任何中文词;没有由 NULL 生成的词,故 n(ϕ=0∣NULL)=1.0n(\phi=0 \mid NULL) = 1.0,也不应把 C 连到 NULL。

2. 估计词汇翻译概率 t(c∣e)t(c \mid e):

  • t(X∣B)t(X \mid B): B 出现两次,两次都生成 X。所以 t(X∣B)=2/2=1.0t(X \mid B) = 2/2 = 1.0。t(Y∣B)=0t(Y \mid B) = 0, t(Z∣B)=0t(Z \mid B) = 0。
  • t(Y∣D)t(Y \mid D): D 出现两次,生成了 Y 两次(第一次和第二次)。所以 t(Y∣D)=2/2=1.0t(Y \mid D) = 2/2 = 1.0?等等,这里有个细节。在第一次,D 生成了两个词 Y 和 Z。我们需要统计 D 总共生成了多少个“词次”。D 在第一次生成了 2 个词次,第二次生成了 1 个词次,总共 3 个词次。其中,Y 出现了 2 次(第一次的 Y 和第二次的 Y),Z 出现了 1 次。因此:
    • t(Y∣D)=2/3≈0.667t(Y \mid D) = 2/3 \approx 0.667
    • t(Z∣D)=1/3≈0.333t(Z \mid D) = 1/3 \approx 0.333
    • t(X∣D)=0/3=0.0t(X \mid D) = 0/3 = 0.0

3. 估计畸变概率 d(j∣i,l,m)d(j \mid i, l, m): 畸变概率依赖于句子长度。我们看第一条数据:l=3 (B,C,D),m=3 (X,Y,Z)。

  • 对于 B (i=1):它生成 X,X 在中文句子的位置 j=1。所以这是一个 (i=1, j=1, l=3, m=3) 的事件。
  • 对于 D (i=3):它生成 Y 和 Z,两个词各自独立选位:Y 在位置 j=2,Z 在位置 j=3。所以是两个事件 (i=3, j=2, l=3, m=3) 与 (i=3, j=3, l=3, m=3)。

我们需要在大量相同 (l, m) 的句子对中统计,才能得到可靠的 d(j∣i,l,m)d(j \mid i, l, m)。例如,在所有 l=3, m=3 的句子对中,统计目标语言第 i 个词生成的每个词落在位置 j 的频率。本例数据太少,无法给出有效估计。

这个例子清晰地展示了,如果给我们词对齐标注,我们可以通过简单的计数来估计模型参数 nn, tt, dd。然而,现实是残酷的——我们只有大量的句子对 (c,e)(c, e),而没有对齐标注 aa。

参数估计:EM 算法

我们没有对齐标注,但我们可以用期望最大化算法(Expectation-Maximization Algorithm)来同时估计模型参数和隐变量(对齐)。

其基本思想是迭代进行以下两步:

  1. E步(期望步):在给定当前模型参数 θ(t)\theta^{(t)}(即当前的 n,t,dn, t, d 估计)的情况下,计算对于每个训练句子对 (c,e)(c, e),所有可能对齐 aa 的后验概率 P(a∣c,e;θ(t))P(a \mid c, e; \theta^{(t)})。
  2. M步(最大化步):利用 E 步计算出的对齐后验概率作为“软计数”,重新估计模型参数 θ(t+1)\theta^{(t+1)},使得训练数据的期望似然最大。

这个过程不断重复,直到参数收敛。IBM Model 1 做了一个极大的简化:它假设所有对齐都是等可能的(即畸变概率是均匀的),并且只建模词汇翻译概率 t(c∣e)t(c \mid e)。这使得其似然函数是凸的,EM 算法可以收敛到全局最优解,因此常被用作更复杂模型(如 Model 2, 3, 4)的初始化。

下面我们用 Python 模拟一个极度简化的场景,来展示 EM 算法估计词汇翻译概率 t(c∣e)t(c \mid e) 的思想。注意,真实 IBM Model 1 的实现复杂得多,这里仅作原理演示。

import numpy as np
from collections import defaultdict

# 模拟一个极小的双语语料库:英文->中文
# 我们不知道词对齐
corpus = [
    (['apple', 'pie'], ['苹果', '派']),
    (['apple'], ['苹果'])
]

# 随机初始化词汇翻译概率 t(c|e),再按行归一化(并非均匀分布)
# 收集所有词汇
src_vocab = set()
tgt_vocab = set()
for tgt_words, src_words in corpus:
    src_vocab.update(src_words)
    tgt_vocab.update(tgt_words)

src_vocab = list(src_vocab)  # 中文
tgt_vocab = list(tgt_vocab)  # 英文

# 初始化 t(c|e) 矩阵:随机数初始化后按行归一化
# t_matrix[e_idx][c_idx] = t(c|e)
np.random.seed(42)  # 固定随机种子
t_matrix = np.random.rand(len(tgt_vocab), len(src_vocab))
# 对每个英文词,其翻译概率归一化
t_matrix = t_matrix / t_matrix.sum(axis=1, keepdims=True)

# 将词映射到索引
src_index = {word: i for i, word in enumerate(src_vocab)}
tgt_index = {word: i for i, word in enumerate(tgt_vocab)}

print("初始化的词汇翻译概率 t(c|e):")
for e_idx, e_word in enumerate(tgt_vocab):
    for c_idx, c_word in enumerate(src_vocab):
        print(f"  t({c_word}|{e_word}) = {t_matrix[e_idx, c_idx]:.4f}", end="  ")
    print()
print()

# 模拟一次迭代(简化版E步和M步)
max_iter = 5
for iter in range(max_iter):
    # E步:计算对齐的期望计数(软计数)
    # count_e_c[e][c] 是 t(c|e) 的期望计数
    count_e_c = defaultdict(lambda: defaultdict(float))
    count_e = defaultdict(float)
    
    for tgt_words, src_words in corpus:
        l = len(tgt_words)
        m = len(src_words)
        # 简化:假设所有对齐等可能(IBM Model 1 假设),每个中文词独立对齐到任一英文词
        # 下面循环只枚举 i'=1..l,即主动忽略 NULL 分支,当前演示版的对齐空间是 l^m:m 个中文词各自对齐到 l 个英文来源之一。
        # 若把 NULL 也纳入(a_j=0),循环应写 range(0, l+1),对齐空间才是 (l+1)^m。
        # 更简化的计算:对于每个 (c_j, e_i) 对,其贡献为 t(c_j | e_i) / sum_{i'=1}^{l} t(c_j | e_{i'})
        # 我们忽略 i'=0 (NULL) 的情况。
        for c_word in src_words:
            c_idx = src_index[c_word]
            # 计算归一化因子 Z
            Z = 0.0
            contributions = []
            for e_word in tgt_words:
                e_idx = tgt_index[e_word]
                prob = t_matrix[e_idx, c_idx]
                Z += prob
                contributions.append((e_word, prob))
            # 更新期望计数
            for e_word, prob in contributions:
                if Z > 0:
                    count_e_c[e_word][c_word] += prob / Z
                    count_e[e_word] += prob / Z
    
    # M步:用期望计数重新估计 t(c|e)
    new_t_matrix = np.zeros_like(t_matrix)
    for e_idx, e_word in enumerate(tgt_vocab):
        total = count_e.get(e_word, 1e-10)  # 防止除零
        for c_idx, c_word in enumerate(src_vocab):
            new_t_matrix[e_idx, c_idx] = count_e_c[e_word].get(c_word, 0.0) / total
    
    # 检查收敛(变化很小)
    delta = np.abs(new_t_matrix - t_matrix).max()
    t_matrix = new_t_matrix
    
    print(f"第 {iter+1} 轮迭代后,最大参数变化: {delta:.6f}")
    # 打印当前估计
    for e_idx, e_word in enumerate(tgt_vocab):
        for c_idx, c_word in enumerate(src_vocab):
            if t_matrix[e_idx, c_idx] > 0.01:  # 只打印显著概率
                print(f"  t({c_word}|{e_word}) = {t_matrix[e_idx, c_idx]:.4f}", end="  ")
        if any(t_matrix[e_idx, :] > 0.01):
            print()

print("\n最终估计的词汇翻译概率:")
for e_idx, e_word in enumerate(tgt_vocab):
    for c_idx, c_word in enumerate(src_vocab):
        print(f"  t({c_word}|{e_word}) = {t_matrix[e_idx, c_idx]:.4f}", end="  ")
    print()
初始化的词汇翻译概率 t(c|e):
  t(派|apple) = 0.2826    t(苹果|apple) = 0.7174  
  t(派|pie) = 0.5501    t(苹果|pie) = 0.4499  

第 1 轮迭代后,最大参数变化: 0.108924
  t(派|apple) = 0.1737    t(苹果|apple) = 0.8263  
  t(派|pie) = 0.6315    t(苹果|pie) = 0.3685  
第 2 轮迭代后,最大参数变化: 0.086227
  t(派|apple) = 0.1131    t(苹果|apple) = 0.8869  
  t(派|pie) = 0.7178    t(苹果|pie) = 0.2822  
第 3 轮迭代后,最大参数变化: 0.063827
  t(派|apple) = 0.0718    t(苹果|apple) = 0.9282  
  t(派|pie) = 0.7816    t(苹果|pie) = 0.2184  
第 4 轮迭代后,最大参数变化: 0.046225
  t(派|apple) = 0.0445    t(苹果|apple) = 0.9555  
  t(派|pie) = 0.8278    t(苹果|pie) = 0.1722  
第 5 轮迭代后,最大参数变化: 0.033599
  t(派|apple) = 0.0268    t(苹果|apple) = 0.9732  
  t(派|pie) = 0.8614    t(苹果|pie) = 0.1386  

最终估计的词汇翻译概率:
  t(派|apple) = 0.0268    t(苹果|apple) = 0.9732  
  t(派|pie) = 0.8614    t(苹果|pie) = 0.1386

从模拟结果可以看出,经过 5 轮迭代,EM 算法已经从句子对里学出相当强的词对应倾向:

  • apple 有 0.9732 的概率被译为 苹果(剩下的 0.0268 落在 派)。
  • pie 有 0.8614 的概率被译为 派(0.1386 落在 苹果)。

注意这不是”几乎总是”那种干净结果:pie 的译法里仍有 14% 的残量分给了 苹果,apple 也有 2.7% 分给了 派。这里不能归因于 Model 1 陷入局部最优——Model 1 的边缘似然关于翻译概率矩阵是凸的,EM 通常收敛到全局最优;残量更可能来自微型语料、有限迭代轮数、对称词对互相”抢”概率质量,以及畸变被简化成均匀分布。想让它更接近 1,得靠更多语料、更长迭代,或者从 Model 1 的均匀结果逐步过渡到 Model 3。

这正是我们期望的行为:在没有对齐标注的情况下,IBM 模型通过 EM 算法自动学到词对齐倾向与翻译概率,为后续解码打下基础。

从统计机器翻译到今天

统计机器翻译(SMT)系统,尤其是基于短语的 SMT(它使用 IBM 模型进行词对齐,然后抽取短语翻译规则),在 21 世纪初到 2010 年代中期是机器翻译的主流,取得了巨大成功。它将机器翻译从基于规则的、需要大量语言学知识的系统中解放出来,完全依赖于数据驱动。

然而,SMT 系统也存在明显的局限性:

  1. 特征工程复杂:需要精心设计多个子模型(翻译模型、语言模型、畸变模型等)和它们的线性组合(对数线性模型),调优权重繁琐。
  2. 错误传播:流水线式设计(分词->对齐->短语抽取->解码)中,前序步骤的错误会影响后续步骤。
  3. 上下文建模能力弱:主要依赖于局部(词或短语)的共现统计,对长距离依赖和全局句子结构建模能力有限。

这些局限性随着神经机器翻译(Neural Machine Translation, NMT)的出现而被突破。NMT 使用一个单一的、端到端的神经网络(通常是编码器-解码器架构配合注意力机制)来直接建模 P(e∣c)P(e \mid c)。它能够自动学习句子级别的表示,更好地捕捉上下文和语义信息,迅速在翻译质量上超越了 SMT,成为当今的主流范式。

尽管如此,理解 SMT 和 IBM 模型仍然至关重要:

  • 历史价值:它是数据驱动方法在 NLP 中成功的典范,其中的许多思想(如噪声信道模型、对齐概念)影响深远。
  • 特定场景应用:在低资源语言翻译或特定领域,SMT 方法因其对数据要求相对灵活,有时仍有应用价值。
  • 基础概念:词对齐的概念在 NMT 的可解释性分析、双语词典构建等领域仍有作用。

📝 动手练一练

  1. 概念辨析:在噪声信道模型 e^=arg⁡max⁡eP(c∣e)P(e)\hat{e} = \arg\max_{e} P(c \mid e) P(e) 中,P(e)P(e) 和 P(c∣e)P(c \mid e) 分别被称为什么模型?它们在翻译过程中各起什么作用?如果 P(e)P(e) 模型很差,可能会导致翻译结果出现什么问题?

  2. 参数估计思考:假设在一个真实的双语语料中,英文词 “bank” 出现在两个不同上下文里,分别被翻译成中文的 “银行” 和 “河岸”。如果我们使用 IBM 模型进行训练,最终学到的 t(银行∣bank)t(\text{银行} \mid \text{bank}) 和 t(河岸∣bank)t(\text{河岸} \mid \text{bank}) 的概率会是多少?这个结果反映了统计翻译模型的什么特点?它带来了什么优点和缺点?

👉 点击查看参考答案
  1. 概念辨析:

    • P(e)P(e) 被称为语言模型(Language Model)。它负责评估目标语言句子 ee 本身的流畅度和语法正确性。它的作用是确保翻译输出是通顺、合乎语法的句子。
    • P(c∣e)P(c \mid e) 被称为翻译模型(Translation Model)。它负责评估源语言句子 cc 与目标语言句子 ee 之间的翻译对应关系。它的作用是确保翻译输出在语义上与输入匹配。
    • 如果 P(e)P(e) 语言模型很差,翻译结果可能会虽然单个词翻译正确,但整体句子不通顺、语序混乱、存在语法错误。例如,将“我爱自然语言处理”翻译成“I love natural language processing”是流畅的,但一个差的语言模型可能输出“processing language natural love I”这样词序混乱的句子。
  2. 参数估计思考:

    • 最终学到的 t(银行∣bank)t(\text{银行} \mid \text{bank}) 和 t(河岸∣bank)t(\text{河岸} \mid \text{bank}) 的概率,将近似等于在训练语料中,“bank”被分别翻译成“银行”和“河岸”的次数比例。例如,如果“bank”出现100次,其中60次上下文对应“银行”,40次对应“河岸”,那么 t(银行∣bank)≈0.6t(\text{银行} \mid \text{bank}) \approx 0.6,t(河岸∣bank)≈0.4t(\text{河岸} \mid \text{bank}) \approx 0.4。
    • 这反映了统计翻译模型完全数据驱动的特点:翻译概率完全从观察到的数据中统计而来,不依赖于人工编写的规则或词典。
    • 优点:能够自动处理一词多义现象,并为不同释义赋予合理的概率。模型可以随着数据量的增加而自动改进。
    • 缺点:严重依赖于训练数据的质量和覆盖度。如果训练数据中“bank”作为“河岸”的语境很少,那么模型在遇到“river bank”时,也可能错误地以高概率翻译成“银行”,因为它没有学到足够的上下文区分能力。这就是为什么后来的神经机器翻译要使用更强大的上下文编码器。

本章小结

本节我们深入探讨了统计机器翻译的概率基础与核心模型。我们从将翻译任务形式化为一个概率优化问题开始,引入了噪声信道模型和贝叶斯分解。面对词对齐这一核心挑战,我们详细阐述了 IBM 模型如何通过构思一个完整的生成故事来隐式建模对齐,其中涉及三个关键概率组件:生育率模型、词汇翻译模型和畸变模型。我们通过具体例子演示了如何从对齐数据中估计这些参数,并解释了在无对齐标注的现实下,如何利用 EM 算法进行迭代估计。最后,我们回顾了 SMT 的历史地位与局限性,并指出了其向神经机器翻译发展的必然性。

📋 行动清单

  • 复述噪声信道模型公式 e^=arg⁡max⁡eP(c∣e)P(e)\hat{e} = \arg\max_{e} P(c \mid e) P(e) 中每个部分的名称和作用。
  • 用自己的话解释“生育率”和“畸变”在 IBM 模型生成故事中分别控制了翻译过程的哪个方面。
  • 思考:既然 IBM 模型能自动学习词对齐,为什么我们还需要更复杂的神经机器翻译模型?尝试列出至少两个原因。

—— 小象教研组