雪花台湾

Gale和Church的句对齐演算法解析

Gale和Church在1993年提出了一个基于长度进行句对齐的演算法,并在附录里公开了C源代码。这篇论文相当经典,以至于之后的关于句对齐的论文大多数要引用它。论文的题目是 A Program for Aligning Sentences in Bilingual Corpora。

对齐分两步。第一步是段落对其,第二步是在段落内部进行句对齐。段落对齐重要,不过简单,问题在于段落内部的句对齐。所以本文只解析已知段落对齐,怎样在段落内进行句对齐。首先定义几个概念,所有论文中出现的符号都对应定义里的符号。

对齐演算法的输入是某一对相互对齐的段落,输出是对齐序列。

接下来就变成了动态规划问题,类似最小编辑距离。片段对序列那么多,哪个是对齐序列呢?如果用穷举法,计算量太大,显然不现实。换个角度想,假设我们已经知道了对齐序列,用 表示该对齐序列的距离和,其中 是原文段落最后一个句子的index, 是译文段落最后一个句子的index。对齐序列的距离和可以表示成最后一个片段对的距离加上去掉最后一个片段对的剩下的片段对序列的距离和(可以认为对齐序列的子序列也是对齐序列)。最后一个片段对有六种对齐模式,所以要对每种模式分情况讨论,选择结果最小的那个。动态规划的递归式就是这么来的。

递归式的基础情况D(0,0)=0,通过递归式,我们可以求出对齐序列的距离和,在求距离和的过程中,我们顺便记录了对齐轨迹,也就是顺便求出了对齐序列。这就是演算法的主干思想。

gachalign 是一个Python实现,pupilalign 是在此基础上的修改,使代码便于理解。

推荐阅读:

相关文章