文本生成:自动摘要评价指标 Rouge

Rouge的全名是Recall-Oriented Understudy for Gisting Evaluation,单看名字就会发现Rouge是由召回率演变而来的指标,用于衡量模型生成摘要文本的质量。我们常说的Rouge其实是一组评价指标的统称,包含Rouge-N, Rouge-L, Rouge-W, Rouge-S四个指标,它们的计算方式和适用场景有所不同。本文首先介绍了它们各自的适用场景和计算方式,并给出了简洁可用的代码示例,最后写下了一点个人思考。

  • 单文档摘要任务中, ROUGE-2, ROUGE-L, ROUGE-W, 以及 ROUGE-S表现很好
  • 在短摘要/标题式摘要任务中, ROUGE-1, ROUGE-L, ROUGE-W,
    ROUGE-SU4, 以及 ROUGE-SU9表现很棒
  • 在多文档摘要任务中,当停用词被排除在匹配之外时, ROUGE-1, ROUGE-2, ROUGE-S4, ROUGE-S9, ROUGE-SU4, 以及 ROUGE-SU9表现不错
  • 排除停用词通常能改善相关性评估
  • 使用多个reference(ideal 摘要)可以改善相关性评估。

n-gram召回率,Co-Occurrence Statistics

rouge-n = pred与ideal的n-gram重叠数量 ideal的n-gram数量 \text{rouge-n}=\frac{\text{pred与ideal的n-gram重叠数量}}{\text{ideal的n-gram数量}}rouge-n =ideal 的n-gram 数量pred 与ideal 的n-gram 重叠数量​

分母是ideal字符串的n-gram个数,因为Rouge更关心recall值。(而BLEU更关心precision值)

简单地说, Rouge-n统计了pred和ideal两个字符串的n-gram重叠单元的数量,并计算了重叠单元在ideal字符串中的占比,作为召回率。

以短摘要/title摘要任务为例:
ideal摘要:”武汉长江大桥”
pred摘要:”武汉市长江大桥”

N-gram摘要内容单元数量Rouge-N1-gram武 / 汉 / 长 / 江 / 大/ 桥

武 / 汉 / 市 / 长 / 江 / 大/ 桥ideal:6

重叠:6

2-gram武汉 / 汉长 / 长江 / 江大 / 大桥

武汉 / 汉市 / 市长 / 长江 / 江大 / 大桥ideal:5

重叠:4

注:如有多个ideal摘要,怎么计算?
分别计算每个ideal摘要和pred摘要的Rouge值,并取其中最大值,作为当前pred摘要的Rouge值。
rouge-n m u l t i = a r g m a x i {rouge-n ( i d e a l i , p r e d ) } \text{rouge-n}_{multi} = argmax_i \text{{rouge-n}(ideal_i, pred)}rouge-n m u l t i ​=a r g m a x i ​{rouge-n (i d e a l i ​,p r e d )}

最长公共子序列,Longest Common Subsequence(LCS)

  • LCS和最长公共子串不同,不要求连续,保序即可
  • Rouge-N 只关注匹配单元的数量,像词袋一样,不关注词序
  • Rouge-L 关注词序

R l c s = l c s 长 度 i d e a l 字 符 串 长 度 , P l c s = l c s 长 度 p r e d 字 符 串 长 度 , F l c s = ( 1 + β 2 ) R l c s P l c s R l c s + β 2 P l c s R_{lcs} = \frac{lcs长度}{ideal字符串长度}, P_{lcs}=\frac{lcs长度}{pred字符串长度}, F_{lcs}=\frac{(1+\beta^2)R_{lcs}P_{lcs}}{R_{lcs}+\beta^2P_{lcs}}R l c s ​=i d e a l 字符串长度l c s 长度​,P l c s ​=p r e d 字符串长度l c s 长度​,F l c s ​=R l c s ​+β2 P l c s ​(1 +β2 )R l c s ​P l c s ​​

注:lcs经过了去重

以文档摘要任务为例:
ideal摘要:”矿泉水和纯净水的所含物质不同”
pred摘要:”矿泉水含有丰富的矿物质元素,纯净水不含矿物质”

-摘要内容lcs内容Rouge-L句子1ideal:

和纯净水

pred:

含有丰富

句子2ideal:矿泉水和

pred:

合并去重ideal长度: 14

pred长度: 21

lcs长度:10

from rouge import Rouge

pred = '武汉市长江大桥'
ideal = '武汉长江大桥'

pred, ideal = ' '.join(pred), ' '.join(ideal)

rouge = Rouge()
rouge_scores = rouge.get_scores(hyps=pred, refs=ideal)

结果如下

>>> pred
'武 汉 市 长 江 大 桥'
>>> ideal
'武 汉 长 江 大 桥'
>>> rouge_scores
[{'rouge-1': {'r': 1.0, 'p': 0.8571428571428571, 'f': 0.9230769181065088},
'rouge-2': {'r': 0.8, 'p': 0.6666666666666666, 'f': 0.7272727223140496},
'rouge-l': {'r': 1.0, 'p': 0.8571428571428571, 'f': 0.9230769181065088}}]
from rouge import Rouge
import jieba

pred = '武汉市长江大桥'
ideal = '武汉长江大桥'

pred = ' '.join(jieba.cut(pred, HMM=False))
ideal = ' '.join(jieba.cut(ideal, HMM=False))

rouge = Rouge()
rouge_scores = rouge.get_scores(hyps=pred, refs=ideal)

结果如下,

>>> pred
'武汉市 长江大桥'
>>> ideal
'武汉长江大桥'
>>> rouge_scores
[{'rouge-1': {'r': 0.0, 'p': 0.0, 'f': 0.0},
'rouge-2': {'r': 0.0, 'p': 0.0, 'f': 0.0},
'rouge-l': {'r': 0.0, 'p': 0.0, 'f': 0.0}}]

word粒度的Rouge计算有两个缺点:

  • 受jieba分词的影响,分词错误就会评估错误。
  • 降低了长词的重要性,这样一来,模型更倾向于拟合容易预测的短词。

word粒度的Rouge也有明显的优点:

  • 更好地评估模型对专有名词的拟合程度。

在苏神的文章中,看到了一个结合了字粒度Rouge和词粒度Rouge各自优点的方法,简单来说,还是以词为匹配单位,把词的长度作为权重,为Rouge做一个加权即可。比如上文的”武汉长江大桥”,如果匹配对了,就给6分,而不是1分。这个方法需要自己实现Rouge计算函数。

Original: https://blog.csdn.net/GJ_0418/article/details/120944646
Author: SunnyGJing
Title: 文本生成:自动摘要评价指标 Rouge

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/548491/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球