自然语言生成(NLG)中常见的无监督自评估方法:BLEU、METEOR、ROUGE、CIDEr
参考: https://zhuanlan.zhihu.com/p/100942429
1、BLER评估【机器翻译】
Bleu 全称为 Bilingual Evaluation Understudy(双语评估研究) ,意为双语评估替换,是衡量一个有多个正确输出结果的模型的精确度的评估指标。
BLEU的设计思想与评判机器翻译好坏的思想是一致的:机器翻译结果越接近专业人工翻译的结果,则越好。
BLEU算法实际上在做的事:判断两个句子的相似程度。想知道一个句子翻译前后的表示是否意思一致,显然没法直接比较,那就拿这个句子的标准人工翻译与机器翻译的结果作比较,如果它们是很相似的,说明机器翻译很成功。
因此,BLUE去做判断:一句机器翻译的话与其相对应的几个参考翻译作比较,算出一个综合分数。这个分数越高说明机器翻译得越好。
举个栗子
中文:垫上有一只老鼠。
参考翻译1:The cat is on the mat.
参考翻译2 There is a cat on the mat.
MT(机器翻译):the cat the cat on the mat.
BELU一元组
MT输出的句子拆分成the,cat,on,mat,词频分别为3,2,1,1,如下图所示
MT中的uni-grams | count-MT | count-参考1 | count-参考2 | count(clip)截取计数 |
---|---|---|---|---|
the | 3 | 2 | 1 | 2 |
cat | 2 | 1 | 1 | 1 |
on | 1 | 1 | 1 | 1 |
mat | 1 | 1 | 1 | 1 |
小计 | 7 | -- | -- | 5 |
注:上面的Count(clip) 叫截取计数,是取每个单词在所有参考翻译句子中,出现最多的次数,the在参考翻译1中出现2次,在参考翻译2中出现1次,所以the的Count(clip)取最大值就是2。其余的也是同样的道理
所以BELU的一元组上的得分为: p1 = Count(clip)/Count=(2+1+1+1)/(3+2+1+1) =5/7
计算BELU的二元组得分:
MT中的bigrams | Count | Count(参考翻译1) | Count(参考翻译2) | Count(clip)截取计数 |
---|---|---|---|---|
the cat | 2 | 1 | 0 | 1 |
cat the | 1 | 0 | 0 | 0 |
cat on | 1 | 0 | 1 | 1 |
on the | 1 | 1 | 1 | 1 |
the mat | 1 | 1 | 1 | 1 |
小计 | 6 | -- | -- | 4 |
所以bleu的二元组的得分为:p2 = Count(clip)/Count=(1+0+1+1+1)/(2+1+1+1+1) =4/6=2/3
同理BELU的三元组得分:
MT中的3-grams | Count | Count(参考翻译1) | Count(参考翻译2) | Count(clip)截取计数 |
---|---|---|---|---|
the cat the | 1 | 0 | 0 | 0 |
cat the cat | 1 | 0 | 0 | 0 |
the cat on | 1 | 0 | 0 | 0 |
cat on the | 1 | 0 | 1 | 1 |
on the mat | 1 | 1 | 1 | 1 |
小计 | 5 | -- | -- | 2 |
所以bleu的三元组的得分为:p3 = Count(clip)/Count= 2/5;
计算平均值
最后加所有元组的bleu得分都加起来然后取平均数得:
bleu(avg) = (p1+p2+p3)/3 = (5/7+2/3+2/5)/3 = 0.594
“简短惩罚” BP(brevity penalty)
最后再乘上一个“简短惩罚” BP(brevity penalty),即最后的bleu得分为:
Bleu(total)=BP * bleu(avg)
这里为什么要乘以BP:如果MT输出了一个非常短的翻译,那么会更容易得到一个高精度的bleu,因为输出的大部分词都会出现在参考翻译中,所以我们并不想要特别短的翻译结果,所以加入BP这么一个调整因子:
注:c为MT输出的句子长度,r为翻译的句子长度
上式中,若c<=r ,则 0<exp(1-r/c)<=1,得分bleu(avg)就会乘以小于1的系数 ,从而被“惩罚”。 那么最后:Bleu(total)=BP*bleu(avg)
2、ROUGE评估法(自动摘要)
Rouge
参考:
https://blog.csdn.net/qq_25222361/article/details/78694617
https://www.aclweb.org/anthology/W04-1013/
Rouge(recall-oriented understanding for gisting evaluation)是评估自动文摘以及机器翻译的一组指标。
论文链接地址:http://citeseer.ist.psu.edu/viewdoc/download;jsessionid=368956B77243860A93FC0E3726EE7919?doi=10.1.1.111.9426&rep=rep1&type=pdf
该方法的主要是思想是:由多个专家分别生成人工摘要,构成标准摘要集。将系统生成的自动摘要与人工生成的标准摘要相对比,通过统计二者之间重叠的基本单元(n元语法、词序列和词对)的数目,来评价摘要的质量。通过多专家人工摘要的对比,提高评价系统的稳定性和健壮性。
该方法现在已经成为摘要评价技术的通用标准之一。
关于该算法演变评价标准有:Rouge-N、Rouge-L、Rouge-S、Rouge-W、Rouge-SU。
Rouge-N介绍
参考:
https://blog.csdn.net/qq_25222361/article/details/78694617
https://www.aclweb.org/anthology/W04-1013/
公式:
分母是n-gram的个数,分子是参考摘要和自动摘要共有的n-gram的个数。
其中,
- n表示n-gram的长度,
- {参考摘要} 即事先获得的标准摘要,
- 表示机器自动摘要和参考摘要中同时出现n-gram的个数,
- 则表示参考摘要中出现的n-gram个数。
- 1-gram、2-gram如下,N-gram以此类推:
不难看出,ROUGE公式是由召回率的计算公式演变而来的,分子可以看作“检出的相关文档数目”,即系统生成摘要与标准摘要相匹配的N-gram个数,分母可以看作“相关文档数目”,即标准摘要中所有的N-gram个数。
举个栗子:
自动摘要:Y(机器自动生成):the cat was found under the bed
参考摘要:X1(人工生成):the cat was under the bed
1-gram:将参考摘要做1-gram
参考摘要中的1-gram | Count(参考摘要) | Count(自动翻译) |
---|---|---|
the | 2 | 2 |
cat | 1 | 1 |
was | 1 | 1 |
under | 1 | 1 |
bed | 1 | 1 |
小计 | 6 | 6 |
Rouge_1(X1,Y)= 6/6 =1.0,分子是待评测摘要和参考摘要都出现的1-gram的个数,分子是参考摘要的1-gram个数。(其实分母也可以是待评测摘要的,但是在精确率和召回率之间,我们更关心的是召回率Recall,同时这也和上面ROUGN-N的公式相同)
2-gram:将参考摘要做2-gram
参考摘要中的2-gram | Count(参考摘要) | Count(自动翻译) |
---|---|---|
the cat | 1 | 1 |
cat was | 1 | 1 |
was under | 1 | 0 |
under the | 1 | 1 |
the bed | 1 | 1 |
小计 | 5 | 4 |
计算得,Rouge_2(X1,Y)=4/5=0.8
3-gram:将参考摘要做3-gram
参考摘要中的3-gram | Count(参考摘要) | Count(自动翻译) |
---|---|---|
the cat was | 1 | 1 |
cat was under | 1 | 0 |
was under the | 1 | 0 |
under the bed | 1 | 1 |
小计 | 4 | 2 |
计算得,Rouge_3(X1,Y)=2/4=0.5
优点:直观,简介,能反映词序。缺点:区分度不高,且当N>3时,ROUGE-N值通常很小。
应用场景:ROUGE-1:短摘要评估,多文档摘要(去停用词条件);ROUGE-2: 单文档摘要,多文档摘要(去停用词条件);
参考:https://blog.csdn.net/qq_25222361/article/details/78694617
Rouge-L 介绍
参考:
https://blog.csdn.net/qq_25222361/article/details/78694617
https://www.aclweb.org/anthology/W04-1013/
L即是LCS(longest common subsequence,最长公共子序列)的首字母,因为Rouge-L使用了最长公共子序列。
Rouge-L计算方式如下图:
公式的几点解释:
- LCS(X,Y)是X和Y的最长公共子序列的长度(单词个数)。实际匹配时,跟顺序也有关系
- m,n分别表示参考摘要和自动摘要的长度(一般就是所含词的个数),
- 召回率
- 准确率
- 即是我们所说的Rouge-L。F-Measure是Precision和Recall加权调和平均。在DUC中, 被设置为一个很大的数, ,所以 的值取决于 ,与上文所说的一般只考虑召回率对应。
备注: 中 如果设置为1,则就是我们平常说的F1
举个栗子
R1 : police killed the gunman.
C1 : police ended the gunman.
C2 : the gunman murdered police.
R1为参考摘要,C1,C2为候选的机器摘要。
ROUGE-L(C1)=3/4 匹配上的是‘plice’ 和‘the gunman’
ROUGE-L(C2)=2/4 匹配上的是‘he gunman ’,‘police’不能匹配
C1优于C2!
再举个栗子
R1= ['police killed the gunman']
C1= ['the gunman kill police']
C2= ['the gunman police killed']
ROUGE-L(C1)=2/4 因其只能匹配上 ‘the gunman’ ,
ROUGE-L(C1)=2/4 也只能匹配上 ‘the gunman’ ,或者‘police killed’,二者二选一,不能都选
总结:ROUGE-L 跟词的顺序有关系,不能反复查找,只能一遍查找过去。
Rouge-W 介绍
挖坑待填
参考:
https://blog.csdn.net/qq_25222361/article/details/78694617
https://www.aclweb.org/anthology/W04-1013/
ROUGE 的具体使用
参考:
https://www.jianshu.com/p/2d7c3a1fcbe3
官网:https://github.com/pltrdy/rouge
安装 pip install rouge,
代码:
from rouge import Rouge
a = ["the cat was found under the bed",] # 机器摘要 (可以是列表也可以是句子)
b = ["the cat was under the bed",] #标准摘要-参考摘要
rouge = Rouge()
rouge_score = rouge.get_scores(a, b)
for x in rouge_score:
print("rouge-1",x["rouge-1"])
print("rouge-2",x["rouge-2"])
print("rouge-L",x["rouge-l"])
结果:
rouge-1 {'f': 0.9230769181065088, 'p': 0.8571428571428571, 'r': 1.0}
rouge-2 {'f': 0.7272727223140496, 'p': 0.6666666666666666, 'r': 0.8}
rouge-L {'f': 0.9090909041322315, 'p': 0.8333333333333334, 'r': 1.0}
tips: 对于英文,直接把句子输入即可,中文的话, 没有空格无法识别词,所以得分词之后再计算rouge值。如果需要以字为单位也得每个字加个空格。
如果想要求多个翻译的平均结果,可以这样做
rouge = Rouge()
rouge_score = rouge.get_scores(a, b,avg=True)
print("avg_rouge-1",rouge_score["rouge-1"])
print("avg_rouge-2",rouge_score["rouge-2"])
print("avg_rouge-L",rouge_score["rouge-l"])
结果:
avg_rouge-1 {'f': 0.9230769181065088, 'p': 0.8571428571428571, 'r': 1.0}
avg_rouge-2 {'f': 0.7272727223140496, 'p': 0.6666666666666666, 'r': 0.8}
avg_rouge-L {'f': 0.9090909041322315, 'p': 0.8333333333333334, 'r': 1.0}
还有一个pyrouge ,perl写的,据说各种坑,没有试
pyrouge是现成的计算库,https://github.com/andersjo/pyrouge,安装方法 https://blog.csdn.net/qq_32458499/article/details/80282049
关键点是:安装好perl,以及perl安装包的CPAN
能计算rouge 1/2/3/4/5/L
注:这个开源工具,实现有3个,p-准确率、r-召回率 和 f。我们看到公式中强调的是 r-召回率。这里实现的f,经验证是F1
3、METEOR评估法(机器翻译、自动文摘)
挖坑待填
参考:https://zhuanlan.zhihu.com/p/100942429
网友评论