想象一下,你是一位餐厅老板,想把自家招牌菜的菜单翻译成英文,招待外国客人。你不会英文,但手里有两样东西:一本厚厚的双语菜单册(记录着很多句子中英文对照),以及一摞英文菜单(记录着英文菜名通常怎么搭配使用)。你不敢保证翻译绝对完美,但你有一条朴素逻辑:在双语册里找“长得最像”的对应片段拼起来,再按英文菜单的习惯润色成通顺句子。这就是统计机器翻译(SMT)的雏形——不靠神机妙算的语法天才,而是靠“翻旧账”和“看习惯”来猜最合理的译文。这套思路在深度学习爆发之前,统治了机器翻译领域十几年。本文会用“查菜谱配菜”的比喻,带你从零看懂 SMT 的核心原理。

岗位关联

对 AI 从业者而言,SMT 是理解“数据驱动翻译”的基石:掌握翻译模型、语言模型、平行语料与解码搜索后,你不仅看得懂老一代翻译系统,更能为理解神经机器翻译的演进打下扎实底子。

目录
  1. 可视化演示
  2. 翻译建模思想
  3. 平行语料准备
  4. 词对齐算法
  5. 翻译模型原理
  6. 语言模型原理
  7. 解码搜索策略
  8. 质量评估方法
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示统计机器翻译三大核心环节:平行语料词对齐训练翻译模型、短语表抽取计算翻译概率、束搜索解码结合语言模型生成最优翻译,动态展示BLEU分数与翻译概率。

本节配有交互动效(进入视口后自动加载,约 3KB)。

词对齐 词对齐 短语表 解码 P(e|f) ∝ P(f|e) × P(e)

翻译建模思想

你开了一家“双语餐厅”,后厨墙上贴满了中英对照的菜名便签。但你会发现:同一道“红烧肉”,有时被翻译成“braised pork“,有时被写成”red-cooked pork“。哪种更靠谱?统计机器翻译的核心态度是:不给唯一答案,只给概率。每一种翻译都是一种可能,只是可能性有大有小。这个思路像极了经验丰富的厨师——他不会说某道菜”绝对“怎么做,而是告诉你”八成“该这样做,”两成”可以那样做。

概率翻译观进一步需要一个统一框架来组织这些“可能性”。SMT 借用了通信工程中的噪声信道模型:假设你想说的中文句子 S,经过一个“嘈杂的翻译信道”后,变成了我们看到的英文句子 T。翻译的任务,就是根据收到的 T,反推出最可能被说出的 S。这个“反推”过程自然引出贝叶斯公式——它像一个逆向推理的法宝,把“已知 T 求 S”转化成两个更易统计的乘积。

从技术上说,统计机器翻译的目标函数可以写成如下形式:在给定译入语文本条件下,寻找使后验概率最大化的源语言句子。

回到餐厅比喻:你点了一道英文菜“braised pork with brown sauce“,厨房要猜这道菜对应的中文名。翻译模型负责回答”这个英文菜名有多像某道中文菜“,语言模型负责回答”猜出的中文名在中文菜单里读起来顺不顺口”。两者相乘,得分最高的那个中文菜名,就是最后端上桌的翻译结果。

S^=arg⁡max⁡SP(S∣T)=arg⁡max⁡SP(T∣S)×P(S)\displaystyle \hat{S} = \arg\max_{S} P(S|T) = \arg\max_{S} P(T|S) \times P(S)
公式的意思是:我们最终挑出的译文,既要在“翻译模型”眼里像原文的翻译,又要在“语言模型”眼里是一句通顺的目标语言。
  1. 候选句子 S表示我们猜测的源语言句子(比如中文原句),在所有可能的 S 中做选择。
    S^\hat{S}
  2. 贝叶斯展开把 P(S|T)(已知英文求中文的概率)转化成两个因子的乘积,P(T|S) 是翻译模型,P(S) 是语言模型。
    P(S∣T)=P(T∣S)×P(S)P(S|T) = P(T|S) \times P(S)
  3. 归一化省略分母 P(T) 对所有 S 都一样,不影响最大值比较,所以直接省略。
    arg⁡max⁡SP(T∣S)×P(S)\arg\max_{S} P(T|S) \times P(S)

平行语料准备

要“翻旧账”,首先得有一本厚实的双语菜单册。这本册子在 SMT 里叫做平行语料——大量互为翻译的中英文句子对。比如“我喜欢苹果 / I like apples”就是一对。语料的规模和质量,直接决定了后续所有模型能学到的“经验”上限。这就好比:你的双语菜单册越厚、记录越准确,厨师配菜时能参考的“先例”就越多。

但现实中的语料往往很“脏”。爬虫抓来的双语网页、政府白皮书、电影字幕……这些数据可能带着乱码、重复行、长度严重不匹配的句子对甚至完全错位的翻译。所以准备工作必须经过三步:清洗(去掉乱码和噪声)、预处理(分词、小写化、去除超长句)、句对齐(把互为翻译的句子配对)。其中句对齐尤其关键——你的菜单册如果装订错乱,把“麻婆豆腐”对到了"fried rice"上,那所有统计都会跟着出错。

句对齐的经典方法是基于长度和词汇的混合策略:双语文本中互译的句子往往长度成比例,同时会有一些“锚点词”(如数字、专有名词)帮助锁定对应关系。对齐结果通常用一个二分图来表示,每条边连接一对互译句子。

菜单册一旦整理妥当,接下来就能开始真正“学手艺”了。语料准备的每一步都像是在为厨师准备标准化食材:清洗像择菜去根,分词像切丁切片,句对齐像按食谱把主料配菜分袋装好。没有这套准备工序,再好的统计模型也无米下锅。

P(si↔tj)∝Plen(∣si∣,∣tj∣)×Panchor(si,tj)\displaystyle P(s_i \leftrightarrow t_j) \propto P_{\text{len}}(|s_i|, |t_j|) \times P_{\text{anchor}}(s_i, t_j)
这条公式描述:两个句子能成为翻译对,概率来源于长度分布相似性乘以锚点词共现的相似性。
  1. 候选句子对s_i 是源语言第 i 句,t_j 是目标语言第 j 句,我们要判断它们是否互为翻译。
    (si,tj)(s_i, t_j)
  2. 长度因子源句与目标句的长度比符合经验分布时,对齐概率更高。
    Plen(∣si∣,∣tj∣)P_{\text{len}}(|s_i|, |t_j|)
  3. 词汇锚点共现的专有名词、数字越多,越可能是翻译对。
    Panchor(si,tj)P_{\text{anchor}}(s_i, t_j)

词对齐算法

菜单册里每一行是中英对照句子,但厨师真正要学的是“词”级别的搭配:中文的“红色的”到底对应“red“还是”red-colored“?词对齐解决的就是这个”词与词谁跟谁配对”的问题。它像在双语菜单的一行里,用线把互译的词连起来——线画得准,后面抽取短语才靠谱。

词对齐最经典的数学工具是 IBM 模型家族,其中 IBM Model 1 最简:假设每个源语言词独立地生成一个目标语言词,且每个目标词的对齐位置互不影响。但这个简化模型面临一个“鸡生蛋”困境:要知道每个词去哪了,得先知道对齐概率;要知道对齐概率,又得先有对齐结果。EM 算法(期望最大化)破局的方式是迭代:先给所有对齐一个均匀的猜测,统计出一版概率;再用这版概率重新给对齐打分,更新统计;反复循环,直到概率收敛稳定。

这个词对齐过程用公式表达,就是迭代地估计“源词 s 生成目标词 t”的期望频次,并归一化为概率:

就像厨师反复试菜调整配方——先凭直觉放调料,尝一口,根据味道反馈修正比例,再尝再调,直到味道稳定。EM 算法也是这样一个“猜-改-再猜”的循环,若干轮后,词对齐概率便从粗糙的均匀分布收敛到能反映真实双语规律的分布。

P(t∣s)=∑k=1K∑aP(a∣sk,tk)⋅1[t=tk,s=sk,a]∑k=1K∑t′∑aP(a∣sk,tk)⋅1[s=sk,a]\displaystyle P(t|s) = \frac{\sum_{k=1}^{K} \sum_{a} P(a|s_k, t_k) \cdot \mathbf{1}[t = t_k, s = s_{k,a}]}{\sum_{k=1}^{K} \sum_{t'} \sum_{a} P(a|s_k, t_k) \cdot \mathbf{1}[s = s_{k,a}]}
公式含义:某个源词到目标词的翻译概率,等于所有句子中“该词对以某种对齐方式出现”的期望次数,除以源词在所有对齐中参与生成的期望总次数。
  1. 对齐变量 a表示一个具体词对齐方案,即每个目标词位置对应哪个源词位置。
    P(a∣sk,tk)P(a|s_k, t_k)
  2. 指示函数当且仅当当前对齐把源词 s 与目标词 t 连在一起时取 1,否则取 0,用来计数。
    1[t=tk,s=sk,a]\mathbf{1}[t = t_k, s = s_{k,a}]
  3. 期望频次计数分子累加“源词 s 与目标词 t 被对齐”的期望次数。
    ∑k=1K∑aP(a∣sk,tk)⋅1[t=tk,s=sk,a]\sum_{k=1}^{K} \sum_{a} P(a|s_k, t_k) \cdot \mathbf{1}[t = t_k, s = s_{k,a}]
  4. 归一化分母分母累加源词 s 参与的所有对齐期望次数,保证概率和为 1。
    ∑k=1K∑t′∑aP(a∣sk,tk)⋅1[s=sk,a]\sum_{k=1}^{K} \sum_{t'} \sum_{a} P(a|s_k, t_k) \cdot \mathbf{1}[s = s_{k,a}]

翻译模型原理

词对齐完成之后,厨师终于可以“切菜配菜”了——从对齐好的句对中抽取短语对。这里“短语”不严格等于语言学上的短语,它指任何连续的词串组合。比如从“红色的 苹果 / red apples”这一对齐句中,可以抽取出“红色的 苹果 ↔ red apples”、“红色的 ↔ red”等若干短语对。抽取规则的核心是:只要短语内部所有词的对外对齐不“越界”,就可以组合成一个合法的短语对。

短语抽取完成后,进入翻译模型的核心——计算每个短语对的翻译概率。概率越高,说明这个短语在平行语料中越常被用来互译。同时 SMT 还要考虑调序概率:不同语言里词序不同,中文说“红色的苹果”,英文说“red apples“,形容词与名词的先后顺序就不一样。调序模型就是用来惩罚那些”词序不符目标语言习惯”的翻译假设。

短语翻译概率的计算非常简单朴素,就是频率的比值——我们需要计算给定源短语时,某个目标短语出现的条件概率:

回到餐厅:短语抽取就像从菜单册里剪贴出可复用的“菜名碎片”,比如“宫保 鸡丁”可以拆成“宫保”和“鸡丁”两个独立单元,也可以组合成整块菜名。翻译概率就是这些碎片在历史菜单中“搭配出现”的频率——越常一起出现,越说明它们是可靠的搭配。调序模型则像摆盘规则:盘子左边放主菜还是配菜,得按目标顾客的用餐习惯来。

P(tˉ∣sˉ)=count(sˉ, tˉ)∑tˉ′count(sˉ, tˉ′)\displaystyle P(\bar{t}|\bar{s}) = \frac{\text{count}(\bar{s},\ \bar{t})}{\sum_{\bar{t}'}\text{count}(\bar{s},\ \bar{t}')}
这个公式说的是:源短语 s 翻译成目标短语 t 的概率,等于两者在语料中共同出现的次数,除以源短语参与的所有翻译候选的总次数。
  1. 短语对共现次数count(s, t) 表示源短语 s 与目标短语 t 在训练语料中作为合法短语对出现的频次。
    count(sˉ, tˉ)\text{count}(\bar{s},\ \bar{t})
  2. 分母归一化对目标端所有可能的翻译候选 t' 求和,把频次化为 0 到 1 之间的概率。
    ∑tˉ′count(sˉ, tˉ′)\sum_{\bar{t}'}\text{count}(\bar{s},\ \bar{t}')
  3. 条件概率含义读作“在已知源短语是 s 的条件下,目标短语选择 t 的概率”。
    P(tˉ∣sˉ)P(\bar{t}|\bar{s})

语言模型原理

光会“翻词”还不够。哪怕每个单词都翻对了,“I like red apples“和”Like I apples red“哪个像人话?任何说英语的人都会选前者。语言模型就是那个”像不像人话”的裁判。它的作用是计算一个句子在目标语言中出现的可能性,也就是 P(S)。这个概率可以让翻译系统優先选择那些读起来自然、通顺的译文,而不是逐词硬翻的怪句子。

最常用的语言模型是 N-gram 模型:它假设第 n 个词的出现只依赖前面 n-1 个词。比如二元模型(bigram)认为“apples“的出现只依赖前一个词”red“。这个假设虽然粗糙,却把”整句概率“这个几乎无法统计的问题,拆解成了”相邻词组概率“这种可以从语料中轻松数出来的小问题。但小问题也有麻烦:很多合法搭配在有限语料里一次都没出现过,概率会算成 0。于是需要平滑技术,比如给所有没见过的 n-gram 一个微小的”保底概率”,避免一票否决。

N-gram 语言模型计算句子概率的方式是链式乘法——我们要把句子里每个位置的词在既定历史条件下的概率乘起来:

这个裁判的评判标准,就是你开业以来积累的英文菜单习惯。比如你发现过去 100 道英文菜名里,90 道把颜色词放在名词前,那 “red apples“ 就会得到很高的语言模型分,而 ”apples red“ 得分就低。翻译系统在最后选择译文时,就会自觉避开”客人不顺口”的搭配,端出更地道的句子。

P(w1,w2,…,wm)=∏i=1mP(wi∣wi−n+1,…,wi−1)\displaystyle P(w_1, w_2, \ldots, w_m) = \prod_{i=1}^{m} P(w_i | w_{i-n+1}, \ldots, w_{i-1})
公式解读:句子总概率等于每个词在前面 n-1 个词条件下的概率连乘。n 越大,模型对上下文的建模越精细,但数据稀疏问题也越严重。
  1. 词序列w_1 到 w_m 表示句子里的 m 个词,语言模型要为整个序列打分。
    (w1,w2,…,wm)(w_1, w_2, \ldots, w_m)
  2. 连乘运算从第一个词一直乘到最后一个词,每个因子都是条件概率。
    ∏i=1m\prod_{i=1}^{m}
  3. 条件窗口P(w_i | ……) 里的历史条件是它之前紧邻的 n-1 个词。
    P(wi∣wi−n+1,…,wi−1)P(w_i | w_{i-n+1}, \ldots, w_{i-1})

解码搜索策略

翻译模型和语言模型都训练好了,但真正“出菜”时厨师面临一个大难题:句子越长的,可能的翻译组合方式呈指数爆炸。给定一个中文句,把短语表里每个短语的候选翻译都拿来拼一拼,可能的英文句子数量是天文数字。解码就是在这片巨大的可能性空间里,高效搜索“翻译模型 × 语言模型”总分最高的译文。

SMT 中最主流的解码策略是柱搜索(beam search)。它的思路很“贪心但留有余地”:从左到右逐词生成译文,每一步只保留得分最高的前 K 个部分翻译假设(这 K 个就称为“柱”)。每一步又用新的短语扩充这些假设——比如假设已生成 “I like“,下一步可以把它扩成 ”I like red“ 或 ”I like eating”,扩充后重新排序,再次截断到前 K 个。直到所有源语言词都被覆盖,再从最终幸存者中挑出总分最高者。

解码过程的打分函数把各路证据汇总在一起,我们要为每个候选翻译 T 计算它的综合得分:

柱搜索就像厨师同时开几个灶台试做几版菜:灶台 A 先炒主菜,灶台 B 先做配菜,每个灶台都在不断试错,但灶台数量有限(这就是柱宽 K)。每次尝完味道,留下最满意的几版继续改进,过早出局的候选直接倒掉。最终出锅的,就是所有试做版本里综合评价最高的一道菜。

score(T)=∏iP(tˉi∣sˉi)λ1×Preorder(⋅)λ2×Plm(T)λ3\displaystyle \text{score}(T) = \prod_{i} P(\bar{t}_i|\bar{s}_i)^{\lambda_1} \times P_{\text{reorder}}(\cdot)^{\lambda_2} \times P_{\text{lm}}(T)^{\lambda_3}
评分公式表明:最终译文得分是短语翻译概率、调序概率、语言模型概率三者的加权乘积,λ 是调节各模型权重的参数。
  1. 短语翻译得分每个源短语块 s_i 到目标短语块 t_i 的翻译概率连乘。
    ∏iP(tˉi∣sˉi)λ1\prod_{i} P(\bar{t}_i|\bar{s}_i)^{\lambda_1}
  2. 调序得分对短语顺序发生调整的情况给出概率惩罚。
    Preorder(⋅)λ2P_{\text{reorder}}(\cdot)^{\lambda_2}
  3. 语言模型得分整句目标译文在 N-gram 语言模型下获得的通顺性分数。
    Plm(T)λ3P_{\text{lm}}(T)^{\lambda_3}

质量评估方法

做出来的翻译到底好不好?这需要一个“品菜师”。在机器翻译领域,最著名的自动评估指标是 BLEU(Bilingual Evaluation Understudy,双语评估替补)。它的核心思想非常直观:让机器译文与人工参考译文做“词语重合度”对比。重合的 n-gram(连续 n 个词的片段)越多,得分越高。BLEU 还加了一个长度惩罚因子:机器译文明显比参考译文短时,会扣分,防止系统靠“少翻一点”来钻空子。

BLEU 的计算公式综合了多个 n-gram 的精确率以及长度惩罚,它把不同 n 值下的匹配率取几何平均:

回到餐厅场景,BLEU 就是一位只看“食材重叠度”的品菜师:他把你端出的菜和名厨的标准菜谱对比,看有多少食材、多少步骤能对上号。但这位品菜师也有局限——他不太懂“换种食材同样好吃”的创意做法。所以工程实践中通常 BLEU 与人工评价配合使用:自动指标用于快速迭代筛选,人工评价用于最终把关口感与地道程度。

BLEU=BP×exp⁡(∑n=1Nwnlog⁡pn)\displaystyle \text{BLEU} = \text{BP} \times \exp\left( \sum_{n=1}^{N} w_n \log p_n \right)
公式意思是:BLEU 得分 = 长度惩罚因子 × 各阶 n-gram 匹配精度的加权对数平均。p_n 是 n 元词组在参考译文中出现的比例。
  1. n-gram 精确率p_n 表示机器译文里长度为 n 的词组,有多少比例也能在人工参考译文中找到。
    pn=∑candidatescountclip(n-gram)∑candidatescount(n-gram)p_n = \frac{\sum_{\text{candidates}} \text{count}_{\text{clip}}(n\text{-gram})}{\sum_{\text{candidates}} \text{count}(n\text{-gram})}
  2. 对数平均对 p_1 到 p_N 取对数再加权平均,让不同的 n-gram 匹配率共同起作用。
    ∑n=1Nwnlog⁡pn\sum_{n=1}^{N} w_n \log p_n
  3. 长度惩罚因子当机器译文比参考译文短时 BP < 1,用来压低分数。
    BP={1if c>re1−r/cif c≤r\text{BP} = \begin{cases} 1 & \text{if } c > r \\ e^{1-r/c} & \text{if } c \le r \end{cases}

AI 应用场景

场景一:跨境电商的商品标题翻译

阶段:数据准备与模型训练

解决的问题:跨境电商需要把中文商品标题批量翻译成英文、西班牙语等多语言。传统做法是雇用人工翻译,成本高且速度慢;SMT 可以利用平台积累的双语商品数据训练专用翻译模型,对高频商品术语(如“无线充电”“降噪耳机”)的翻译更准确。

具体案例:某出海电商平台积累了 50 万条中英商品标题平行语料,用 SMT 训练短语翻译模型后,商品标题翻译的 BLEU 值从通用的 18 提升到 31,同时每周新上架商品的翻译从人工的 3 天缩短到 10 分钟。

场景二:政府白皮书与法律文档的辅助翻译

阶段:解码与质量评估

解决的问题:政府文本和法律条款对术语一致性要求极高,泛化模型容易把“当事人”翻成“the person concerned“而非法律界惯用的”the party concerned”。SMT 通过领域平行语料训练出的短语表,能锁定特定术语的固定搭配,保证全文术语统一。

具体案例:某翻译机构用近十年双语版政府白皮书训练 SMT,并设置术语词典强制约束,把“供给侧结构性改革”等固定表述稳定翻译为"supply-side structural reform",人工审校工作量减少约 60%。

场景三:字幕组的初翻自动化

阶段:语料对齐与模型训练

解决的问题:字幕翻译对时间轴和口语化表达要求高。字幕组积压了大量双语字幕数据,传统人工初翻成本高;SMT 可以利用这些字幕语料训练出口语化的短语翻译模型,自动生成初稿,再由人工校对润色。

具体案例:某字幕组用 10 万条中英字幕句对训练 SMT,自动生成的初翻在口语短句上表现良好。人工只需要修改约 30% 的内容,整体翻译效率提升两倍以上。

Python 演示

python87 行
# -*- coding: utf-8 -*-"""基于平行语料的短语翻译表训练与BLEU评估演示."""from collections import defaultdictimport math # 模拟平行语料:每行是一对中文-英文句子parallel_corpus = [    ("我 喜欢 苹果", "I like apples"),    ("我 喜欢 红色 的 苹果", "I like red apples"),    ("他 喜欢 香蕉", "he likes bananas"),    ("红色 的 香蕉", "red bananas"),    ("她 喜欢 红色 的 花", "she likes red flowers"),] def tokenize_zh(sentence):    """中文按空格预分词(真实场景需用分词工具)。"""    return sentence.split() def tokenize_en(sentence):    """英文按空格分词并统一小写。"""    return sentence.lower().split() def build_phrase_table(parallel_data):    """从词对齐后的平行语料中抽取短语对并统计翻译概率."""    phrase_count = defaultdict(int)    source_count = defaultdict(int)     for zh_sent, en_sent in parallel_data:        zh_tokens = tokenize_zh(zh_sent)        en_tokens = tokenize_en(en_sent)        # 简化词对齐:假设一一对应        for zh_word, en_word in zip(zh_tokens, en_tokens):            phrase_count[(en_word, zh_word)] += 1            source_count[zh_word] += 1     phrase_table = {}    for (en_word, zh_word), cnt in phrase_count.items():        phrase_table[(zh_word, en_word)] = cnt / source_count[zh_word]    return phrase_table def translate_sentence(zh_sentence, phrase_table):    """用查表方式生成简单翻译候选."""    words = tokenize_zh(zh_sentence)    translated_tokens = []    for word in words:        best_en = None        best_prob = 0.0        for (zh, en), prob in phrase_table.items():            if zh == word and prob > best_prob:                best_prob = prob                best_en = en        if best_en is not None:            translated_tokens.append(best_en)        else:            translated_tokens.append(word)    return translated_tokens def compute_bleu(candidate, reference):    """计算简化版BLEU:仅用1-gram匹配 + 长度惩罚."""    cand_tokens = candidate.split()    ref_tokens = reference.split()    cand_count = defaultdict(int)    ref_count = defaultdict(int)    for token in cand_tokens:        cand_count[token] += 1    for token in ref_tokens:        ref_count[token] += 1    matches = 0    for token, cnt in cand_count.items():        matches += min(cnt, ref_count.get(token, 0))    precision = matches / len(cand_tokens) if cand_tokens else 0.0    if len(cand_tokens) <= len(ref_tokens):        brevity_penalty = math.exp(1 - len(ref_tokens) / len(cand_tokens))    else:        brevity_penalty = 1.0    return brevity_penalty * precision if __name__ == "__main__":    phrase_table = build_phrase_table(parallel_corpus)    test_zh = "我 喜欢 红色 的 香蕉"    test_ref = "I like red bananas"    translation = translate_sentence(test_zh, phrase_table)    trans_str = " ".join(translation)    print("中文原句:", test_zh)    print("机器译文:", trans_str)    print("参考译文:", test_ref)    print("BLEU得分:", round(compute_bleu(trans_str, test_ref), 4))
目的:演示 SMT 中最核心的统计思想——从平行语料中统计“词到词”的翻译概率,组成翻译表,再对未见句子查表翻译,并用 BLEU 自动评估。
  1. parallel_corpus = [...]模拟一份小型平行语料,每行是一对中英互译句子,相当于“双语菜单册”的最小样本。
  2. phrase_count[(en_word, zh_word)] += 1统计每个“中文词→英文词”配对在语料中出现的次数,这是翻译概率的分子。
  3. source_count[zh_word] += 1统计每个中文词在语料中出现的总次数,作为归一化分母。
  4. phrase_table[(zh_word, en_word)] = cnt / source_count[zh_word]用频率比值估计翻译概率,这正是正文中的 P(t|s) 公式。
  5. for word in words:对待翻译句子逐词查翻译表,取概率最高的英文词作为候选。
  6. compute_bleu(trans_str, test_ref)用 1-gram 匹配率和长度惩罚计算 BLEU,验证译文质量。

常见误区

误区我听说统计机器翻译就是查字典,把每个中文词翻成对应的英文单词,再换个顺序拼起来就行。它做不了复杂的语言理解吧?

正解SMT 的“短语”概念远大于单个词,它抽取的是连续词块的翻译对(如“红色的 苹果”整体翻译成 “red apples“),并且通过调序模型和语言模型处理语序与通顺度。这比”逐词硬翻”强得多。真正的逐词翻译是更早期基于规则的词典替换,SMT 的核心贡献恰恰是用概率统计替代了僵硬的一对一查表。

为何常见:很多人接触 SMT 时先看到的是它从词对齐开始讲起,误以为翻译粒度只有词。加上“统计”二字容易让人联想到简单的频次计数,就误以为整个系统只是查表。

误区只要平行语料足够多,SMT 的翻译质量就一定能持续上升。语料是万能的吗?

正解语料数量不是唯一因素,质量与领域匹配度同样关键。如果混入大量错位对齐、噪声大的语料,反而会稀释短语表的可靠性。此外语料的领域也至关重要——用法律语料训练出的系统去翻译口语字幕,效果会大幅下降。工程中“清洗、去重、领域筛选”的时间和训练模型的时间几乎一样多。

为何常见:因为 SMT 确实是数据驱动方法,直觉上让人觉得“大力出奇迹”。但忽略了数据分布与测试场景的一致性,以及噪声数据带来的负面影响。

误区BLEU 得分越高,译文就越地道,可以直接替代人工判断。我们优化系统时,把 BLEU 从 30 刷到 32 就是进步对吧?

正解BLEU 只在统计意义上与人工评估相关,它本质是 n-gram 重合度指标。机器译文完全可能用另一种同样正确的表达来翻译,但因为和参考译文用词不同而被扣分。反之,有些语句虽然 n-gram 重合度高,但读起来生硬别扭。因此 BLEU 适合做模型迭代时的快速筛选,最终上线仍需人工抽检。

为何常见:BLEU 是机器翻译论文里最常出现的数据指标,容易让初学者把它当成“唯一真理”,忽视其基于词面匹配的局限性。

误区翻译的核心是“翻得准”,语言模型顶多在最后调整一下词序,起不到决定性作用。学 SMT 时主要精力应放在翻译模型上?

正解语言模型在 SMT 中不仅决定译文是否通顺,还在解码选择时直接影响最终结果。同一个源语言短语可能对应多个目标语言候选,翻译模型给它们打了相似的分数,这时语言模型的“通顺度偏好”就决定了哪条译文胜出。更关键的是,语言模型可以用海量单语语料训练,数据量通常远超平行语料,对译文质量的贡献很大。

为何常见:初学者容易把“翻译模型”理解为唯一核心,忽视语言模型在候选筛选和流畅度上的决定作用。此外单语语料的统计价值常被低估。

面试题

Q1. 统计机器翻译的核心思想是什么?

单选题 · easy

  • A.用规则语法逐词替换
  • B.从平行语料中统计学习翻译概率← 正确答案
  • C.依靠人工词典精确翻译
  • D.用神经网络端到端训练

答案:B。SMT 的核心是从大量平行语料中统计词与词、短语与短语的翻译概率,用数据驱动的方式替代人工规则。A 和 C 是传统基于规则的方法,D 是神经机器翻译的思路,均不属于 SMT 的核心思想。

Q2. 噪声信道模型中,翻译任务被建模成什么过程?

单选题 · easy

  • A.从源语言直接生成目标语言
  • B.从目标语言反推被噪声干扰的源语言← 正确答案
  • C.在双语词典中精确匹配
  • D.在单语语料中搜索相似句子

答案:B。噪声信道模型假设源语言句子 S 经过一个噪声信道变成目标语言句子 T,翻译任务是已知 T 反推最可能的 S,即最大化 P(S|T)。这对应贝叶斯公式中的后验概率。

Q3. 平行语料在 SMT 中主要指什么?

单选题 · easy

  • A.单语种的大量文本集合
  • B.中英文混合的随机文本
  • C.互为翻译的双语句子对集合← 正确答案
  • D.带标注的语法树库

答案:C。平行语料是“互为翻译”的双语句对,例如中文“我喜欢苹果”与英文"I like apples"组成一对。A 是单语语料,B 是混合文本而非对齐句对,D 是句法树库,都偏离了平行语料的定义。

Q4. EM 算法在词对齐中的作用是什么?

单选题 · mid

  • A.直接计算出最佳对齐路径
  • B.迭代估计词对齐概率并逐步收敛← 正确答案
  • C.通过贪心搜索寻找局部最优
  • D.用人工规则确定词对齐关系

答案:B。EM 算法通过“期望-最大化”两阶段交替迭代:先按当前概率估计对齐的期望频次,再根据频次更新概率,循环至收敛。它不直接计算对齐路径,也不依赖人工规则。

Q5. 短语翻译模型主要包含哪些概率成分?

多选题 · mid

  • A.短语翻译概率← 正确答案
  • B.调序概率← 正确答案
  • C.词性标注概率
  • D.语言模型概率← 正确答案

答案:ABD。短语翻译模型中,翻译概率 P(t|s) 衡量短语互译可能性,调序概率处理短语顺序调整,语言模型概率 P(S) 评估整句通顺度。词性标注概率不属于 SMT 标准模型组件。

Q6. N-gram 语言模型的假设是什么?

单选题 · mid

  • A.句子中所有词相互独立
  • B.一个词只依赖前面 n-1 个词← 正确答案
  • C.一个词依赖整个句子的历史
  • D.词与词之间按语法树连接

答案:B。N-gram 模型的核心假设是马尔可夫性:第 n 个词的出现只与前面紧邻的 n-1 个词有关。A 是 unigram 的极端简化,C 是无限长依赖,D 是句法模型假设,均非 N-gram 的典型设定。

Q7. 柱搜索解码器中“剪枝”的作用是什么?

多选题 · hard

  • A.减少搜索空间,提高解码速度← 正确答案
  • B.丢弃得分过低的翻译假设← 正确答案
  • C.保留所有可能翻译候选
  • D.防止搜索空间指数爆炸← 正确答案

答案:ABD。柱搜索每步只保留得分最高的 K 个假设(柱宽),丢弃其余低分假设,从而把指数级搜索空间压缩到可控范围,加速解码。C 与剪枝思想相反,若保留全部候选则退化为穷举搜索。

Q8. BLEU 指标的“长度惩罚”主要解决什么问题?

单选题 · easy

  • A.机器译文过长时的冗余问题
  • B.机器译文过短时的“偷懒”问题← 正确答案
  • C.参考译文长度不一致的问题
  • D.语料中句对数量不足的问题

答案:B。BLEU 的 BP(brevity penalty)在机器译文短于参考译文时降低分数,防止系统通过只翻译部分内容来获得虚高的 n-gram 精确率。译文过长则由精确率自然惩罚。

Q9. 链式法则中,计算整句概率 P(w1,……,wm) 需要什么操作?

单选题 · hard

  • A.对每个词的独立概率求和
  • B.对条件概率序列做连乘← 正确答案
  • C.对相邻词对的频率取平均
  • D.对词的逆文档频率加权求和

答案:B。依据概率的链式法则,整句概率表示为 P(w1)×P(w2|w1)×……×P(wm|w1……wm-1) 的连乘。N-gram 则进一步简化条件为最近 n-1 个词。A 是独立假设,C 是频率统计方式,D 是信息检索概念。

Q10. 从平行语料中抽取合法短语对需要满足什么约束?

多选题 · hard

  • A.短语内部所有词的对齐不越出该短语范围← 正确答案
  • B.短语至少包含两个词
  • C.短语对必须与某个对齐句对一致← 正确答案
  • D.短语内部不能有空洞← 正确答案

答案:ACD。抽取短语对要求词对齐“不越界”(即短语内每个词的对齐位置都在对应短语范围内)、短语对在某个对齐句对中出现过、且内部连续无空洞。单词语也可以构成短语对,所以 B 不对。