rouge与pyrouge使用事项

1.rouge介绍

ROUGE评价方法与pyramid,BLUE方法一起作为评价自动摘要质量的内部评价方法的三大中流砥柱。

  • ROUGE:recall-oriented understand for gisting evalution
  • 2004年,Chin-Yew Lin 提出
  • 基本思想
    由多个专家分别生成人工摘要,构成标准摘要集,将系统生成的自动摘要与人工生成的标准摘要相比较,通过统计二者之间重叠的基本单元(n元语法,词序列和词对)的数目,来评价摘要的质量。通过多专家人工摘要的对比,提高评价系统的稳定性和健壮性。
    这个方法已经成为评价摘要技术的通用标准之一。

2.评价标准

  • ROUGE-N
  • ROUGE-L
  • ROUGE-S
  • ROUGE-W
  • ROUGE-SU

3. ROUGE-N(N-gram Co-Occurrence Statistics)

  • N-gram模型


    n-gram模型.png

句子S由词序列[图片上传失败...(image-a49417-1542860196809)]组成,计算句子S出现的概率 [图片上传失败...(image-31d2bd-1542860196809)])最简单,最直接的方法是计数后做除法,也就是最大似然估计(MLE),但是这样做会面临数据稀疏严重和参数空间巨大的问题,导致无法实用。于是一般采用n-gram模型,n-gram模型基于马尔科夫假设,他认为,一个词的出现仅仅依赖于他前面出现的有限的一个或者几个词。


rouge-n介绍.png

其中分母是n-gram的个数,分子是参考摘要和自动摘要共有的n-gram的个数。举例说明一下:

自动摘要Y(一般是自动生成的):
the cat was found under the bed
参考摘要,X1 (gold standard ,人工生成的):
the cat was under the bed
summary的1-gram、2-gram如下,N-gram以此类推:



rouge_1(X1,Y)= 6/6=1.0,分子是待评测摘要和参考摘要都出现的1-gram的个数,分子是参考摘要的1-gram个数。(其实分母也可以是待评测摘要的,但是在精确率和召回率之间,我们更关心的是召回率Recall,同时这也和上面ROUGN-N的公式相同)
同样,Rouge_2(X1,Y)=4/5=0.8

4. ROUGE-L




image.png


5.ROUGE-W

ROUGE-W是ROUGW-L的改进版,例如下面这种情况



图中,X 是参考文摘,Y1,Y2是两个待评测文摘,明显Y1 要优于Y2 ,因为Y1 可以和参考摘要X 连续匹配,但是Rouge_L(X,Y1)=Rouge_L(X,Y2) ,针对这个问题论文作者提出了改进的方案—加权最长公共子序列(Weighted Longest Common Subsequence)。



6.ROUGE-S

即使用了skip-grams,在参考摘要和待评测摘要进行匹配时,不要求gram之间必须是连续的,可以“跳过”几个单词,比如skip-bigram,在产生grams时,允许最多跳过两个词。比如“cat in the hat”的 skip-bigrams 就是 “cat in, cat the, cat hat, in the, in hat, the hat”.

7.总结

8.rouge与pyrouge的安装

使用pyrouge前,需要安装好rouge.
下面两个链接有相应的安装工具和教程

https://blog.csdn.net/qq_32458499/article/details/78994388

https://blog.csdn.net/Hay54/article/details/78744912

注意:Github上的ROUGE已经不可以用了。

9.使用

def rouge(ref, hyp, log_path):
    assert len(ref) == len(hyp)
    ref_dir = log_path + 'reference/'
    cand_dir = log_path + 'candidate/'
    if not os.path.exists(ref_dir):
        os.mkdir(ref_dir)
    if not os.path.exists(cand_dir):
        os.mkdir(cand_dir)
    for i in range(len(ref)):
        with codecs.open(ref_dir+"%06d_reference.txt" % i, 'w', 'utf-8') as f:
            f.write(" ".join(ref[i]).replace(' ', '') + '\n')
        with codecs.open(cand_dir+"%06d_candidate.txt" % i, 'w', 'utf-8') as f:
            f.write(" ".join(hyp[i]).replace(' ', '').replace('<unk>', 'UNK') + '\n')

    r = pyrouge.Rouge155()
    r.model_filename_pattern = '#ID#_reference.txt'
    r.system_filename_pattern = '(\d+)_candidate.txt'
    r.model_dir = ref_dir
    r.system_dir = cand_dir
    logging.getLogger('global').setLevel(logging.WARNING)
    rouge_results = r.convert_and_evaluate()
    scores = r.output_to_dict(rouge_results)
    recall = [round(scores["rouge_1_recall"] * 100, 2),
              round(scores["rouge_2_recall"] * 100, 2),
              round(scores["rouge_l_recall"] * 100, 2)]
    precision = [round(scores["rouge_1_precision"] * 100, 2),
                 round(scores["rouge_2_precision"] * 100, 2),
                 round(scores["rouge_l_precision"] * 100, 2)]
    f_score = [round(scores["rouge_1_f_score"] * 100, 2),
               round(scores["rouge_2_f_score"] * 100, 2),
               round(scores["rouge_l_f_score"] * 100, 2)]
    print("F_measure: %s Recall: %s Precision: %s\n"
              % (str(f_score), str(recall), str(precision)))
    
    with codecs.open(ref_dir+"rougeScore", 'w+', 'utf-8') as f:
        f.write("F_measure: %s Recall: %s Precision: %s\n"
              % (str(f_score), str(recall), str(precision)))
    return f_score[:], recall[:], precision[:]

首先记得:import pyrouge
这里的ref是生成的摘要,hyp是系统参考摘要
regerence文件夹下,文件名为reference00.txt, 00代表数字编号

一定要记住
文件中都是一行一个句子!。
TXT文件中好像不允许出现'<'符号,例如'<unk>',如果有可能会报错!

参考

https://blog.csdn.net/lime1991/article/details/42521029
https://blog.csdn.net/qq_25222361/article/details/78694617

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 转载自http://www.cnblogs.com/Determined22/ 两周以前读了些文档自动摘要的论文,...
    nightwish夜愿阅读 10,555评论 0 6
  • 分手时 没什么情景。 只是我这么多年一直在想,一个人想分手,另一个人说不同意。 说我不同意到底有什么用呢。
    木卯丁阅读 168评论 3 1
  • 美娜美阅读 82评论 0 1