ROUGE 简介

ROUGE 是一个系列的文本摘要评测指标,可用于评估机器摘要和人工摘要之间的相似度,主要包括以下具体指标:

  • ROUGE-N:表示 N 元模型 (N-gram) 的匹配程度
  • ROUGE-L:表示最长公共子序列 (LCS) 的匹配程度
  • ROUGE-W:表示带权最长公共子序列 LCS (W-LCS) 的匹配程度,连续子串越长则权重越大
  • ROUGE-S:表示跳字模型 (skip-gram) 的匹配程度
  • ROUGE-SU:表示跳字模型 (skip-gram) 以及 1 元模型 (unigram) 的匹配程度

每个具体指标都包括 Precision, Recall, F-Score 三项子指标,指标的具体定义详见这篇论文 ROUGE: A Package for Automatic Evaluation of Summaries。

ROUGE 一键安装

官方的 ROUGE 评测工具 ROUGE-1.5.5.pl 是用 Perl 脚本写的,每次评测都需要写 xml 配置文件,使用起来比较麻烦。

这里推荐一个 Python 包 rouge-metric,安装和配置十分方便,同时提供了 Perl 评测脚本的封装和一套 Python 版本的评测 API。

我们可以直接通过 pip 安装。

pip install rouge-metric

对于 Linux 和 macOS 用户,无需任何配置就能使用;对于 Windows 用户,需要手动安装 Strawberry Perl,并将其二进制目录添加到环境变量 PATH 中,确保命令行执行 perl --version 无报错。

rouge-metric 的使用

使用命令行

我们先将源仓库克隆下来,里面有测试用例。

git clone https://github.com/li-plus/rouge-metric.git
cd rouge-metric

首先测试一下命令行工具,在终端中输入,

rouge-metric sample/hypotheses sample/references -n 2

如果出现了下面的输出,表明安装成功。

---------------------------------------------
A ROUGE-1 Average_R: 0.51822 (95%-conf.int. 0.42105 - 0.61538)
A ROUGE-1 Average_P: 0.55556 (95%-conf.int. 0.44444 - 0.66667)
A ROUGE-1 Average_F: 0.53622 (95%-conf.int. 0.43243 - 0.64000)
---------------------------------------------
A ROUGE-2 Average_R: 0.19519 (95%-conf.int. 0.11765 - 0.27273)
A ROUGE-2 Average_P: 0.21250 (95%-conf.int. 0.12500 - 0.30000)
A ROUGE-2 Average_F: 0.20346 (95%-conf.int. 0.12121 - 0.28572)
---------------------------------------------
A ROUGE-L Average_R: 0.51822 (95%-conf.int. 0.42105 - 0.61538)
A ROUGE-L Average_P: 0.55556 (95%-conf.int. 0.44444 - 0.66667)
A ROUGE-L Average_F: 0.53622 (95%-conf.int. 0.43243 - 0.64000)

命令行工具的选项跟 ROUGE-1.5.5.pl 脚本基本一致,具体使用方法可以参考帮助信息 rouge-metric --help,以下是一些常用选项:

  • -n: 指定整数 N,计算 ROUGE-1 到 ROUGE-N
  • -x: 不计算 ROUGE-L(默认是计算 ROUGE-L 的)
  • -w: 指定 ROUGE-W 的权重,并计算 ROUGE-W
  • -2: 指定 ROUGE-S 的最大跳字距离,并计算 ROUGE-S
  • -U: 计算 ROUGE-S 的同时计算 ROUGE-SU,此时必须指定 -2 选项

例如命令 rouge-metric sample/hypotheses sample/references -n 2 -w 1.2 -2 4 -U 将计算 ROUGE-1, ROUGE-2, ROUGE-L, ROUGE-W-1.2, ROUGE-S4, ROUGE-SU4 这些指标。

ROUGE-1.5.5.pl API

在 Python 程序里面同样可以调用官方的 ROUGE-1.5.5.pl 评测脚本,代码如下,

from rouge_metric import PerlRougerouge = PerlRouge(rouge_n_max=3, rouge_l=True, rouge_w=True,rouge_w_weight=1.2, rouge_s=True, rouge_su=True, skip_gap=4)# Load summary results and evaluate
hypotheses = ['how are you\ni am fine',                       # document 1: hypothesis'it is fine today\nwe won the football game',   # document 2: hypothesis
]
references = [['how do you do\nfine thanks',   # document 1: reference 1'how old are you\ni am three',  # document 1: reference 2
], ['it is sunny today\nlet us go for a walk',  # document 2: reference 1'it is a terrible day\nwe lost the game',   # document 2: reference 2
]]scores = rouge.evaluate(hypotheses, references)
print(scores)

输出大致如下,不一一列出。

{'rouge-1': {'r': 0.51822, 'r_conf_int': (0.42105, 0.61538),'p': 0.55556, 'p_conf_int': (0.44444, 0.66667),'f': 0.53622, 'f_conf_int': (0.43243, 0.64)},'rouge-2': {...}, 'rouge-3': {...}, 'rouge-l': {...},'rouge-w-1.2': {...}, 'rouge-s4': {...}, 'rouge-su4': {...}
}

Python API

调用 ROUGE-1.5.5.pl 的方法效率较低,而且只能评测英文摘要,对于中文摘要需要构建词表,将文字映射到数字。

rouge-metric 还提供了 ROUGE 指标的一个 Python 实现:PyRouge,使用方法与 PerlRouge 类似,默认按换行符 \n 分句,按空格分词,可以支持多种语言的摘要评测。

from rouge_metric import PyRouge# Load summary results
hypotheses = ['how are you\ni am fine',  # document 1: hypothesis'it is fine today\nwe won the football game',  # document 2: hypothesis
]
references = [['how do you do\nfine thanks',  # document 1: reference 1'how old are you\ni am three',  # document 1: reference 2
], ['it is sunny today\nlet us go for a walk',  # document 2: reference 1'it is a terrible day\nwe lost the game',  # document 2: reference 2
]]# Evaluate document-wise ROUGE scores
rouge = PyRouge(rouge_n=(1, 2, 4), rouge_l=True, rouge_w=True,rouge_w_weight=1.2, rouge_s=True, rouge_su=True, skip_gap=4)
scores = rouge.evaluate(hypotheses, references)
print(scores)

输出大致如下,

{'rouge-1': {'r': 0.5182186234817814,'p': 0.5555555555555556,'f': 0.5362379555927943},'rouge-2': {...}, 'rouge-4': {...}, 'rouge-l': {...},'rouge-w-1.2': {...}, 'rouge-s4': {...}, 'rouge-su4': {...}
}

分句和分词还可以进一步定制化,具体可以参考 rouge.evaluate_tokenized 方法。

参考资料

[1]: ROUGE: A Package for Automatic Evaluation of Summaries, https://www.aclweb.org/anthology/W04-1013/
[2]: rouge-metric, https://github.com/li-plus/rouge-metric

ROUGE 简易安装教程相关推荐

  1. OpenStack简易安装教程--Havana版本

    本文根据OpenStack官方安装教程<openstack-install-guide-apt-havana>,翻译并重新整理成简易版的安装教程,安装了keystone.glance.no ...

  2. npm,vue简易安装教程

    npm,vue安装教程 1.下载node.js 直接去官网下载就好:Node.js 官网 点进去有两个选项,一个是LTS版本,一个是Current版本,下载LTS版本就好. LTS是长期支持(Long ...

  3. Ubuntu16.04环境下PyTorch简易安装教程

    安装NVIDIA GPU显卡驱动 如果需要安装cuda版本的PyTorch,电脑也有独立显卡的时候,一般需要更新一下Ubuntu独立显卡驱动.否则即使安装了cuda版本的PyTorch也没办法使用GP ...

  4. mysql5.7安装教程centos_MySQL5.7版CentOS系统简易安装教程

    这一篇教程,我们一起来完成MySQL在CentOS系统中的安装. 1.下载MySQL(Community版)RPM安装源. 如果没有安装wget,需要先执行命令安装. 执行命令: yum -y ins ...

  5. Kubuntu简易安装教程(压缩磁盘版)

    所有文件都在这个链接的文件夹里面 所需文件 - 123云盘https://www.123pan.com/s/DLbDVv-y7DfA 1.下载系统和Refus 点进去下载这两个 2.制作U盘启动盘 假 ...

  6. php最简易安装教程

    今天来讲讲如何搭建php的安装环境吧,顺便解决一下,php效果查看步骤繁琐的问题. 其实安装php网上都把他给复杂化了,我来讲一个最简易的方法. 一,xampp php运行需要Apache+MySQL ...

  7. CUDA简易安装教程

    我的当前配置是Win10+GTX1060,大部分的笔记本电脑其实都是独立显卡,不需要太多的检查吧,如果电脑比较特殊就检查一下自己的硬件设备是否完全支持,CUDA版本应该都差不多,我就选择11.0来安装 ...

  8. openfiler php,Openfiler - 开源存储管理平台 (CN) | Openfiler 简易安装教程

    1.开始安装 将Openfiler的安装光盘放入光驱,启动计算机,出现如下画面. Openfiler安装模式有图形界面安装模式和文本界面安装模式,按回车进入图形界面安装模式. 按回车键后,出现光驱测试 ...

  9. phoenix简易安装教程

    Phoenix的团队用了一句话概括Phoenix:"We put the SQL back in NoSQL" 意思是:我们把SQL又放回NoSQL去了!这边说的NoSQL专指HB ...

最新文章

  1. 用Leangoo敏捷开发工具如何管理用户故事?
  2. C语言 输入中文语句并按倒叙将它输出
  3. SqlParameter参数化查询
  4. 记一次项目中由id类型引起的bug
  5. jhsdb:JDK 9的新工具
  6. 在Java8中包装设计模式
  7. Apache 查看连接数
  8. vim YouCompleteMe
  9. HTML sublime :Please wait a bit while PyV8 binary is being downloaded 及代码和注释颜色 ,大小调节
  10. oracle DBTIMEZONE时区调整
  11. 本人亲测,实用安装Oracle VM VirtualBox教程
  12. 推荐一个图片在线生成链接的网站
  13. 服务器信号标识是什么意思,手机信号栏的这些“符号”是什么意思,你知道吗?...
  14. SRT编码器之Rendezvous模式详解
  15. python正版软件多少钱_正版数据库软件需要多少钱
  16. Arduino实时时钟设计(TM1637数码管显示)
  17. 使用了 23 的 Java 真的收费了吗?
  18. 微信小程序之自定义组件(微信小程序完结)
  19. 技术博客|第4期:个性化视频搜索引擎简介
  20. 微信识别二维码下载不了app

热门文章

  1. python爬虫之爬取网页基础知识及环境配置概括
  2. 前端模块化、组件化开发
  3. 华为云:别在我面前提云栖大会!
  4. Hive查询问题(卡住)
  5. putchar、getchar 大小写转化
  6. 一文看懂ArrayList的自动扩容
  7. 树莓派(USB麦克风和麦克风阵列) 录音和播放
  8. Python turtle 绘制有趣的图形
  9. PyTorch二分类时BCELoss,CrossEntropyLoss,Sigmoid等的选择和使用
  10. 有效运用 Color mask 和开发 Automation material - PART 1