ROUGE的理解

ROUGE的理解

ROUGE表示Recall-Oriented Understudy for Gisting Evaluation,这是在文本摘要以及机器翻译中重要的评价指标。它通过将自动产生的摘要或翻译与一组参考摘要(通常是人工产生的)进行比较来工作。

目前在文本摘要任务中最常用的评价方法是ROUGERecall-Oriented Understudy for Gisting Evaluation,来源于2003的paper Automatic Evaluation of Summaries Using N-gram Co-Occurrence Statistics

ROUGE受到了机器翻译自动评价方法BLEU的启发,不同之处在于,采用召回率来作为指标。基本思想是将模型生成的摘要与参考摘要的n元组贡献统计量作为评判依据。

最常用的Rouge评价指标为ROUGE-1、ROUGE-2和ROUGE-L

ROUGE-N

这个指标计算生成的摘要与标注摘要的n-gram召回率,通常用ROUGE-1/2来评估

ROUGE-L
这个指标表达的是匹配两个文本单元之间的最长公共序列(LCS,Longest Common Sub sequence)。

ROUGE-W

这个指标计算加权的LCS。

ROUGE-S

计算跳二元组(skip-bigram)同现统计量。和ROUGE-2有什么区别?

ROUGE自动评测方法最大的优点是不依赖语言处理工具缺点是死板,不够灵活,没有考虑语义层次上的匹配。可以考虑用word embedding来做语义层次上的评判,而不仅仅是n-gram的匹配。

程序包的选择

1)pyrouge

https://github.com/andersjo/pyrouge

https://github.com/bheinzerling/pyrouge

安装过程繁琐,能计算rouge 1/2/3/4/5/L

2)rouge

https://github.com/pltrdy/rouge

安装过程简单,只能计算rouge1/2/L

#Precision和Recall

例如对于以下的例子而言:

系统摘要(机器预测的摘要):the cat was found under the bed

参考摘要:the cat was under the bed

如果仅考虑单个单词,则系统摘要和参考摘要之间的重叠单词数为6。为了获得更合理的评价,还可以使用 精准度(Precision)和召回率(Recall) 等。

Recall意味着“有多少参考摘要被系统摘要所捕获/覆盖”,计算公式为 被 覆 盖 的 单 词 数 量 参 考 摘 要 单 词 总 数 \frac{被覆盖的单词数量}{参考摘要单词总数}

在上述例子中, R e c a l l = 6 6 = 1 Recall=\frac{6}{6}=1 Recall=66=1,这意味着所有在参考摘要中的单词都被预测出来了。

但是只有Recall这么一个评价指标是不够的,因为参考摘要可以非常长,这样就会导致为了覆盖所有参考摘要的单词而使得系统摘要预测出很多没有用的单词,从而产生没有必要的冗余。

Precision意味着“系统摘要中到底有多是必要的”,计算公式为 被 覆 盖 的 单 词 数 量 系 统 摘 要 单 数 总 数 \frac{被覆盖的单词数量}{系统摘要单数总数}

在上述例子中, P r e c i s i o n = 6 7 = 0.86 Precision=\frac{6}{7}=0.86 Precision=76=0.86,这意味着在系统摘要中有6/7个单词是与事实相关的,或者说是必要的。

系统摘要2: the tiny little cat was found under the big funny bed

对于系统摘要2, P r e c i s i o n = 6 11 = 0.55 Precision=\frac{6}{11}=0.55 Precision=116=0.55

通常对于Precision和Recall,还需要计算F1值来表示综合的性能。

ROUGE-N

例如,ROUGE-1表示系统摘要和参考摘要之间的单个单词组合重叠。 ROUGE-2表示系统摘要和参考摘要之间的双单词重叠。 让我们从上面举个例子。 假设我们要计算ROUGE-2精度和召回得分。

系统摘要(机器预测的摘要):the cat was found under the bed

参考摘要:the cat was under the bed

系统摘要的双单词:

the cat, 
cat was, 
was found, 
found under, 
under the, 
the bed

参考摘要中的双单词:

the cat, 
cat was, 
was under, 
under the, 
the bed

所以ROUGE-2 recall为 R e c a l l = 4 5 = 0.8 Recall=\frac{4}{5}=0.8 Recall=54=0.8,precision为 P r e c i s i o n = 4 6 = 0.67 Precision=\frac{4}{6}=0.67 Precision=64=0.67

ROUGE-N - 评价指标 unigram, bigram, trigram 和更高的 n-gram 重叠来计算。

ROUGE-L

L即是LCS(longest common subsequence,最长公共子序列)的首字母,因为Rouge-L使用了最长公共子序列。

使用LCS的一个优点是,它不需要连续匹配,但是需要按顺序进行匹配,以反映句子级别的单词顺序。 由于它自动包含最长的顺序公共n-gram,因此不需要预定义的n-gram长度。

计算公式如下:

R R O U G E − L = L C S ( 系 统 摘 要 , 参 考 摘 要 ) 参 考 摘 要 单 词 总 数 R_{ROUGE-L}=\frac{LCS(系统摘要,参考摘要)}{参考摘要单词总数} RROUGEL=LCS()

P R O U G E − L = L C S ( 系 统 摘 要 , 参 考 摘 要 ) 系 统 摘 要 单 词 总 数 P_{ROUGE-L}=\frac{LCS(系统摘要,参考摘要)}{系统摘要单词总数} PROUGEL=LCS()

F 1 R O U G E − L = 2 R R O U G E − L P R O U G E − L R R O U G E − L + P R O U G E − L F1_{ROUGE-L}=\frac{2R_{ROUGE-L}P_{ROUGE-L}}{R_{ROUGE-L}+P_{ROUGE-L}} F1ROUGEL=RROUGEL+PROUGEL2RROUGELPROUGEL

参考链接

http://text-analytics101.rxnlp.com/2017/01/how-rouge-works-for-evaluation-of.html

以下是一个简单的 rouge-N Python 实现: ``` from nltk import ngrams from collections import Counter def rouge_n(ref, hyp, n): ref_grams = ngrams(ref.split(), n) hyp_grams = ngrams(hyp.split(), n) ref_counter = Counter(ref_grams) hyp_counter = Counter(hyp_grams) intersection = sum((ref_counter & hyp_counter).values()) union = sum((ref_counter | hyp_counter).values()) return intersection / union ``` 这个函数接受三个参数:参考文本 (ref)、候选文本 (hyp)、N-gram 的大小 (n)。 函数首先将参考文本和候选文本分别进行 N-gram 分割,并使用 Counter 函数计算每种 N-gram 的出现次数。 然后,函数计算交集和并集,并返回相应的 Rouge-N 。 你可以通过在函数中调用这个函数即可计算 Rouge-N。例如,计算句子 "The quick brown fox jumps over the lazy dog" 和 "The quick brown fox jumps over the quick dog" 的 Unigram Rouge-N 是: ``` ref = "The quick brown fox jumps over the lazy dog" hyp = "The quick brown fox jumps over the quick dog" rouge_1 = rouge_n(ref, hyp, 1) print("Rouge-1: ", rouge_1) ``` 输出: ``` Rouge-1: 0.8095238095238095 ``` 这个函数的优点是:它简单明了,易于理解和使用,你可以很容易地扩展到 Rouge-N+ 或移除停止词等功能。 缺点是:这个函数没有考虑词序关系,不太适用于一些需要考虑词序的 NLP 任务。另一个问题是它使用了 NLTK 和 collections 库,如果你的数据规模很大,你可能需要考虑效率问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值