7.7 栈解码 223
null
0
P =1
on
table
there is
2
1
3
P =0.2
P =0.3
P=0.5
one
an apple
table
on the table
apple
4
4-5
1
1-2
5
P =0.1
P =0.4
P =0.3
P =0.4
P =0.2
翻译路径:
图 7.25 翻译假设扩展
7.7.3 剪枝
假设扩展建立了解码算法的基本框架。但是,当句子变长时,这种方法还是面
临着搜索空间爆炸的问题。对于这个问题,常用的解决办法是剪枝,也就是在搜索
图中排除掉一些节点。比如,可以使用束剪枝,确保每次翻译扩展时,最多生成 k 个
新的翻译假设。这里 k 可以被看做是束的宽度。通过控制 k 的大小,可以在解码精
度和速度之间进行平衡。这种基于束宽度进行剪枝的方法也被称作直方图剪枝。另
一种思路是,每次扩展时只保留与最优翻译假设得分相差在 δ 之内的翻译假设。δ 可
以被看作是一种与最优翻译假设之间距离的阈值,超过这个阈值就被剪枝。这种方
法也被称作阈值剪枝(Threshold Pruning)。
不过,即使引入束剪枝,解码过程中仍然会有很多冗余的翻译假设。有两种方
法可以进一步加速解码:
• 对相同译文的翻译假设进行重新组合;
• 对低质量的翻译假设进行裁剪。
对翻译假设进行重新组合又被称作假设重组(Hypothesis Recombination)。其核
心思想是,把代表同一个译文的不同翻译假设融合为一个翻译假设。如图7.26所示,
对于给定的输入短语“一个 苹果”,系统可能将两个单词“一个”、“苹果”分别翻
译成“an”和“apple”,也可能将这两个单词作为一个短语直接翻译成“an apple”。
虽然这两个翻译假设得到的译文相同,并且覆盖了相同的源语言短语,但是却是两
个不同的翻译假设,模型给它们的打分也是不一样的。这时,可以舍弃两个翻译假
设中分数较低的那个,因为分数较低的翻译假设永远不可能成为最优路径的一部分。
这也就相当于把两个翻译假设重组为一个假设。
即使翻译假设对应的译文不同也可以进行假设重组。图7.26的下半部分给出了
一个这样的实例。在两个翻译假设中,第一个单词分别被翻译成了“it”和“he”,紧
接着它们后面的部分都被翻译成了“is not”。这两个翻译假设是非常相似的,因为它
们译文的最后两个单词是相同的,而且翻译假设都覆盖了相同的源语言部分。这时,
也可以对这两个翻译假设进行假设重组:如果得分较低的翻译假设和得分较高的翻