对于文本生成类4种评价指标的的计算BLEU METEOR ROUGE CIDEr
一、指标概述
这四种指标都是机器翻译的自动评价指标,对于一些生成式文本任务,也是使用这几种评价指标。
二、Bleu原理详解
BLEU是IBM于2002年提出的。我们假定人工给出的译文为reference,机器翻译的译文为candidate。
1.最早的BLEU算法
最早的BLEU算法是直接统计cadinate中的单词有多少个出现在reference中,具体的式子是:
$BLEU=\frac{出现在reference中的candinate的单词的个数}{cadinate中单词的总数}$
以下面例子为例:
candinate:the the the the the the the
reference:the cat is on the mat
cadinate中所有的单词都在reference中出现过,因此:
$BLEU=\frac{7}{7}=1$
对上面的结果显然是不合理的,而且主要是分子的统计不合理,因此对上面式子中的分子进行了改进。
2.改进的BLEU算法
针对上面不合理的结果,对分子的计算进行了改进,具体的公式变为如下:
$BLEU=\frac{Count^{clip}_{w_i}}{cadinate中单词的总数}$
$Count^{clip}_{w_i}=min(Count_{w_i},Ref-Count_{w_i})$
上面式子中:
$Count_{w_i}$ 表示单词$w_i$在candinate中出现的次数;
$Ref-Count_{w_i}$ 表示单词$w_i$在reference中出现的次数;
但一般情况下reference可能会有多个j句子,因此有:
$Count^{clip}=max(Count^{clip}_{w_i,j}),j=1,2,3......$
上面式子中:j表示第j个reference。
仍然以上面的例子为例,在candinate中只有一个单词the,因此只要计算一个$Count^{clip}$,the在reference中只出现了两次,因此:
$BLEU=\frac{2}{7}$
3.引入n-gram
在上面我们一直都是对于单个单词进行计算,单个单词可以看作时1−gram,1−gram可以描述翻译的充分性,即逐字翻译的能力,但不能关注翻译的流畅性,因此引入了n−gram,在这里一般n不大于4。引入n−gram后的表达式如下:
$p_n=\frac{\sum_{c\in candidates}\sum_{n-gram\in c}Count_{clip}(n-gram)}{\sum_{{c}'\in candidates}\sum_{{n-gram}'\in {c}'}Count({n-gram}')}$
很多时候在评价一个系统时会用多条candinate来评价,因此上面式子中引入了一个候选集合candinates。$p_n$中的n表示n-gram,$p_n$表示n-gram的精度,即1−gram时,n=1。
接下来简单的理解下上面的式子,首先来看分子:
1)第一个$\sum$描述的是各个candinate的总和,就是有多个句子
2)第二个$\sum$描述的是一条candinate中所有的n−gram的总和,就是一个句子的n-gram的个数
3)$Count_{clip}(n-gram)$表示某一个n−gram词的截断计数;
再来看分母,前两个$\sum$和分子中的含义一样,Count({n-gram}')表示n−gram′在candinate中的计数。
再进一步来看,实际上分母就是candinate中n−gram的个数,分子是出现在reference中的candinate中n−gram的个数。
举一个例子来看看实际的计算:
candinate: the cat sat on the mat
reference:the cat is on the mat
计算n−gram的精度:
$p1=\frac{5}{6}=0.83333$
$p2=\frac{3}{5}=0.6$
$p3=\frac{1}{4}=0.25$
$p4=\frac{0}{3}=0$
4.添加对句子长度的乘法因子
在翻译时,若出现译文很短的句子时往往会有较高的BLEU值,因此引入对句子长度的乘法因子,其表达式如下:
在这里c表示cadinate的长度,r表示reference的长度。
将上面的整合在一起,得到最终的表达式:
$BLEU=BPexp(\sum^N_{n=1}w_n logp_n)$
其中$exp(\sum^N_{n=1}w_n logp_n)$表示不同的n−gram的精度的对数的加权和。
三、具体实现
github下载链接:https://github.com/Maluuba/nlg-eval
将下载的文件放到工程目录,而后使用如下代码计算结果
具体的写作格式如下:
from nlgeval import NLGEval
nlgeval=NLGEval()
#对应的模型生成的句子有三句话,每句话的的标准有两句话
hyp=['this is the model generated sentence1 which seems good enough','this is sentence2 which has been generated by your model','this is sentence3 which has been generated by your model']
ref1=['this is one reference sentence for sentence1','this is a reference sentence for sentence2 which was generated by your model','this is a reference sentence for sentence3 which was generated by your model']
ref2=['this is one more reference sentence for sentence1','this is the second reference sentence for sentence2','this is a reference sentence for sentence3 which was generated by your model']
lis=[ref1,ref2]
ans=nlgeval.compute_metrics(hyp_list=hyp,ref_list=lis)
# res=compute_metrics(hypothesis='nlg-eval-master/examples/hyp.txt',
# references=['nlg-eval-master/examples/ref1.txt','nlg-eval-master/examples/ref2.txt'])
print(ans)
输出结果如下:
{'Bleu_2': 0.5079613089004589, 'Bleu_3': 0.35035098185199764, 'Bleu_1': 0.6333333333122222, 'Bleu_4': 0.25297649984340986, 'ROUGE_L': 0.5746244363308142, 'CIDEr': 1.496565428735557, 'METEOR': 0.3311277692098822}
参考链接:https://www.cnblogs.com/jiangxinyang/p/10523585.html
对于文本生成类4种评价指标的的计算BLEU METEOR ROUGE CIDEr的更多相关文章
- Texygen文本生成,交大计算机系14级的朱耀明
文本生成哪家强?上交大提出基准测试新平台 Texygen 2018-02-12 13:11测评 新智元报道 来源:arxiv 编译:Marvin [新智元导读]上海交通大学.伦敦大学学院朱耀明, 卢思 ...
- 斯坦福NLP课程 | 第15讲 - NLP文本生成任务
作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www. ...
- dagger2系列之生成类实例
上一节的最后,我讲到一次注入生成类实例的生成步骤.先来回顾一下: 1 Module中存在创建方法,则看此创建方法有没有参数 如果有参数,这些参数也是由Component提供的,返回步骤1逐一生成参数 ...
- 用Enterprise Architect从源码自动生成类图
http://blog.csdn.net/zhouyong0/article/details/8281192 /*references:感谢资源分享者.info:简单记录如何通过工具从源码生成类图,便 ...
- 使用 paddle来进行文本生成
paddle 简单介绍 paddle 是百度在2016年9月份开源的深度学习框架. 就我最近体验的感受来说的它具有几大优点: 1. 本身内嵌了许多和实际业务非常贴近的模型比如个性化推荐,情感分析,词向 ...
- IDEA设置生成类基本注释信息
在eclipse中我们按一下快捷键就会生成类的基本信息相关的注释,其实在IDEA中也是可以的,需要我们手动设置,之后再创建类的时候就会自动加上这些基本的信息. File-->Setting 在E ...
- Java中String类两种实例化的区别(转)
原文:http://blog.csdn.net/wangdajiao/article/details/52087302 一.String类的第一种方式 1.直接赋值 例:String str = &q ...
- Android(java)学习笔记106:Android设置文本颜色的4种方法
1. Android设置文本颜色的4种方法: (1)利用系统自带的颜色类: tv.setTextColor(android.graphics.Color.RED); (2)数字颜色表示: tv.set ...
- 信息收集渠道:文本分享类网站Paste Site
信息收集渠道:文本分享类网站Paste Site Paste Site是一种专门的文本分享的网站.用户可以将一段文本性质的内容(如代码)上传到网站,然后通过链接分享给其他用户.这一点很类似于现在的优酷 ...
随机推荐
- Dubbo加权轮询负载均衡的源码和Bug,了解一下?
本文是对于Dubbo负载均衡策略之一的加权随机算法的详细分析.从2.6.4版本聊起,该版本在某些情况下存在着比较严重的性能问题.由问题入手,层层深入,了解该算法在Dubbo中的演变过程,读懂它的前世今 ...
- CYPRESS最新的USB3.0控制器
CYPRESS近日发布了其最新的USB3.0控制器,产品序号为CX3,主要是针对高像素摄像头方面的应用,接口支持MIPI的CSI-2,并不支持传统的基于并口的数据传输模式. MIPI(Mobile I ...
- 量化投资学习笔记01——初识Pyalgotrade量化交易回测框架
年初学习量化投资,一开始想自己从头写,还是受了C/C++的影响.结果困在了计算回测数据那里,结果老也不对,就暂时放下了.最近试了一下python的各个量化投资框架,发现一个能用的——pyalgotra ...
- windows系统的python开发环境的搭建
step1: 访问python官方网站下载python安装包 https://www.python.org/downloads/windows/ 下载自己想要的版本 勾上Add Python XX ...
- verilog设计加法器
概述 本文利用了硬件行为描述.数据流描述.结构描述三种方法分别写了几个加法器 一位半加法器 即两个一位的二进制数相加,得到其正常相加的结果的最后一位. 仿真波形图 硬件行为描述 设计文件 123456 ...
- 深入探索Java设计模式(三)之装饰器模式
装饰器模式使你可以在运行时使用类似于对象组成的技术来装饰类.这在我们希望实例化具有新职责的对象而无需对基础类进行任何代码更改的情况下尤其有用.本文是在学习完优锐课JAVA架构VIP课程—[框架源码专题 ...
- Linux之CentOS设置别名与屏蔽别名
一.环境 CentOS6.8 二.设置别名 ◆别名功能:让grep符合的关键字高亮 1.临时生效 [root@localhost ~]#alias grep="grep --color=au ...
- SQL- SQL查询检索阶段一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统: 二 准备前提 需要建立一张学生表,列分别是id,名称, ...
- android开发检测用户是否使用了虚拟定位
在应用开发中,如果有签到打卡之类的功能,你是否会遇到检测用户是否使用了虚拟定位软件来进行打卡?如果有,那么请仔细阅读这篇文章.该文章会带你认识什么是虚拟定位.什么是应用分身,以及如何通过代码来检测用户 ...
- [ASP.NET Core 3框架揭秘] 依赖注入[6]:服务注册
通过<利用容器提供服务>我们知道作为依赖注入容器的IServiceProvider对象是通过调用IServiceCollection接口的扩展方法BuildServiceProvider创 ...