在看本博文之前,最好阅读如下三篇文章:
1. Discriminative Training and Maximum Entropy Models for Statistical Machine Translation
2. Minimum Error Rate Training in Statistical Machine Translation
3. Z-MERT: A Fully Configurable Open Source Tool for Minimum Error Rate Training of Machine Translation Systems
mert主要运用于机器翻译的参数调节过程中。由于目前主流的机器翻译模型多为log-linear模型,在log-linear模型中,有很多参数weights,对于每一个特征,都有与之对应的weight。如何调节这些weights,才能获取更好的翻译结果呢?Och提出了mert——最小错误率训练的方法用于调节参数。
其实在Och之前就有参数调节的方法,他们优化的目标多为翻译结果的最大翻译概率,采用的方法多为梯度下降、Powell搜索等,由于目标函数的特性,这些方法都能够搜索到最优的结果。
但是这些方法有一个弱点,优化目标和机器翻译评测的目标不一致,出现了分歧。虽然有的时候能够获取较好的优化目标,但是不一定能取得较好的翻译评测的目标。但通常人们多以翻译评测的目标作为翻译质量的评价。因此,Och直接采用了翻译评价指标作为优化目标函数。
接下来,我们来看看Och的mert基本原理!
假设我们优化如下权重向量,Λ = {λ1, ..., λd, ..., λM}的dth维。此时,我们固定其他维度,只有dth维进行变化。对于每一个外文句子f,都有一个翻译候选集合{e1, ..., eK},
因此,每一个候选的得分如下:
由于此时,我们固定dth维,因此,该公式变换为如下形式:
可以看出,上述公式只有λd是变量,其他都是常量,我们进一步变化该公式:
此时对于一个翻译候选,我们抽象成了一条直线。该直线的y为score得分,x轴为λd.对于每一个外文句子,我们即可构建如下图:
图中加粗的为得分上限。根据不同的λd,我们可以得到不同的得分。可以看出,在两条之间的交点处会发生得分的变化,得分变化,翻译候选随之而变,翻译的评价指标也会跟随变化。因此,我们只考虑所有直线的交点即可。
对于两个外文句子而言,我们可以得到如上图:
首先,我们需要计算所有的直线交点,求完之后。然后根据这些交点进行划分x轴,可以得到很多区间。在每一个区间,我们计算出每一个外文句子对应的最优直线(最优得分)。然后将一个区间内的所有外文句子的最优直线进行合并,即可得到翻译结果,此时可以根据不同的翻译评测目标进行评价该结果译文。然后遍历所有的区间,即可得到在哪一个区间内会取得较好的翻译评测目标。将该区间的λd作为Λ的dth维度的值。
上述讲解了如何优化某一维度(固定其他维度)的方法原理!
接下来我们讲述一下mert优化算法的整体框架!
上述为zmert的算法框架图,我们以此进行讲解,其他mert方法框架基本一样。
算法的1-3行:进行初始化参数向量空间、错误率以及NBest候选集合。
算法的4-35行:进行每一轮的迭代,基本上5-10轮即可收敛。
算法的5-6行:根据此时的参数向量空间,运行翻译解码器生成NBest候选,然后和已有的总NBest候选进行合并。如果合并之后的NBest候选和已有的NBest总候选一样,也就是总的NBest候选不在变化,说明已经收敛,退出。
算法的8-9行:设置不同的起点,当前的参数向量作为第1个起点,同时随机其他的几个起点。这一步是为了防止局部最优,尽量每轮选取不同的起点。
算法的12-33行:对于每一个起点,进行调节参数。
算法的14-27行:进行调节某一个起点的参数。
算法的16-23行:对该起点的每一维度进行调节,选出最优的某一维度。
===============总结==================================
mert调节参数的过程可以抽象成机器学习的问题。运用机器学习的理论进行
求解最优值。Och将翻译候选抽象成了直线,并且利用直线的性质进行调节
参数的方法听巧妙的!
如果有任何疑问,可以email我,[email protected]
最小错误率训练(mert)基本原理学习