ROUGE是由微软亚洲研究院知识挖掘组(The Knowledge Mining group at Microsoft Research Asia)调研经理(research manager) Chin-Yew Lin 研发的,用于摘要的自动评价,通过比较机器自动生成的摘要(called system_summary)与人工生成的摘要(called model_summary, 认为它是理想的)中重叠单元的数量,来评价机器自动生成的摘要。该方法中考虑的重叠单元有n-gram, word sequences, word-pairs等,并提出了四个测量标准ROUNG-N, ROUNG-L, ROUNG-W, ROUNG-S [1]。
该包用Perl语言编写,目前版本为ROUGE-1.5.5。
获取方法:
去 http://www.berouge.com/Pages/default.aspx ,点击Download ROUGE,填写申请,几小时后会收到有下载链接的地址。
安装要求:
1. 需要安装perl解释器(ubuntu 系统已自带, 通过perl -v可查看当前版本);
2. 需要额外安装perl解释器的XML::DOM模块以及DB_File模块;
3. 设置系统环境变量ROUGE_EVAL_HOME为/path/to/ROUGE-1.5.5/data
pyrouge是将ROUGE包装成python可运行的一个python包,即通过安装pyrouge可以用python的语法调用ROUGE.
获取方法:
直接运行pip install pyrouge
安装需求:
需提前安装好ROUGE
转至VMWare搭建的ubuntu15.04虚拟机上配置,安装步骤及出现问题如下:
方法1(windows通用):
去网址 https://bootstrap.pypa.io/get-pip.py 将网页另存为至桌面, 按Ctrl + Alt + T调出Terminal对话框(windows的话是调出命令行)后运行如下代码
$ cd /Desktop %%%切换运行目录至桌面
$ python get-pip.py %%%用python编译运行
方法2(windows通用):
如果装有easy install, 则:
$ easy_install pip
方法3(Debian和Ubuntu):
$ sudo apt-get install python-pip
注:ubuntu 自带 python2.7, windows 则需要手动安装python,且windows安装完pip后要在Path系统环境变量中添加 /path/to/Python2.7/Scripts/
\$ tar -xf ROUGE-1.5.5.tar.gz
\$ sudo wget http://www.cpan.org/authors/id/P/PM/PMQS/DB_File-1.835.tar.gz
\$ sudo tar -zxvf DB_File-1.835.tar.gz
\$ cd DB_File-1.835
\$ perl Makefile.PL
\$ make
\$ make test # if %%%看到PASS为成功
\$ sudo make install
\$ sudo cpan install XML::DOM
\$ sudo gedit etc/profile %%%这样对所有用户都有效,若希望仅对当前用户有效则输入sudo gedit ~/.profile
export ROUGE_EVAL_HOME=“$ROUGE_EVAL_HOME:/usr/local/ROUGE-1.5.5/data"
(3)中第五步的make指令出错为DB_File.xs:101: db.h: No such file or directory,说明未安装Berkeley DB library,或安装不正确。解决方法:如下
$ sudo apt-cache search libdb %%%这条命令用于检查当前Berkeley DB library 的版本
得到结果如下:
故当前版本为libdb5.3, 执行如下指令即可:
$ sudo apt-get install libdb5.3-dev
$ pip install pyrouge
pyrouge_set_rouge_path /usr/local/ROUGE-1.5.5
$ python -m pyrouge.test
Ran 10 tests in 18.055s
OK
(3)运行后报错如下:
debug过程及解决方法:
查看 “/usr/local/lib/python2.7/dist-packages/pyrouge/tests/Rouge155_test.py” 文件218行为:
pyrouge_output = check_output_clean(pyrouge_command)
该文件17行为:
check_output_clean = lambda c: check_output(c).decode("UTF-8").strip()
其中c即为pyrouge_command,作为参数传给check_output,而check_output为
from subprocess import check_output
subprocess是python2.7的文件(/usr/lib/python2.7/subprocess.py),与pyrouge无关,可见check_output与subprocess应该没有问题,问题应该出在pyrouge_command传递的参数上。自Rouge155_test.py文件可知pyrouge_command来自:
command_part1 = (
"pyrouge_evaluate_plain_text_files.py -m {} -s {} -sfp "
"D(\d+).M.100.T.A -mfp D#ID#.M.100.T.[A-Z] -id 1 -rargs".format(
model_dir, system_dir))
command_part2 = [
"\"-e {data} -c 90 -2 -1 -U -r 1000 -n 2 -w 1.2 "
"-a -m {xml}\"".format(
data=rouge.data_dir, xml=config_file)]
pyrouge_command = command_part1.split() + command_part2
在这些代码下方添加如下两行代码并保存,用于打印pyrouge_command (若不能保存,可能是文件权限或者编辑器的问题,更改Rouge155_test.py文件权限为’666’, 若还不可以保存,换个编辑器试试,我之前用gedit就不可以保存,换了notepad以后就可以了 )。
print('hello world')
print(pyrouge_command)
terminal中重新运行python -m pyrouge.test
,观察输出为:
hello world下整个list内容都是pyrouge_command,打算计划逐项检查。
第一项为’pyrouge_evaluate_plain_text_files.py’。看该项后缀,判断应该是一个python源文件,在整个硬盘中检索pyrouge_evaluate_plain_text_files.py,未找到。
在Terminal下直接运行pyrouge_evaluate_plain_text_files.py
,或用python解析运行python pyrouge_evaluate_plain_text_files.py
, 都不行。可以判断,应该是这一项导致test_options( )运行出错。
仔细阅读Rouge155_test.py文件中其他检测正确的函数,发现同样存在 ‘pyrouge_evaluate_plain_text_files’, 如 在函数’test_rouge_for_plain_test(self)’中,第170行,奇怪的是没有后缀 ‘.py’,这个函数却正常运行了,所以猜测是否是源代码出错了?
尝试在Terminal下运行pyrouge_evaluate_plain_text_files
,竟然神奇的发现,可以运行:
由此更加确定了源代码出错的猜测.
回到Rouge155_test.py文件中,修改第208行(test_options(self)函数中)如下:
"pyrouge_evaluate_plain_text_files -m {} -s {} -sfp "
同理对于test_write_config( )函数报错,修改Rouge155_test.py文件第192行如下:
"pyrouge_write_config_file -m {m} -s {s} "
再次运行python -m pyrouge.test
,终于看到了OK!!!困扰我一个周的问题,竟然是pyrouge代码本身的问题!!OMG!!
2015.10.13 尝试在Windows下配置pyrouge失败,原因在于ROUGE-1.5.5使用WinRAR无法完全解压。用虚拟机解压后也无法拷贝过来。日后继续研究。
[1]. Chin-Yew Lin. ROUGE: A Package for Automatic Evaluation of Summaries. In Proceedings of Workshop on Text Summarization Branches Out, Post-Conference Workshop of ACL 2004, Barcelona, Spain.