当前位置: 首页 > 工具软件 > Rouge > 使用案例 >

ROUGE 简易安装教程

姜钧
2023-12-01

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 PerlRouge

rouge = 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

 类似资料: