【笔记】双语评估替补

【笔记】双语评估替补

🍅

1)介绍

BLEU (Bilingual Evaluation Understudy)是一种用于机器翻译任务的评价指标;发布在ACL:《 BLEU: a Method for Automatic Evaluation of Machine Translation 》;understudy译作替补,指替代人工审核进行评估; 本质上讲BLEU 就是用来衡量机器翻译文本与参考文本之间的相似程度的指标,取值范围在0-1, 取值越靠近1表示机器翻译结果越好

举个例子:有两个句子,一个是标准答案,一个是模型生成的;如何评价模型生成的句子好不好?

reference:there is a cat on the desk

candidate: a cat is on the desk

上面reference是标准答案,candidate为生成的结果;我想要得到一个指标度量生成的结果好不好,最直接的思想就是比较两个句子的相似度,相似度越高,结果越好。

2)原理(原始精度)

BLEU使用词频作为相似度的度量方法;计算方法是: 对于candidate的每一个词,计算其是否在Reference文档中出现过,如果出现过,命中计数加1, 最后使用命中累计数除以candidate的词长,即可计算得到candidate的BLEU取值;这里介绍的概念称为原始多元精度

例如:

Candidatethethethethethethethe
Reference1thecatisonthemat
Reference2thereisacatonthemat

在这个例子中,candidate中的每一个词都在参考文档中出现,所以其准确率值为 P = 7 7 = 1 P=\frac{7}{7}=1 P=77=1;这个值叫做原始一元精度

看到这里,已经能看出问题了;虽然使用词频作为统计相似度很简单快捷,但是他忽略了语言顺序,单纯靠词是不行的;所以需要对这种方法进行修正;

改良型的BLEU引入将多个词组合在一起形成一个gram的思想, 比如上述的Bleu的计算可以看做一个单词构成的gram(这是一种特殊情况), 这种特殊组合被叫做uni-gram, 两个单词的组合叫做bi-gram 以此类推. 因此就可以构成1个单词长度到n个单词长度的多种单词组合(每一种单词长度可能存在不同的组合)。每一种长度的gram都可以计算出一个相应的precision P N P_N PN. 对于该种长度gram 的precision我们还需要把它们整合起来, 一般使用加权集合平均的方法将n个计算出的precision整合成一个precision;

使用N-gram方法基本思路和上述例子相同,只不过这里不再是一个词,而是gram组合词;例如:

the cat is on the mat

可以拆分成2-gram:

[“the cat”,“cat is”, “is on”," on the", “the mat”]

N-gram实际上是引入了次序的位置信息,从而使得度量指标符合语义; 一般情况,1-gram可以代表原文有多少词被单独翻译出来,可以反映译文的充分性,2-gram以上可以反映译文的流畅性,它的值越高说明可读性越好。

不同的n-gram表示不同的n元精度;

3)改进(改进精度)

在上述的例子中,candidate出现常用词the,导致其1-gram得分很高,此问题为常用词干扰;需要对这个方法进行完善,这里介绍改进多元精度;以上述为例,常用词命中的概率肯定高,换种说法,在参考文档中,词频高的词可以认为是常用词,那我们把它的权重降低;将命中统计值和词频联系起来;

计算方法如下:
c o u n t w = m i n ( C w , R w ) count_w = min(C_w, R_w) countw=min(Cw,Rw)
其中 C w C_w Cw表示n-gram在candidate中出现的次数, R w R_w Rw表示n-gram词在Reference中出现的最大次数;取两者比较的最小值作为命中词频; 然后在把这个匹配结果除以机器翻译译文的N-gram个数 ;

最终译文的准去率等于各n-gram的加权平均;
P a v g = e x p ( ∑ n W n ⋅ l o g P n ) P_{avg} = exp(\sum_{n}W_n \cdot logP_n) Pavg=exp(nWnlogPn)
上面的算法已经足够有效的评估翻译了,但是还存在一个问题,当candidate很短, 且部分匹配的时候,会出现匹配分数很高的状况,为了避免这种偏向性,BLEU中引入了短句惩罚因子 BP

如果candidate句子大于reference, BP=1; 否则 B P = e ( 1 − l e n ( r e f e r e n c e ) / l e n ( c a n d i d a t e ) ) BP=e^{(1-len(reference)/len(candidate))} BP=e(1len(reference)/len(candidate))

最终BLEU的计算公式为:
B L E U = B P ⋅ P a v g = B P ⋅ e x p ( ∑ n W n ⋅ l o g P n ) BLEU= BP\cdot P_{avg} = BP \cdot exp(\sum_{n}W_n \cdot logP_n) BLEU=BPPavg=BPexp(nWnlogPn)

总结一下:BLEU值其实也就是“改进版的n-gram”加上“过短惩罚因子”。

4)代码实现

Python自然语言工具包库NLTK提供了BLEU得分的计算实现;使用的时候,candidate和reference都必须用一列写token表示;

from nltk.translate.bleu_score import sentence_bleu
reference = [['this', 'is', 'a', 'test'], ['this', 'is' 'test']]


candidate = ['this', 'is', 'a', 'test']

score = sentence_bleu(reference, candidate)
print(score)

NLTK中允许传入参数weight来设定不同的N-grams的权重来计算累计BLEU;

from nltk.translate.bleu_score import sentence_bleu

reference = [['人', '最','大','的', '烦', '恼', '就', '是', '记', '性', '太', '好']]
candidate = ['人', '的', '烦', '恼', '就', '是', '记', '性', '太', '好']

print('1-gram score = ', sentence_bleu(reference, candidate, weights=[1,0,0,0]))
print('2-gram score = ', sentence_bleu(reference, candidate, weights=[0,1,0,0]))
print('3-gram score = ', sentence_bleu(reference, candidate, weights=[0,0,1,0]))
print('4-gram score = ', sentence_bleu(reference, candidate, weights=[0,0,0,1]))

通常情况下, 我们会统计BLEU1BLEU4的累积值作为评估 文本生成系统(text generation system) 的效果.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值