简介
综合转载于:
BLEU
给定一句话,假设两个翻译工具的结果为:
这个句子的参考翻译为:(由于一个话的翻译可以有种风格,参考翻译一般为多个,当然也可以只有一个)
一个很直观的想法,谁和参考翻译更接近,谁就翻译的更好。那么怎么评估接近呢?可以考虑机器翻译的每一个词是否出现在参考译文组中。比如翻译后的句子有5个单词,如果3个单词出现在了参考译文组中,那么单词级别的Precision = 3/5。可以更进一步的考虑N-gram级别的Precision,比如Bigram,即把两个单词(it is)当成一个元素是否出现在参考翻译组中。
下面一个例子,是假设翻译工具翻译出的全部是the,单词级别的Precision为7/7,这个值与实际情况不符,我们修正刚才的计算公式,对分子截断为一个参考译文中,出现的最大次数,比如the在Reference 1中出现的次数最多,为2次,修正后单词级别的Precision为2/7。
下图展示了对人的翻译和机器的翻译分别用截断n-gram Precision (1, 2, 3, 4)进行评价,可以发现这种指标可以轻易地区分人的翻译和机器的翻译(也就是轻易地区分好的翻译和一般的翻译)。
上面的指标偏爱过短的翻译。比如翻译工具是of the, 这个翻译的unigram是2/2和bigram是1/1。但是却召回了过少的词。
精度往往与召回结对,来对结果进行评价。但在机器翻译中,召回全部的词并不是一个好的翻译。比如翻译I always invariably perpetually do. 比I always do.召回了参考译文组中更多的词,但翻译结果却不如后者好。
我们加一个过短惩罚系数BP(brevity penalty)。假定参考译文的长度为r, 候选翻译长度为c,当c >= r时,我们不进行惩罚,设置BP为1,当c <r时,我们进行惩罚。
最终我们得到了BLEU的计算公式:
N取值为4,表示计算1-gram, 2-gram, 3-gram, 4-gram的截断精度,取log然后加权求和,其中$w_1$, $w_2$, $w_3$, $w_4$均取值为1/4。之所以取log,是因为$p_1$,$p_2$,$p_3$,$p_4$指数下降,取log后也BLEU分数与人工评估也更加吻合。
我们对500个句子计算BLEU分数,结果如下,人工H1,H2比系统(机器)S1, S2, S3要高(人工翻译比机器翻译好)。
我们将500个句子分成20个组,每组25个句子,对每组求BLEU,然后求Mean和StdDev,结果也变化不大。说明只要收集少量的句子,就可以区分不同的系统。
下图是BLEU评估和人工评估,可以看到BLEU和人工评估相关性很高。
ROUGE
ROUGE指标是在机器翻译、自动摘要、问答生成等领域常见的评估指标。ROUGE通过将模型生成的摘要或者回答与参考答案(一般是人工生成的)进行比较计算,得到对应的得分。ROUGE指标与BLEU指标非常类似,均可用来衡量生成结果和标准结果的匹配程度,不同的是ROUGE基于召回率,BLEU更看重准确率。在论文中主要提到了4种方法,分别是$\text{Rouge}-N、\text{Rouge}-L、\text{Rouge}-W、\text{Rouge}-S$。
ROUGE-N
Rouge-N实际上是将模型生成的结果和标准结果按N-gram拆分后,计算召回率。比如有2个句子(一般模型生成的成为hypothesis,简写hyp;标准结果称为reference,简写为ref):
模型生成(hyp):the cat was found under the bed
标准结果(ref):the cat was under the bed
按1-gram和2-gram拆分后,可表示为一下表格:
# | hyp 1-gram | ref 1-gram | hyp 2-gram | ref 2-gram |
---|---|---|---|---|
1 | the | the | the cat | the cat |
2 | cat | cat | cat was | cat was |
3 | was | was | was found | was under |
4 | found | under | found under | under the |
5 | under | the | under the | the bed |
6 | the | bed | the bed | |
7 | bed | |||
count | 7 | 6 | 6 | 5 |
在原论文中,ROUGE-N的公式为:
论文中第一个求和项条件中,Refermce应该是写错了,这里改成了Reference
分子表示所有样本的标准结果按N-gram拆分后与生产结果按N-gram拆分后匹配上个数的和;分母表示所有样本的标准结果,按N-gram拆分后的和。这样很容易计算,$\text {Rouge}-1=\frac{6}{6}=1.0$,同样$\text {Rouge}-2=\frac{4}{5}=0.8$。以此类推,一般来说N越大,分值容易越小。前面提到的都是单个reference的情况,对于多个reference的情况,论文中也有提到,两两计算取最大值。
ROUGE-L
Rouge-L的L表示: Longest Common Subsequence,Rouge-L的计算利用了最长公共子序列(区别一下最长公共子串,这个是连续的,子序列不一定连续,但是二者都是有词的顺序的)。论文中Rouge-L的公式可以表示为:
上面的公式中,$X$表示标准答案,也就是上面两个句子中的ref,$Y$表示生产答案,也就是上面两个句子中的hyp。$m$表示$X$的长度,$n$表示$Y$的长度。$L C S(X, Y)$表示X和Y的最长公共子序列,$\beta$是一个超参数,需要自己设置,论文中提到这个值一般的比较大。沿用上面的例子则可以得到:
公式中的 $F_{l c s}$ 就是ROUGE-L的得分,因为 $\beta$ 设置的比较大,所以最终 $F_{l c s}$ 还是受召回率 $\left(R_{l c s}\right)$的影响更大,也符合ROUGE一开始的初衷。
ROUGE-W
先举一个例子,下面三句话中, $X$ 是reference, $Y_1, Y_2$ 是hypothesis:
我看可以看到三个例子,用Rouge-L去计算的时候,他们都有相同的最长公共子序列 $\boldsymbol{A} 、 \boldsymbol{B} 、 \boldsymbol{C}、 \boldsymbol{D}$ 。这个例子中它们有相同的ROUGE一L分。但是这种情况下,应该是 $Y_1$ 要好于 $Y_2$ 的,因为 $Y_1$ 有 更多的连续匹配。Rouge-W就是所做的工作就是给连续的匹配给到更多的权重,让连续匹配的比 非连续匹配的有更高的分数。论文中给出的计算公式是:
$F_{w l c s}$ 就是Rouge-W分数,上面公式中, $W L C S(X, Y)$ 是根据连续匹配情况加权后的最长公共 子序列长度 (叫分值更合适) 。在论文中,这两个例子算出来的Rouge-W分数是不一样的:Rouge $-W_{Y_1}=0.571$, Rouge $-W_{Y_2}=0.286$ 。总的来说Rouge-W的实现比前面的要复杂,更多的细节可以参考原始论文《ROUGE: A Package for Automatic Evaluation of Summaries》。
ROUGGE-S
Rouge-S的S表示:Skip-Bigram Co-Occurrence Statistics,这其实是Rouge-N的一种扩展,N-gram是连续的,Skip-bigram是允许跳过中间的某些词,同时结合了Rouge-L的计算方式。论文中给到的公式是:
结合几个简单的句子作为例子说明一下:
S1(ref):police killed the gunman
S2(hyp):police kill the gunman
S3(hyp):the gunman kill police
S4(hyp):the gunman police killed
S5(hyp):gunman the killed police
其中 $C(m, 2) 、 C(n, 2)$ 分别表示reference、hypothesis句子中,skip-bigram的组合的个数。 对于 $\mathrm{S} 1, \mathrm{~S} 2$ 来说 $C\left(S_{1 / 2}, 2\right)$ ,具体组合为:
【S1】:police killed、police the、police gunman、killed the、killed gunman、the gunman
【S2】:police kill、police the、police gunman、kill the 、kill gunman、the gunman
两句话的skip-bigram都是6个 $(C(4,2)=6)$ ,共同的部分为 “ police the”, “police gunman”, “the gunman”, 所以 $S K I P 2(S 1, S 2)=3$ 。所以当 $\beta=1$ 时,代入上面的公式:
有一个比较特别的情况,可以看到S5,它与 $S 1$ 出现的单词是一样的,但由于顺序不同,其 $S K I P 2(S 1, S 5)=0$ ,为了区分 $S 5$ 这种情况和没有单个单词与 $S 1$ 共现的情况,提出了Rouge 一SU。Rouge-SU,Extension of Rouge-s,在Rouge-S的基础上增加了unigram。
优缺点
缺点是这种方法只能在单词、短语的角度去衡量两个句子的形似度。并不能支持同义词、近义词等语意级别去衡量。比如:
ref = “I’m very happy!”
hyp = “I’m very sad!”
hyp1 = “I’m very cheerful!”
hyp1和hyp2的rouge得分是一样的。但显然hyp1才是与ref更相近的。
好处是这种方式计算高效,在忽略近义词等情况下,做到比较合理的判断。
Rouge的实现
在github上面,关于Rouge的实现有pyrouge,files2rouge,rouge,py-rouge,其中rouge,files2rouge是同一个人开发的,笔者使用了rouge,其开源地址是:http://github.com/pltrdy/rouge。作为一个python包提供给python开发者调用,安装和使用都比较友好。
安装
1 | pip install rouge |
使用
举一个简单例子,更多可以去开源地址的README中查看。
1 | from rouge import Rouge |
输出是json格式:
1 | [ |