python中rouge是什么程序_rouge与pyrouge使用事项
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使用事项相关推荐
- python中变量类型在程序中可以改变_Python中的变量和数据类型,python,及
变量 变量的定义: 在程序中,有时我们需要对2个数据进行求和,那么该怎样做呢? 大家类比一下现实生活中,比如去超市买东西,往往咱们需要一个菜篮子,用来进行存储物品,等到所有的物品都购买完成后,在收银台 ...
- python中变量类型在程序中可以改变_python的可变与不可变数据类型
首先,我们需要知道在python中哪些是可变数据类型,哪些是不可变数据类型.可变数据类型:列表list和字典dict:不可变数据类型:整型int.浮点型float.字符串型string和元组tuple ...
- python中变量类型在程序中可以改变_详细解析Python当中的数据类型和变量
数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定 ...
- python应用程序开发者_用 NVIDIA ISAAC-SDK 在 Python 中开发机器人应用程序
图 1 .使用 Jupyter 笔记本和 ISAAC SDK Python API 在 ISAAC Sim 中控制虚拟机器人. NVIDIA ISAAC 软件开发工具包 的模块化和易于使用的感知堆栈继 ...
- python中二进制整数_Python程序查找表示二进制整数的必要位数
python中二进制整数 Given an integer number and we have to find necessary bits to represent it in binary in ...
- 微课系列(四):Python中map对象的几种用法和注意事项
在Python中,map.filter.enumerate.zip.reversed等对象除了惰性求值之外,还有个共同的特点是"其中的元素只能使用一次",这一点如果不注意的话,有时 ...
- TaiChi Lang 让Python代码提速100倍!(高性能计算、图形学、仿真等领域;加速 Python 中计算密集任务程序;希望使用 Python 开发但部署到其它环境)
1.TaiChi简介 Taichi 起步于 MIT 的计算机科学与人工智能实验室(CSAIL),设计初衷是便利计算机图形学研究人员的日常工作,帮助他们快速实现适用于 GPU 的视觉计算和物理模拟算法. ...
- python编辑图像_在python中创建图像编辑应用程序
因此,事实上,创建一个具有良好用户界面的复杂应用程序需要 时间 -我只是在扩大一点THC4K的答案. pil,至少pil本身对这个没有用处:它确实有一些操作图像的功能,但是这里复杂的任务是创建和调整您 ...
- 【Python应用】Python中调用系统应用程序
os.system() 在shell中执行一条命令.函数原型如下: 它是最简单的调用系统应用的方式,下面是一个例子: import os import sysos.system("dir&q ...
最新文章
- 如何修改Linux主机名
- 使用pytorch从零开始实现YOLO-V3目标检测算法 (二)
- Qt与OpenCV结合:图像显示
- c语言如何把void换成汉字,有没有大佬帮我把这个代码改成void函数形式的代码。拜托了!...
- teleport 组件的作用_新发现!新型焊带助组件输出功率增加2.1%
- 手把手教你如何罗列提纲,避开这3个坑,提升写作效率50%
- 艾伟_转载:.NET设计模式:工厂方法模式(Factory Method)
- CISCO 路由器(1)
- Windows 常用的 CMD 命令
- 解决速达软件提示将numeric转换为数据类型numeric时发生算术溢出错误问题
- 分享几个特别好用且免费的图片/视频/gif/mp3压缩网站
- 解决AndroidStudio报错问题:Missing essential plugin
- 中文查重原理 及算法实例(python)
- 微信开发者工具 推送报hook declined
- 常见的几种锁(互斥锁,自旋锁,乐观锁,悲观锁)
- win7系统获得管理员取得所有权的方法【系统天地】
- centos上升级node_如何升级nodejs到最新版本
- Guys, what is better than sex?
- Redis运行环境搭建
- 使用扫码枪(二维码,条码)使用键盘钩子获取扫码数据
热门文章
- 计算机网申兴趣爱好怎么写,网申个人爱好如何填写?
- laravel 自动验证,提示验证成功,失败信息,引入语言包
- 修改服务器hba卡pciid,HBA卡更换步骤.doc
- Android 必须知道2018年流行的框架库及开发语言,看这一篇就够了!
- phpstudy本地配置教程You don't have permission to access解决
- 正大期货新闻:油价今年有望“长期”处在100美元上方
- Java扑克牌24点运算
- wms仓库管理软件的七大产品特点
- 最全的SQL练习题(做完你就是高手)
- 数据库 实验三 数据库查询和数据操纵