文本摘要评估框架sumeval完全解析:ROUGE/BLEU一站搞定,多语言支持让评测不再头疼
【免费下载链接】sumevalWell tested & Multi-language evaluation framework for text summarization.项目地址: https://gitcode.com/gh_mirrors/su/sumeval
sumeval是一个经过严格测试的文本摘要评估框架,用纯 Python 实现了ROUGE和BLEU两大经典评测指标,原生支持英文、日文、中文多语言评测,让摘要质量评测不再头疼。无论你是做大模型摘要实验、学术研究,还是日常模型对比,它都能在几行代码内给出与官方脚本一致、可复现的评分结果。
为什么需要专业的文本摘要评估工具?
做文本摘要(Text Summarization)的人,迟早会遇到这个问题:我的摘要到底好不好?
- 手工评估:费时费力,且标准不统一,两个人打分可能差很多
- 网上各种脚本:分词方式各异,得分对不上,论文里不敢引用
- 多语言场景:中文、日文分词工具五花八门,英文工具直接"水土不服"
sumeval 解决的正是这些痛点:
- ✅Well tested:ROUGE-X 分数与原始 Perl 官方脚本(ROUGE-1.5.5.pl)逐一对齐;BLEU 由 SacréBLEU 计算,与 WMT 官方脚本
mteval-v13a.pl数值一致 - ✅多语言开箱即用:英文、日文、中文各有独立分词与停用词处理
- ✅纯 Python 实现:无系统级依赖,pip 一条命令装好
- ✅可扩展:继承一个基类即可接入你的自定义语言
核心功能一览:ROUGE / BLEU 一站搞定
sumeval 提供两套计算器,覆盖摘要评测的全部主流指标:
| 指标 | 说明 | 实现模块 |
|---|---|---|
| ROUGE-1 / ROUGE-2 | 基于 n-gram 重叠度的 F 分数 | sumeval/metrics/rouge.py |
| ROUGE-L | 基于最长公共子序列(LCS),衡量句式流畅度 | sumeval/metrics/rouge.py |
| ROUGE-BE | 基于依存句法的基本元素(Basic Element)匹配,可比较头词 H、修饰语 M、关系 R | sumeval/metrics/rouge.py |
| BLEU | WMT 标准平滑处理,支持多语言分词器 | sumeval/metrics/bleu.py |
每个分数都支持多个 reference(多段参考摘要取平均),并可通过alpha参数调节精确率与召回率的权重——alpha 趋近 0 偏重召回,趋近 1 偏重精确,方便你按评测需求"调参"。
最快上手指南:三步完成安装
sumeval 发布在 PyPI 上,免费安装只需一行命令:
pip install sumeval如果 pip 源较慢,也可以 clone 仓库源码安装:
git clone https://gitcode.com/gh_mirrors/su/sumeval cd sumeval && pip install -e .依赖说明见
requirements.txt:核心依赖仅plac(命令行解析)和sacrebleu(BLEU 计算)。
Python API:几行代码算出 ROUGE
打开demo.py就能看到最典型用法——实例化RougeCalculator后,按指标名直接调用:
from sumeval.metrics.rouge import RougeCalculator rouge = RougeCalculator(stopwords=True, lang="en") rouge_1 = rouge.rouge_n(summary="I went to the Mars from my living town.", references="I went to Mars", n=1) rouge_2 = rouge.rouge_n(summary="I went to the Mars from my living town.", references=["I went to Mars", "It's my living town"], n=2) rouge_l = rouge.rouge_l(summary="I went to the Mars from my living town.", references=["I went to Mars", "It's my living town"])三个实用细节:
- stopwords 默认开启:与官方 Perl 脚本行为一致,自动过滤停用词(数据文件在
sumeval/metrics/lang/data/下,每种语言一个目录) - stemming 只对 reference 生效:这是官方脚本的原始行为,避免摘要和参考的变形不一致
- 可以传已分词的词列表:
tokenize方法支持传入自定义分词结果,方便你用自家 NLP 管线算 ROUGE
想要 ROUGE-BE?同样简单,调用rouge_be(summary, references, compare_type="HMR")即可,compare_type支持 "H"(头词)、"M"(修饰语)、"R"(依存关系)任意组合。
BLEU 评测:与 WMT 官方同款的打分方式
BLEU 部分由成熟的 SacréBLEU 驱动,保证与 WMT 官方结果一致:
from sumeval.metrics.bleu import BLEUCalculator bleu = BLEUCalculator() score = bleu.bleu("I am waiting on the beach", "He is walking on the beach")sumeval 在sumeval/metrics/bleu.py中还做了两件事,让它比直接用 sacrebleu 更省心:
- 日文自动挂载专用分词器:
lang="ja"时自动使用 janome/MeCab 分词后再计算 - 支持传入已分词结果:绕过默认分词器,用你自己的分词方案
多语言支持:英文、日文、中文开箱即用
这是 sumeval 最有辨识度的能力。每种语言都有独立的语言处理器(见sumeval/metrics/lang/目录):
| 语言 | 参数 | 分词依赖 | 备注 |
|---|---|---|---|
| 英文 | lang="en" | 无(内置) | 默认语言,自带 stemming 词典 |
| 日文 | lang="ja" | janome或MeCab | ROUGE-BE 需额外安装 GiNZA 句法分析器 |
| 中文 | lang="zh" | jieba | ROUGE-BE 需额外安装 pyhanlp |
切换语言只是换一个参数:
# 中文摘要评测 rouge_zh = RougeCalculator(lang="zh") score = rouge_zh.rouge_1(summary="我住在纽约,这是我的家乡。", references="我的家乡是纽约,非常棒。")各语言自带的停用词表位于sumeval/metrics/lang/data/下(如data/zh/stop_words.txt),英文还额外提供data/en/stemming.txt词干映射。
命令行工具:一条命令批量评估
不想写代码?sumeval 内置了命令行入口(实现见sumeval/cli/sum_eval.py),安装后即可直接使用:
sumeval r-nlb "I'm living New York its my home town so awesome" "My home town is awesome"r-nlb:计算 ROUGE-N、ROUGE-L、ROUGE-BE;b则单独计算 BLEU--use-file(-f):从文件按行读取摘要与参考文本,适合批量评测整个测试集--language(-la):指定语言,--stemming、--word-limit、--alpha等参数与 API 一一对应
输出为结构化 JSON,包含每条样本的分数与平均值(averages字段),直接可对接下游统计脚本或实验记录。
进阶:如何接入自定义语言?
sumeval 的多语言架构非常干净:所有语言类继承自sumeval/metrics/lang/base_lang.py中的BaseLang,你只需要实现tokenize方法。
参考tests/test_custom_lang.py的示例:
class Custom(BaseLang): def __init__(self): super(Custom, self).__init__("cs") def tokenize(self, text): return text.split("/") rouge = RougeCalculator(lang=Custom())把实例化的语言对象直接传给RougeCalculator或BLEUCalculator就能用。想正式支持一门新语言,只需仿照lang_en.py、lang_ja.py、lang_zh.py新建语言文件并注册,项目 README 中也明确欢迎这类贡献。
测试体系:为什么说它"分数可信"?
tests/目录下有完整测试集(test_rouge.py、test_bleu.py、test_rouge_ja.py、test_rouge_zh.py等),评测数据存放在tests/data/rouge/,包括中日英三语的 ROUGE 校验集。ROUGE 分数通过与原始 Perl 脚本、Python 第三方实现交叉验证,BLEU 则对标 WMT 官方脚本——这正是"分数能写进论文"的底气。
常见问题 FAQ
Q1:计算 ROUGE-BE 报错或得分为 0?ROUGE-BE 依赖句法分析(Basic Element 提取),英文需要 spaCy,日文需 GiNZA,中文需 pyhanlp。请安装对应依赖后重试。
Q2:日文/中文评测报缺少依赖?日文装janome(或 MeCab),中文装jieba,均为 pip 可直接安装的纯 Python 包。
Q3:ROUGE 得分和网上其他工具算的不一样?先检查三件事:是否过滤停用词(sumeval 默认开启)、是否做了 stemming(仅作用于 reference)、分词器是否一致。sumeval 的行为刻意对齐官方 Perl 脚本,差异大概率来自工具默认值不同。
Q4:支持多 reference 评测吗?支持。所有指标都接受references为字符串列表,内部对每条参考分别统计后合并计算 F 分数,与官方脚本的多参考语义一致。
总结:评测框架选它就对了
一句话回顾 sumeval 的价值:
- 🎯指标全:ROUGE-1/2/L/BE + BLEU 一站搞定,无需拼装多个库
- 🌏多语言:英、日、中文内置,自定义语言继承一个基类即可
- 🧪分数可信:全程对齐官方脚本,带完整测试数据
- 🚀零门槛:
pip install sumeval,Python API 与命令行双通道
如果你正在做摘要模型、改写系统或 RAG 质量评估,不妨现在就装上 sumeval,让"这个摘要好不好"从玄学变成有据可查的数字。
【免费下载链接】sumevalWell tested & Multi-language evaluation framework for text summarization.项目地址: https://gitcode.com/gh_mirrors/su/sumeval
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考