1.rouge介绍

ROUGE评价方法与pyramid,BLUE方法一起作为评价自动摘要质量的内部评价方法的三大中流砥柱。

ROUGE:recall-oriented understand for gisting evalution

2004年,Chin-Yew Lin 提出

基本思想

由多个专家分别生成人工摘要,构成标准摘要集,将系统生成的自动摘要与人工生成的标准摘要相比较,通过统计二者之间重叠的基本单元(n元语法,词序列和词对)的数目,来评价摘要的质量。通过多专家人工摘要的对比,提高评价系统的稳定性和健壮性。

这个方法已经成为评价摘要技术的通用标准之一。

2.评价标准

ROUGE-N

ROUGE-L

ROUGE-S

ROUGE-W

ROUGE-SU

3. ROUGE-N(N-gram Co-Occurrence Statistics)

N-gram模型

n-gram模型.png

句子S由词序列[图片上传失败...(image-a49417-1542860196809)]组成,计算句子S出现的概率 [图片上传失败...(image-31d2bd-1542860196809)])最简单,最直接的方法是计数后做除法,也就是最大似然估计(MLE),但是这样做会面临数据稀疏严重和参数空间巨大的问题,导致无法实用。于是一般采用n-gram模型,n-gram模型基于马尔科夫假设,他认为,一个词的出现仅仅依赖于他前面出现的有限的一个或者几个词。

rouge-n介绍.png

其中分母是n-gram的个数,分子是参考摘要和自动摘要共有的n-gram的个数。举例说明一下:

自动摘要Y(一般是自动生成的):

the cat was found under the bed

参考摘要,X1 (gold standard ,人工生成的):

the cat was under the bed

summary的1-gram、2-gram如下,N-gram以此类推:

rouge_1(X1,Y)= 6/6=1.0,分子是待评测摘要和参考摘要都出现的1-gram的个数,分子是参考摘要的1-gram个数。(其实分母也可以是待评测摘要的,但是在精确率和召回率之间,我们更关心的是召回率Recall,同时这也和上面ROUGN-N的公式相同)

同样,Rouge_2(X1,Y)=4/5=0.8

4. ROUGE-L

image.png

5.ROUGE-W

ROUGE-W是ROUGW-L的改进版,例如下面这种情况

图中,X 是参考文摘,Y1,Y2是两个待评测文摘,明显Y1 要优于Y2 ,因为Y1 可以和参考摘要X 连续匹配,但是Rouge_L(X,Y1)=Rouge_L(X,Y2) ,针对这个问题论文作者提出了改进的方案—加权最长公共子序列(Weighted Longest Common Subsequence)。

6.ROUGE-S

即使用了skip-grams,在参考摘要和待评测摘要进行匹配时,不要求gram之间必须是连续的,可以“跳过”几个单词,比如skip-bigram,在产生grams时,允许最多跳过两个词。比如“cat in the hat”的 skip-bigrams 就是 “cat in, cat the, cat hat, in the, in hat, the hat”.

7.总结

8.rouge与pyrouge的安装

使用pyrouge前,需要安装好rouge.

下面两个链接有相应的安装工具和教程

注意:Github上的ROUGE已经不可以用了。

9.使用

def rouge(ref, hyp, log_path):

assert len(ref) == len(hyp)

ref_dir = log_path + 'reference/'

cand_dir = log_path + 'candidate/'

if not os.path.exists(ref_dir):

os.mkdir(ref_dir)

if not os.path.exists(cand_dir):

os.mkdir(cand_dir)

for i in range(len(ref)):

with codecs.open(ref_dir+"%06d_reference.txt" % i, 'w', 'utf-8') as f:

f.write(" ".join(ref[i]).replace(' ', '') + '\n')

with codecs.open(cand_dir+"%06d_candidate.txt" % i, 'w', 'utf-8') as f:

f.write(" ".join(hyp[i]).replace(' ', '').replace('', 'UNK') + '\n')

r = pyrouge.Rouge155()

r.model_filename_pattern = '#ID#_reference.txt'

r.system_filename_pattern = '(\d+)_candidate.txt'

r.model_dir = ref_dir

r.system_dir = cand_dir

logging.getLogger('global').setLevel(logging.WARNING)

rouge_results = r.convert_and_evaluate()

scores = r.output_to_dict(rouge_results)

recall = [round(scores["rouge_1_recall"] * 100, 2),

round(scores["rouge_2_recall"] * 100, 2),

round(scores["rouge_l_recall"] * 100, 2)]

precision = [round(scores["rouge_1_precision"] * 100, 2),

round(scores["rouge_2_precision"] * 100, 2),

round(scores["rouge_l_precision"] * 100, 2)]

f_score = [round(scores["rouge_1_f_score"] * 100, 2),

round(scores["rouge_2_f_score"] * 100, 2),

round(scores["rouge_l_f_score"] * 100, 2)]

print("F_measure: %s Recall: %s Precision: %s\n"

% (str(f_score), str(recall), str(precision)))

with codecs.open(ref_dir+"rougeScore", 'w+', 'utf-8') as f:

f.write("F_measure: %s Recall: %s Precision: %s\n"

% (str(f_score), str(recall), str(precision)))

return f_score[:], recall[:], precision[:]

首先记得:import pyrouge

这里的ref是生成的摘要,hyp是系统参考摘要

regerence文件夹下,文件名为reference00.txt, 00代表数字编号

一定要记住

文件中都是一行一个句子!。

TXT文件中好像不允许出现'',如果有可能会报错!

参考

python中rouge是什么程序_rouge与pyrouge使用事项相关推荐

  1. python中变量类型在程序中可以改变_Python中的变量和数据类型,python,及

    变量 变量的定义: 在程序中,有时我们需要对2个数据进行求和,那么该怎样做呢? 大家类比一下现实生活中,比如去超市买东西,往往咱们需要一个菜篮子,用来进行存储物品,等到所有的物品都购买完成后,在收银台 ...

  2. python中变量类型在程序中可以改变_python的可变与不可变数据类型

    首先,我们需要知道在python中哪些是可变数据类型,哪些是不可变数据类型.可变数据类型:列表list和字典dict:不可变数据类型:整型int.浮点型float.字符串型string和元组tuple ...

  3. python中变量类型在程序中可以改变_详细解析Python当中的数据类型和变量

    数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定 ...

  4. python应用程序开发者_用 NVIDIA ISAAC-SDK 在 Python 中开发机器人应用程序

    图 1 .使用 Jupyter 笔记本和 ISAAC SDK Python API 在 ISAAC Sim 中控制虚拟机器人. NVIDIA ISAAC 软件开发工具包 的模块化和易于使用的感知堆栈继 ...

  5. python中二进制整数_Python程序查找表示二进制整数的必要位数

    python中二进制整数 Given an integer number and we have to find necessary bits to represent it in binary in ...

  6. 微课系列(四):Python中map对象的几种用法和注意事项

    在Python中,map.filter.enumerate.zip.reversed等对象除了惰性求值之外,还有个共同的特点是"其中的元素只能使用一次",这一点如果不注意的话,有时 ...

  7. TaiChi Lang 让Python代码提速100倍!(高性能计算、图形学、仿真等领域;加速 Python 中计算密集任务程序;希望使用 Python 开发但部署到其它环境)

    1.TaiChi简介 Taichi 起步于 MIT 的计算机科学与人工智能实验室(CSAIL),设计初衷是便利计算机图形学研究人员的日常工作,帮助他们快速实现适用于 GPU 的视觉计算和物理模拟算法. ...

  8. python编辑图像_在python中创建图像编辑应用程序

    因此,事实上,创建一个具有良好用户界面的复杂应用程序需要 时间 -我只是在扩大一点THC4K的答案. pil,至少pil本身对这个没有用处:它确实有一些操作图像的功能,但是这里复杂的任务是创建和调整您 ...

  9. 【Python应用】Python中调用系统应用程序

    os.system() 在shell中执行一条命令.函数原型如下: 它是最简单的调用系统应用的方式,下面是一个例子: import os import sysos.system("dir&q ...

最新文章

  1. 如何修改Linux主机名
  2. 使用pytorch从零开始实现YOLO-V3目标检测算法 (二)
  3. Qt与OpenCV结合:图像显示
  4. c语言如何把void换成汉字,有没有大佬帮我把这个代码改成void函数形式的代码。拜托了!...
  5. teleport 组件的作用_新发现!新型焊带助组件输出功率增加2.1%
  6. 手把手教你如何罗列提纲,避开这3个坑,提升写作效率50%
  7. 艾伟_转载:.NET设计模式:工厂方法模式(Factory Method)
  8. CISCO 路由器(1)
  9. Windows 常用的 CMD 命令
  10. 解决速达软件提示将numeric转换为数据类型numeric时发生算术溢出错误问题
  11. 分享几个特别好用且免费的图片/视频/gif/mp3压缩网站
  12. 解决AndroidStudio报错问题:Missing essential plugin
  13. 中文查重原理 及算法实例(python)
  14. 微信开发者工具 推送报hook declined
  15. 常见的几种锁(互斥锁,自旋锁,乐观锁,悲观锁)
  16. win7系统获得管理员取得所有权的方法【系统天地】
  17. centos上升级node_如何升级nodejs到最新版本
  18. Guys, what is better than sex?
  19. Redis运行环境搭建
  20. 使用扫码枪(二维码,条码)使用键盘钩子获取扫码数据

热门文章

  1. 计算机网申兴趣爱好怎么写,网申个人爱好如何填写?
  2. laravel 自动验证,提示验证成功,失败信息,引入语言包
  3. 修改服务器hba卡pciid,HBA卡更换步骤.doc
  4. Android 必须知道2018年流行的框架库及开发语言,看这一篇就够了!
  5. phpstudy本地配置教程You don't have permission to access解决
  6. 正大期货新闻:油价今年有望“长期”处在100美元上方
  7. Java扑克牌24点运算
  8. wms仓库管理软件的七大产品特点
  9. 最全的SQL练习题(做完你就是高手)
  10. 数据库 实验三 数据库查询和数据操纵