文档库 最新最全的文档下载
当前位置:文档库 › 本科生毕业论文_6-56

本科生毕业论文_6-56


本科生毕业论文
题目:基于PARADISE平台论文检索系统
Literature Search Design based on PARADISE
姓 名: 李峰
学 号: 00548193
院 系: 信息科学技术学院
专 业: 计算机科学与技术系
指导教师: 闫宏飞 副教授

二〇一三年四月三十日



摘要:
本文基于天网实验室的Platform for Applying, Researching And Developing Intelligent Search Engine (PARADISE)搜索引擎平台,通过以从https://www.wendangku.net/doc/8718277791.html,抓取的计算机网络方向的2500多篇论文为数据,搭建成一个论文搜索系统,最终目的是通过论文之间的引用关系,获得其他引用这篇论文的作者对这篇论文的评价,形成一个小的评价段落,以及Impact-based Summaries,从而使得我们能够从专业级的角度获得这篇论文的内容以及优劣。我们首先根据https://www.wendangku.net/doc/8718277791.html,上面抓取了文章之间的引用关系,然后通过一个算法获得了对一篇文章评价的候选句子集,根据这些句子的重要程度进行排序,获得一个评价短文。并且构建了一个语言模型,通过这些候选句子集对原文的句子进行评分,取得分最高的几个句子,获得原文基于影响的概括。

关键词
搜索引擎, 论文评价, 语言模型, KL-divergence算法, 基于影响的概括




Abstract
In this paper, based on the PARADISE (Platform for Applying, Researching and Developing Intelligent Search Engine) and the data of 2500 paper in area of computer network, we construct a search engine of papers. Our goal is to get the comment and impact-based summaries of one paper based on the reference relations between the papers. We firstly get candidate sentence which comment on the previous paper and generate a citation context. Then we construct a Language Model, through the citation context, we can score the sentence in the previous paper, and get the impact-based summaries.


Key words
Search Engine, Paper Comment, Language Model, KL-divergence Scoring, Impact-based Summaries



目录
第1章 引言 1
1.1研究背景 1
1.2工作内容 2
1.2.1抓取所需要的论文数据 2
1.2.2获得一篇论文的评价并较好的显示出来 2
1.2.3获得一篇论文基于影响的总结段落 3
1.2.4基于PARADISE平台搭建搜索平台 3
1.3实验的意义 3
第2章 数据的收集 5
2.1如何提取数据 5
2.2数据抓取的过程 6
2.3数据的存储及解析 7
第3章 生成评论集 10
3.1获得评价的候选句子集 10
3.2获得评论段落 11
第4章 建立模型并生成基于影响的概括 13
4.1建模之前我们所有的数据 13
4.2建模算法 13
4.3算法的实现 14
4.4获得基于影响的概括 15
第5章 搭建搜索引擎 16
5.1 paradise结构简介 16
5.2修改索引部分 17
5.3修改前台部分 18
5.4系统示意图 19
5.4.1主界面 19
5.4.

2搜索结果界面 20
5.4.3评论界面 21
第6章 实验结果与分析 22
6.1实验结果 22
6.2具体分析 22
第7章 后续工作 26
第8章 致谢 27




第1章 引言
1.1研究背景
如今,全世界范围内学术活动日益积极,所产生的论文也在不断增多,因此,如何搜索到自己所需要的论文,以及自动获取一些关于论文的信息,是客观需要的。学术检索,绝不简简单单的检索出所要查找的论文,这样就和普通的通用搜索引擎如google等一样了。学术检索,更侧重于深层次的内容挖掘。
例如,可以通过一篇论文所引用的文章以及所属领域,寻找出这个文章所在领域的主要论文,这对了解一篇论文的背景知识以及理解一个领域的发展非常重要。在[1]1(L. Gwenn Volkert)中提到了文献检索现在主要的发展方向,有以下几点:1.提高检索的质量,这是从语言模型的角度,让人们更加准确的找到所需要的论文。2.找到相关领域的最主要论文,以及一些较 权威的作者,帮助读者了解相关知识。3.从reference和citation角度,挖掘出一些知识,最常见的,就是通过一篇论文的被引用次数确定它的 排名以及影响力。
我们知道,国外的PHD学生在第一年的学习之后都是要通过QE考试的,考试的形式一般是先读几十篇论文,然后根据这些论文的内容进行一些答辩。这时候,他们往往很想知道别人是如何评价这篇论文的,这篇论文有什么优点和缺点,有什么后续的研究等等。这就像我们准备去一个地方去旅游,不仅需要该景点本身的介绍(有点类似于摘要),往往更想知道去过这个地方的人都是如何评价这些地方的。通过对这篇论文的评价,我们可以从更专业并且更加广阔的角度获得这篇论文的一些信息,并且可以知道这篇论文之后可以做哪些事情。
基于上面的观点,我们就准备做出这样一个知识提取系统,通过这个系统,可以自动获得别人对这篇论文的评价[2]2,以及论文中的一些较有影响力的信息,从而帮助人们更好的理解这篇论文。整体流程如[图表 1]。
在[3]3(Qiaozhu Mei, ChengXiang Zhai)中,作者利用KL-divergence算法建立了一个模型,生成了一篇论文基于影响的概括,但是它并没有强调评论的重要性(这里的评论,是指别的作者对它引用的一篇文章的评 论),它只讲评论当成一个中间状态,当成一个求得基于影响的概括的手段。实际上,这些评论和最终经过KL算法形成的概括是同等重要的,有时候,它甚至比后者更加清晰易懂。本文相对于[3]3的优点是,赋予评论以及概括同等重要的意义,并且形成了一个实际的系统供人使用,而不仅仅是用于研究。

1.2工作内容
1.2.1

抓取所需要的论文数据
要进行论文搜索,首先需要一批实验数据,我是从https://www.wendangku.net/doc/8718277791.html,上抓取下来的。之所以选择从这上面抓取,是因为我们不仅需要论文的pdf文档,还需要从中自动提取摘要、引用等信息,而这本身就应该是一个挺复杂的算法了,而且不是我们工作的目的,而上述网站已经人工的将论文的摘要、引用信息提取了出来,并且对于每一个引用还有相应的链接,因此会节省我们抓取数据所要花费的工作量。最终我们会将抓取的数据存储在BerkeleyDB中。
1.2.2获得一篇论文的评价并较好的显示出来
我们这个系统的主要工作是通过别的论文对原论文的评论,来获得一些不能直接从原论文中获得的信息,因此,最基础的,就是如何获得这些评论。关于这一点,我们通过上面的数据收集工作,会获得一个论文之间的引用图,然后通过引用的倒置,能够获得引用一篇论文的所有文章,然后,通过一个算法,可以从这些文章中提取出对原文进行评价的句子。最终,为了便于使用者观看,还需要对这些句子进行一些整理,进行排序、整理成一个段落出来。
1.2.3获得一篇论文基于影响的总结段落
在获得对原文进行评论的句子之后,将原文划分成一个一个的句子,我们利用了KL-divergence算法([3]3),对这些句子进行打分,这里分数的高低,代表了原文中每一个句子影响程度的高低,显然,影响越大的句子,在别的文章中提及的越多,其分数就越高。最后,我们取一定数量得分最高的句子,组成一个段落,这个段落是对原文的一个概括,而且会获摘要所不能获得一些信息的一些信息。
1.2.4基于PARADISE平台搭建搜索平台
我们基于PARADISE搜索引擎平台搭建成了一个关于pdf的全文搜索系统。 PARADISE由预处理,简历索引,检索,前台四部分组成。由于我们的数据是论文,并且已经转化为了txt文本格式,预处理这一部就略去了,需要继承一个建立索引的类,并且修改一些前台的接口就可以了,这样就搭建成了一个论文搜索系统。这一过程也体现出了paradise的可扩展性以及易用性,paradise中的每一个组件都是可以通过继承一个自定义的新类来完成的,其中包括预处理、索引、检索、语言模型、排序、压缩等等所有的模块都可以自己选择或者自己重新定义来完成。
1.3实验的意义
我们在读一篇论文之前,一般能简单的看到它的摘要、作者等信息。而在读完一篇论文之后,我们能获得什么信息呢?主要有以下几种:
(1) 这篇文章做了什么事情,这可以从摘要中获得。
(2) 这篇文章中涉及到的核心算法,这个只有在细致的读完了这篇文章之后才

能理解,应该是没法依靠辅助来获得的。
(3) 这篇文章哪些部分比较重要,哪些部分比较好,哪些部分需要改正,我们可以从哪些方向进行扩展。
对于第三点,如果完全自己理解,可能会比较困难,而且对读者自己的要求也比较高,可能要读了很多这方面的背景知识、后续论文等等才可能获得,而通过我们做的这个系统,就可以帮助大家更简单的获得一些从文章中不能直接获得信息。
一般来说,作者如果想从自己的角度归纳本文的大体内容,通过阅读摘要,我们可以看到作者写这篇文章大体做了什么。但是文章中很有可能有一些作者没有发现,或者作者当前没有重视但是以后被别人发掘出来很重要的意义。通过将那些对文章进行引用的句子,与本文建模,对原文中的句子进行排序,从而获得文章中一些有特殊意义,影响较大的句子,这样,我们可以获得文章中最重要的信息,而这些重要信息和摘要的区别就是,它们不是作者提出来的,而是别的作者在读了这篇文章以及其他的文章,经过很多思考之后,总结出来的这篇文章最重要的地方。
此外,别的文章中对原文进行评论的句子([4]4),本身就是很重要的信息,可以让我们知道原文都做了那些后续工作,或者那些部分比较好,哪些部分需要改正。
简单来说,我们这个系统的意义,就是通过数据挖掘的方法,获得一些直接从原论文很难发现的信息,并且结合paradise系统,以搜索引擎的方式呈现出来,便于大家检索查找。




第2章 数据的收集
我们这个系统的目的是为了方便读者理解论文,因此除了需要基本的论文的pdf格式,还需要提取发表期刊、作者、摘要、被应用次数,引用文章这些信息。其中,发表期刊、作者以及被引用次数是用来在后面获得comment以及impact-based summary进行排序的时候加权用的,显而易见,较好的期刊,较有名的作者,引用次数较高的文章,它做出的评价应该要重要一些(当然,这里只是预留着为以后的扩展用,而我们的系统实际上并没有用到作者的知名度信息)。当然,其中最重要的是提取引用的信息。我们的目标是通过获得每篇文章所引用过的文章,建立一个映射表,然后将映射表倒置过来,从而获得每篇文章被哪些文章引用过。
2.1如何提取数据
首先,是如何提取文章的摘要等各种信息了。本来我是准备直接从文章中提取的,随着工作的深入,发现这样做有很多的缺点,首先,从paper中提取各种信息就是一个很繁重的工作,这本身就可以当做一个毕业设计来做了,会消耗我大量的时间,但却不一定能够达到工作的目的;其次,最重要的是,

在每一篇文章里,reference是以(作者,文章名,发表期刊,年份)的形式表现出来的,例如:
G. Luecke, H. Chen, J. Coyle, J. Hoekstra, M. Kraeva,and Y. Zou. MPI-CHECK: A tool for checking Fortran90 MPI programs. Concurrency and Computation:Practice and Experience, 15:93-100, 2003. 而我们存储每篇文章的时候,是以期刊作为文件夹,以文章作文文件名来存储的,例如这篇论文,以下面的形式存储的。
pdf/Concurrency_and_Computation:Practice_and_Experience/MPI-CHECK:_A_tool_for_checking_Fortran90_MPI_programs. 因此,我们需要从上面的那句话中提取会议名以及文章名,才能获得文章之间的引用关系,建立一个FromTo表,这之中甚至是相差一个空格都不行的,会直接导致整个系统的失败。
于是,我们想出了一个简单的办法。可以看到,在https://www.wendangku.net/doc/8718277791.html,上,每一篇论文的格式都是规整的,从上面可以很容易的提取出摘要、文章名、期刊等信息,可以下载到pdf版的文件;更重要的是,对于论文的引用信息,在该网页上该出了一个超链接,点击之后就可以进入引用的文章的信息。因此,可以利用递归的方法,进入引用的文章,从中提取出会议名以及文章名,这样,每篇文章的引用就可以形成上面的格式,并且是完全正确的,方便我们建立引用映射表。
接着,要设定递归的种子以及递归的层数。因为我们的实验所需要的数据最好是在一个领域里面的一个方向的论文,并且需要引用关系较紧密的,以便于后续的工作,因此,这里采用www会议的文章作为种子,对于每一篇文章递归三层。如果递归四层,就会太多了。假设一篇文章又十个引用,那么递归四层,就会导致没从www会议中抓取一篇文章,就需要抓取1000篇相应的其他文章,这个数量实在是太大了;如果递归两层,就会导致每篇文章只能抓取其引用的文章,这样引用的层次较浅,很有可能导致最后引用倒置时,每一篇文章只被一两篇文章引用,这样不利于我们的实验。
最后,我们需要将pdf转化为txt格式,这是利用linux自带的pdf2txt工具来实现的,但是这个工具并不支持对文件夹的递归操作,因此,我用python写了一个脚本,通过递归操作,可以将一个sourceDir里面的所有pdf文件递归转化为txt文件,并按照原来的相对路径存在destDir里面。
2.2数据抓取的过程
已经确定抓取数据的大体方法了,下面就要开始正式的抓取数据了。所用的工具比较简单,就是利用linux下的wget工具,将网页下载到文本文件里进行分析。另外我们这里利用了第三方库boost::regex,这种正则表达式非常适合从网页中进行模式匹配并且提取出数据。有了前面的两项工具,我们只需要分析好网

页的模式,尽量正确的提取数据既可以了,需要注意的是,由于网页并不是完全规整的,因此,有时候,对于同一个数据,往往要写多种匹配的公式才可以,这其中,最麻烦的当属提取引用部分了(我们不仅要提取引用,还要提取这个引用对应得url,从而递归进入提取它的论文名)。
以提取作者信息为例:
Yong Yu
我们需要从上面得公式中提取出作者名,需要以下几步:
(1) 利用boost regex公式写一个正则表达式匹配上面的文本
boost::regex ePaperAuthors(
"\\s*([^<>]*?)\\s*"
,boost::regex::normal |boost::regbase::icase);
其中引号中的内容为匹配的正则表达式,注意其中的一对小括号,其中的内容就是我们需要提取的信息
(2) 利用split函数,将结果存入list里面
list authors;
boost::regex_split(std::back_inserter(authors), content, ePaperAuthors);
这样,文章中所有匹配上面正则表达式的字符串,其中的作者信息(即上面括号中的内容),都会存在authors这个容器里面 还需要注意的一点就是,由于网页的不规整性,所以要排除一些错误的情况。还有一些文章,确实没有摘要、引用或者其他信息(这些文章多出现在引用链的顶层,主要是一些书籍等参考资料,所以也比较正常),遇到这些情况我们就不抓取下来了。
2.3数据的存储及解析
在将数据从网页下载下来之后,需要存储起来。首先,对于pdf的格式,只能存在文件系统里,按正常的方式存储。对于其他的信息,这里选择存储在berkeleyDB里面。berkeleyDB是一种轻量级的数据库,Mysql等数据库底层就是利用berkeleyDB来完成的。它的有点是可移动性,不用想Mysql那样搭建服务器,而且读取数据时较快。对于每一篇文章的基本信息metadata,按照【表格 1】中的形式存入berkeleyDB中:
表格 1
Key int64_t的一个整数 Value 字符流,存储元数据信息,按如下格式:
**************************************************name
**************************************************source
**************************************************abstract
**************************************************citationCount
**************************************************authors
**************************************************references
**************************************************referenceName
**************************************************url
获得这些基本信息之后,我们还要根据这些元信息,陆续建立一些berkeleyDB文件,用于存储其他信息,如[表格 2]:
表格 2
文件名 Key Value content.dpt int64_t的整数,论

文ID 这篇论文的全部文本内容 fromto.dpt int64_t的整数,论文ID 用于存储一篇论文所引用的所有文章 tofrom.dpt int64_t的整数,论文ID 用于存储一篇论文被哪些文章所引用 comment.dpt int64_t的整数,论文ID 存储最终要显示在页面上的文章的评价 summary.dpt int64_t的整数,论文ID 存储最终要显示在页面上的基于影响的文章的概括
其中content.dpt是通过将pdf格式转化为txt之后获得的。fromto.dpt是对整个论文的引用关系图进行解析获得的,从上面的元数据中,我们可以获得每个论文所引用的论文的名称,这样,我们可以通过这些名称,来获得这个论文所引用的所有论文的ID号,并且存储到数据库中。获得fromto.dpt之后,对其进行倒置,就可以获得tofrom.dpt的内容
这里之所以选择BerkeleyDB进行存储,是因为它有以下这些优点:
> 嵌入式(Embedded):它直接链接到应用程序中,与应用程序运行于同样的地址空间中,因此,无论是在网络上不同计算机之间还是在同一台计算机的不同进程之间,数据库操作并不要求进程间通讯。
> Berkeley DB为多种编程语言提供了API接口,其中包括C、C++、Java、Perl、Tcl、Python和PHP,所有的数据库操作都在程序库内部发生。对于我们这个系统,后台程序是由c++完成,而前台程序是由python完成,他们都会共同访问一些文件,通过存储在BerkeleyDB进行存储,就解决了不同语言之间兼容的问题。
> 轻便灵活(Portable):它可以运行于几乎所有的UNIX和Linux系统及其变种系统、Windows操作系统以及多种嵌入式实时操作系统之下。它并不需要搭建一个数据库服务器,以用户、服务器形式访问数据库,而是以函数调用的形式。一旦Berkeley DB被链接到应用程序中,终端用户一般根本感觉不到有一个数据库系统存在。这样提高了我们的系统的实用性,当用户需要自己搭建一个我们的论文系统时,不用再去搭建数据库服务器,进行各种繁琐的配置。


第3章 生成评论集
通过上面的内容之后,我们获得了所有基本的信息,其中,最重要的,获得了tofrom表,该表的key是一篇论文A的ID,value是引用A的所有论文ID的集合。下面我们就要结合前面获得的数据,包括论文的文本、元数据,来获得一篇论文的评论集。

3.1获得评价的候选句子集
通过tofrom表,我们可以获得一个集合 {B1,B2,B3...},其中Bi对A进行了引用。我们相信,如果Bi对A进行了引用,那么Bi中可能会有一些句子对A进行了评价。一般有以下几种情况:
(1) Bi中的句子出现了A的论文名
(2) Bi中的句子出现了A的作者名
(3) 在Bi的reference列表中,如果A出现在第k个位置,那么通常在文章中会利用"[k]"来对A进行引

用。
(4) .对于(3)的情况,有时候并不只是对k进行引用,可能文章中的一句话代表的是好几篇文章的工作概括,因此会出现"[i,k,j]"这种类型的符号来对A进行引用,而且出现的概率很高。
(5) (如果Bi中的某句话对A进行了评论,那么通常它的前一句话和后一句话也会出现评价的信息
通过上面的5点,我们就可以获得了Bi中对A进行评价的句子,从而获得了一个候选句子集,里面的每一句话都不同程度的对A进行了评价。
图表 2

如[图表 2]所示流程,具体实现的时候,先要将Bi按句子进行划分为一个句子序列{Bis1,Bis2,Bis3.....},然后遍历这个句子序列,对于每一个句子,按照上面的前四条规则进行评判,如果满足其中任意一条,则这个句子是候选句子集合中的一个,并将其前后两个句子也合到一起,添加的候选句子集合中。
最终,得到对A进行评论的候选句子集{e1,e2,e3...},这里面可能会有一些评价来自同一篇论文。
3.2获得评论段落
获得了候选句子集之后,我们需要对其进行适当的排序,从中选出较好的几个句子,最终显示在页面上。由于不同的人,对这篇论文的评价可能也不太一样,因此,就不能简单的按照这些评价句子与原文的相似度来进行打分排序了,因为这样会造成和原文观点相近的评分较高,不是我们希望获得的结果。实际上,有时候越是和原文的观点不同,反而可能越重要,它可能是对这篇文章的批判,也有可能是原文的作者并在写paper是并没有发现的一些问题,这对我们寻找后续工作时可能会非常重要。
我们在提取数据的同时,会获得每一篇文章的citation信息,代表这篇文章被引用的次数,一般,一个较好的文章,被引用的次数也应当比较多,因此,对于每一个评价,根据它所在文章的被引用次数进行排序,可以获得较为专业,也较为合理的结果。
同时,需要注意的是,如果一个篇论文的被引用次数很高,而且它又有两段评论原文的句子时,那么这两段会一起出现在最终的结果里,在这里我们就需要对结果进行调整,保证在权重相同的情况下,尽可能选择尽量不同的文章的评论。



第4章 建立模型并生成基于影响的概括
通过获得了对源论文的评论集合,下面就可以与源论文建立模型来获得基于影响的概括。所谓基于影响的概括,简单来说,就是某句话与评论之间的关系越紧密,那么这句话的影响力就越大。最终将影响力最大的几个句子合在一起,就形成了基于影响的概括。
4.1建模之前我们所有的数据
在建模之前,我们先来看看我们已经获得了哪些数据:
(1)所有论文集合D,以及D里所出现的所有单

词,构成一个单词表V,并且可以统计出每个单词w出现的次数C(w,D) (2)对于一篇论文d,将其划分为多个句子{s1, s2, s3......} (3)已经获得了这片论文进行评论的所有句子{e1, e2, e3......},把他们的集合成为C(Citation Context)。 下面,我们就可以参照KL-divergence算法([3]3,Qiaozhu Mei and ChengXiang Zhai),对d中的句子s进行打分。这里的打分,主要是基于词频以及相似度来做的。

4.2建模算法
首先,为任何一个句子打分的公式Score(s)如下:
从信息理论的观点,其中即为KL-divergence,可以被解释为通过句子s来表示基于影响的段落,需要从文章中删除的信息量。显然,其值越小,Score则越大,它也越能代表文章以及其他文章对它的评价的意思(因为它只要删除较少的信息)
可以看出,公式中最重要的是求出
对于公式(1),其中,表示一个单词w在句子s中出现的次数,表示单词w出现在所有论文空间中出现的概率,D为我们的整个论文空间。而为平滑参数。我们假设为|s|的n倍,则(1)式可以看成是,可见,越大,表示w与整个论文空间的关系越大,而与这个句子的关系则较少。W等于1时,则表示二者一样,各占1/2。我在这里将设置为了1。
对于公式(2),其中表示一个单词w在当前要求的这篇论文中出现的次数,而表示单词w在我们为这篇论文求出的评价句子的集合C中出现的概率。为平滑参数。我们仍然假设u为w的n倍,则(2)式可以看成,可见,n越大时,表示这个单词w与C的关系越大,而n小于1时,则与论文本身关系较大。可以看出,极端的情况,当n为0时,则w只与原论文有关系了,与我们获得的那些评价都没有关系了,因此获得的句子实际上对其他论文也没有什么影响了。因此,对于本实验,应当将n设置的越大越好。
4.3算法的实现
具体实现算法时,会出现一些问题:我们假设一篇论文可以划分成1000个句子,每个句子有20个不同单词,我们总共有2000篇论文,那就有4亿个单词。那么,对于每一个句子s,我们在进行上面的算法时,需要进行如下一步
这就需要对这4亿个单词进行遍历一遍,并且分别计算括号中的那一步。而每篇论文有1000个句子,就相当于要计算4000亿次,这个计算量对我们来说太庞大了,因此,我在这里选取了一个简便一点的方法,就是在上面的一步时,并不是对整个单词空间进行计算,而只是对论文d和评论集合C中出现的所有单词进行遍历计算打分。
可以看出,对于一个既不在d中又不在C中的单词, = 0.对结果也没有影响。因此,上面的公式只是理论的公式,具体应用时,只需要对d和C中出现的单词进行计算即可,这就节省了

大量的计算量。整个流程如[图表 3],需要用到[图表 2]中的前三部算法获得的评论列表。这里之所以不用[图表 2]的最终结果,是因为我们需要更多的信息,信息越多,获得的概括越具有影响力。
图表
4.4获得基于影响的概括
通过上面的模型,可以对A中的每个句子进行打分,然后根据所打得分数进行从打到小排序。这里因为每篇论文只有1000左右的句子,数量级并不是很大,就自己写了一个简单的冒泡排序算法来排序。之后,选择其中得分最高的k个句子,组合在一起,就获得了原文基于影响的概括了。从整个建模的过程中也可以看出,所谓基于影响,就是通过哪些对A进行评价的句子集C,分别获得Si与这些句子的相似程度,与其相似程度最高的,证明这个句子被其他作者提及的最多,影响最大。而这个概括与摘要的区别就是,影响较大的句子,可能原来的作者并没有想到,因此在摘要中并没有提及(正所谓无心插柳柳成荫);而摘要中提及的部分,影响可能反而没有那么大。

图表 3



第5章 搭建搜索引擎
本段内容主要介绍如何利用paradise搜索引擎平台来搭建我们的论文检索系统。通过这段内容,我们可以了解到paradise使用的基本过程,最终我们会发现,如果想搭建其他方向的搜索引擎,使用paradise也是非常方便的。
5.1 paradise结构简介
paradise系统,全称是Platform for Applying, Researching And Developing Intelligent Search Engine, 是网络实验室搜索引擎组耗时一年多开发的一个国家863项目,其目的是建立一个搜索引擎平台,将搜索引擎的各个部分模块化,使得这个搜索引擎不在针对专一 的某一个领域,而是可以针对各个领域。其功能有点类似于lucene系统,与其不同的是paradise是用c++编写的。paradiese有以下几大的模块,见[表格 3]
表格 3
analysis index search front_evidence (1)analysis是预处理模块,用于对网页进行去噪、消重以及编码转换等等处理,如果是对网页构建搜索引擎,这一步骤就可以省略了。
(2)index是索引模块,用于将需要检索的部分建立倒排索引。具体如何使用5.2会提到
(3)search是搜索模块,将index建成之后,就可以利用index数据开启搜索服务,对于每一个词,去倒排索引里面查找包含它的文档中的id号(网页中为url),从而完成检索。
(4)front_evidence是前台模块,完成一个类似于天网搜索引擎的前台界面。除了现实结果之外,还进行摘要处理,一个文档的摘要。这个地方需要注意的就是与index部分有一定的结合,会在后面提到。

除了以上4个大的模块之外,paradise还提供了很多可供选择以及继承修改的小模块
例如,

在search的语言模型这个部分,可以选择需要的模型,也可以自己重写一些语言模型。压缩的时候,可以选择vint、pfordelta等等各种压缩算法paradise系统接口设计得非常好,当需要对上面任何一个模块进行修改时,不需要修改源代码,只需要自己重写一些继承的类就可以了。

5.2修改索引部分
对于本次的文献检索部分,只需要继承一个索引部分的类就可以了,具体代码如下(这里只贴出最关键的两端代码,中间还省略了一些代码),其中黄色背景的是需要我们修改的部分。
void main(){
Analyzer* analyzer = new NaiveAnalyzer();
compressorFactory = new PForDeltaCompressorFactory();
IndexWriter * writer = new IndexWriter(fsdir, analyzer, compressorFactory);
writer->setMergeThreshold(mergesize);
PDFParser parser;
if (begin != 0) {
while (begin > 0) {
parser.hasNext();
begin--;}}
int doc_id = 1;
Timer t;
while (parser.hasNext()) {
shared_ptr pContent = parser.getContent();
addDocument(pContent, writer, doc_id);
if (num >= 0 && doc_id >= num) {
break;}}
} 在上面的这段代码中,可以看出,首先建立了一个分析模块,然后选择压缩方式为pfordata,然后建立一个IndexWriter,这个是建立索引的类。而我们需要做的事情,就是:
(1) 重写一个Parser类,这里的名称为PDFParser,这个parser需要有hasNext,getContent这两个函数即可。
(2) 重写一个Content类,里面存有所需要建立索引的document的内容,由上面的getContent类返回。
(3) 重写adddocument函数,如下,其中关键部分黄色背景标注
int addDocument(shared_ptr pContent,
IndexWriter* pWriter, int & doc_id) {
paradise::index::document::Document document;
shared_ptr field_content = Field::TextStatistics("Content");
shared_ptr field_content_data(new FieldData(pContent->getContentToken()));
field_content.get()->setFieldData(field_content_data);
document.addField(field_content, NONSTATIC);

shared_ptr field_ID = Field::Keywords("Url");
shared_ptr field_ID_data(new FieldData(PDFFunction::Int2Str(pContent->getID())));
field_ID->setFieldData(field_ID_data);
document.addField(field_ID, NONSTATIC);
...
document.setDocId(doc_id);
pWriter->addDocument(document);
doc_id++;
} 上面的代码中,首先建立一个Content域,内容为我们的文献全文形成的字符串。然后建立了一个url域。其中,url域及其重要,是必须有的一个域,而且必须名为Url。我们知道,所谓倒排索引,是指对一系列文本的内容简历索引,通过这些内容,可以获得这

些文本的ID号,就如网页搜索一样,我们通过那些网页的内容,搜索到网页的url。这里我们将文献的文本内容存在BerkeleyDB中的,因此需要获得每个文章的id号。
Paradise系统的设置是,在我们开启一个搜索服务时,一个请求发向服务器端之后,服务器端会将搜索到得结果的url列表返回给前端,这个url列表必须是来自上面的Url域。因为Paradise主要是针对网页搜索的,所以称这个域为Url,实际上应该叫DocumentID更确切一点。
5.3修改前台部分
Paradise的前台部分也设计的很好,特别是摘要算法也已经完成,因此对于前台部分,只需要修改一点,就是提供一个候选摘要的数据库。我们知道,不可能对整篇文章进行摘要算法,那样会耗费大量的时间,最终会导致前段所耗费的时间比后端检索所花费的时间还多,这显然是用户无法接受的。因此,前台部分唯一需要修改的部分,就是给定一个ID号,获得它的摘要。这里,我们利用了前面获得的metadata.dpt文件,里面存有一篇论文的摘要,获得摘要段落之后,对其利用摘要算法,可以获取较好的效果。
另外,我们这个系统不是简单的一个论文检索系统,检索只是方便使用的工具,更重要的,它是一个知识提取系统,因此,还需要自己编写一些界面用来显示知识,这些就不再赘述。

5.4系统示意图
5.4.1主界面

5.4.2搜索结果界面

5.4.3评论界面



第6章 实验结果与分析
6.1实验结果
在我们的实验数据里,我们总共抓取了2500篇论文,其中在我们的论文集里被其他论文引用的文章个数为1686篇,总共被引用72471次,平均每个论文被42论文引用。这些论文中,总共能找到的评论句子个数为160046个。平均每个论文有个95评论句子,每个论文在被另外一篇论文引用时,平均约被评论2.2次
根据上面的比率,可以看出,如果我们最终显示在界面上的评论个数需要是5个,那么一篇论文,它被1到2篇论文引用时,就会获得足够的评论集。如果被5篇论文引用时,就会获得效果很好的评论集了。

6.2具体分析
为了很好的说明我们所做的这个系统的效果,下面随即选取一篇评论较多论文为例,来说明我们获得的这些评论以及概括的作用。[5]5
Paper Name:
Three-level caching for efficient query processing in large Web search engines 从题目可以看出,这篇论文是用三级缓存来处理搜索引擎中大规模的请求的。
Abstract:
Large web search engines have to answer thousands of queries per second with interactive response times. Due to the sizes of the data sets involved, often in the range of multiple terabytes, a single query may require the processing of hundreds of megabytes or more of index

data. To keep up with this immense workload, large search engines employ clusters of hundreds or thousands of machines, and a number of techniques such as catching, index compression, and index and query pruning are used to improve scalability. In particular, two-level caching techniques cache results of repeated identical queries at the frontend, while index data for frequently used query terms are cached in each node at a lower level. We propose and evaluate a three-level caching scheme that adds an intermediate level of caching for additional performance gains. This intermediate level attempts to exploit frequently occurring pairs of terms by caching intersections or projections of the corresponding inverted lists. We propose and study several offline and online algorithms for the resulting weighted caching problem, which turns out to be surprisingly rich in structure. Our experimental evaluation based on a large web crawl and real search engine query log shows significant performance gains for the best schemes, both in isolation and in combination with the other caching levels. We also observe that a careful selection of cache admission and eviction policies is crucial for best overall performance. 摘要部分,先说了搜索引擎的负载很重的概况;然后介绍现有的两级catch有一定的缺点,而作者完成了一个三级缓存,在原有的缓存加入了一个中间层;最后说本文用到了一些算法,并且最终实验结果的性能也很好。
通过阅读摘要,我们就知道这篇论文的概况以及来龙去脉。
Comment:
(1)They may be considered separate and complementary to a cache-based approach. Raghavan and Sever [the cited paper], in one of the first papers on exploiting user query history, propose using a query base, built upon a set of persistent "optimal" queries submitted in the past, to improve the retrieval effectiveness for similar future queries. Markatos [10] shows the existence of temporal locality in queries, and compares the performance of different catching policies. (2)Our results show that even under the fairly general framework adopted in this paper, geographic search queries can be evaluated in a highly efficient manner and in some cases as fast as the corresponding text-only queries. The query processor that we use and adapt to geographic search queries was built by Xiaohui Long, and earlier versions were used in [26, 27]. It supports variants of all the optimizations described in Subsection 1. (3)the survey by Gaede and G¨ nther in [17]. In particular, our u algorithms employ spatial data organizations based on R? -tree [5], grid files [the cited paper], and space-filling curves - see [17, 36] and the references therein. A geographic search engine may appear similar to a Geographic Information System (GIS) [20] where documents are objects in space with additional non-spatial attributes (the words they contain). 下面我们来逐条分析上面获得的评论。

(1)中可以看出,该条评论并没有源论文的三级缓存结构,而是比较看重其中的一个方法:利用用户请求的历史记录,基于以前所获得的比较理想的查询词,简历一个用户请求库,来提高搜索引擎的中相似的请求的处理速度。这句话就很好的告诉了我们源论文中三级缓存的一个方法,并且可以看出,这个方法并不仅仅可以用在三级缓存中,也可以用在个性化搜索等方面。
从(2)中可以看出,该条评论说明了它利用了源论文中的请求处理器,来搭建了一个地理搜索引擎。通过这一条评论我们可以看出源论文的后续工作,有什么用处。源论文并不仅仅在三级缓存结构上有研究,其请求处理模型很可能用处更大。
从(3)中可以看出,源论文中使用了一种grid files的系统或者算法,它和R*-tree、空间填充曲线这些算法结合,能够形成一种特殊的数据结构。这也代表了源论文后续工作的一种,方便了读者以更加广阔的视野来看待该论文。

Impact-based Summary:
(1)This motivates the search for new techniques that can increase the number of queries per second that can be sustained on a given set of machines, and in addition to index compression and query pruning, caching techniques have been widely studied and deployed. (2)Our experimental evaluation based on a large web crawl and real search engine query log shows significant performance gains for the best schemes, both in isolation and in combination with the other caching levels. (3)To do so, the engine traverses the inverted list of each query term, and uses the information embedded in the inverted lists, about the number of occurrences of the terms in a document, their positions, and context, to compute a score for each document containing the search terms. (4)Query characteristics: We first look at the distribution of the ratios and total costs for queries with various numbers of terms, by issuing these queries to our query processor with caching completely turned off. (5)Thus, recent queries are analyzed by the greedy algorithm to allocate space in the cache for projections likely to be encountered in the future, and only these projections are allowed into the cache. 最后我们来分析获得的基于影响的概括,这里,为了节省篇幅,只取了前5句来进行分析。
从(1)中可以看出,该论文缓存不仅仅是为了提高每秒钟处理的请求量,还能够进行索引压缩以及请求的删减等工作。这些工作可能研究点更多,后续工作较多,影响较大,因此排在了前面。
从(2)中可以看出,这篇论文是基于网页抓取以及真实得搜索引擎请求的日志来进行评测的,在单独处理以及与其他的结合方面都很好,这是这篇论文的成果。
(3)主要介绍了这篇论文的一个技术细节。
从(4)中可以看出

,这篇论文为了实现缓存结构,需要对请求的性质进行描述,并计算出一些概率方面的只是。
从(5)中可以看出,这里提到了一个贪婪算法,用于为缓存分配空间,以便于未来搜索的数据的增大,缓存也不断增大所带来的空间需求。

综上所述,我们在对这篇文章完全没有了解的情况下,通过阅读摘要,知道了它的大体内容是做三级缓存的。知道了它被别的文章经常引用的地方在于三级缓存中的记录用户日志的方法,以及这篇文章的实际用途。我们还了解到这篇文章的重点部分,包括完成缓存之后的后续工作,与搜索引擎结合,记录用户日志等等。这样,我们在阅读一篇论文时,就可以带着一定的目的性去阅读它。如果我们是在阅读了这篇文章之后,再阅读以上的这些信息,那么可能更加有助于我们对这篇文章的理解,除了站在作者的角度考虑他对自己的文章中那些部分比较侧重,还可以从别的专家对这篇文章的评论中获得这篇文章还有那些更加值得我们注意的和学习的地方。



第7章 后续工作
在获得了别人对一篇论文的评论以及这篇论文基于影响力的概括之后,我们可以对这两段话做更多的分析,获得更好的效果。
例如,可以对基于影响力的概括进行分类[6]6,分成定义和实现这两大类,这样,可以更加清晰的了解一篇论文的重点。我们还可以对获得的这些评论进行聚类。获得的这些评论中,会有一些意思相近的句子,如果最终都出现在我们的评论段落里,那肯定不利于了解源论文更多的信息。在[7]7这篇文章里,就是给定了一些评论句子之后,从中找出一些子句集,以更简短的语句更好的将评论表达出来。
还有,我们获得的这些评论以及概括,都是对于一些相对于老的论文比较有效,而对于较新的论文,显然易见,它的被引用次数会很少,很难获得评论,似乎这个系统对这些论文就没有什么作用 了。但是实际上,我们可以利用自己的系统,对这些新来的论文进行评价。如,一篇会议刚刚接收了一篇新论文A,它引用了一个老论文B,我们可以获得B的评论 以及概括commentB和impact-basedsummaryB,而A中如果有一句话s对B进行了评论,那么,就可以通过s与commentB以及 impact-basedsummaryB之间的关系,判断s这句话是好是坏。对A的每一个引用都进行上述过程,那么,最终,可以自动判断这篇新论文A的质量如何。
在对获得的那些评论以及基于影响的概括进行打分排序时,可以利用到一些那些评论的作者以及发表的会议等先验知识。显然,当一篇论文的作者较有知名度,发表的会议等级较高时,那么它对它引用的论文的评论要更加

具有专业性。
此外,关于论文的检索部分,学术检索有其自己的特点。和web search不一样,学术检索一篇文本的长度非常之长,因此文献页很多,一个查询词来了,可能第一个词在第一页,第二个词在最后一页,实际不相关,却作为相关结果返回了,因此,可以利用基于对象的语言模型([8]8),来改进搜索的效果。



第8章 致谢
还有不到两个月,就要离开北京大学了,现在想来,还真的有一点伤感。时间过的真的非常快,现在想起来,2005年9月坐着大巴车从五四路进入北大校园的那一刻还历历在目。那一刻,是我一生中最开心,最激动的一个时刻之一。能够进入北京大学学习,是多年的梦想。身上承载着家乡邻里的祝福,承载着兄弟姐妹、同学的羡慕,承载着家庭的希望,更重要的是,实现了自己的梦想。直到现在,每每想到进入校园的那一刻,就忍不住的激动起来。
四年的大学生活,以这次的毕业论文为完结,要感谢的人很多很多。首先,我要感谢我的父母,虽然大学之后半年才能见一次面,但那里还是自己的避风港,不论遇到了什么挫折,有他们在背后支持,安慰自己,心里就会感觉踏实了很多。
然后,我要感谢我的班主任张海洋老师和导师闫宏飞老师。张老师帮助我解决了很多的难题,无论是申请出国、实习,还是平时生活中遇到的点点滴滴的事情,她都不厌其烦的帮助我们。大三大四在网络实验室实习期间,有很多时候都很没有自信,对自己的前途很担心,但是通过和闫老师的谈话让我感受到了网络实验室的温暖。
我还要感谢何靖师兄。在网络实验室实习期间,除了锻炼了自己的编程能力之外,我觉得对我人生影响最大的就是何靖师兄了。跟他在一起工作、学习时,会不自觉的被他所感染,学到很多东西。从他那儿,我学会了以编程为乐,不再像大一大二那样把编程当作完成任务;从他那儿,我学习到了踏踏实实做学问的精神,一个博士生,能坚持每天7点到实验室晚上11点回去,这种持之以恒的精神让我毕生难忘;从他那儿,我还学习到了每天坚持定计划,晚上做总结的好习惯,这不仅在学习上,对以后的工作、生活等每一件事情都有着重要的意义。
当然,还要感谢单栋栋、赵东升、涂启琛师兄,他们每一个人身上都有着天网的精神:踏踏实实做学问,以编程为乐。
最后,我还要感谢我的女朋友何莲同学。进入大二以后之所以能获得这么好的成绩,有一半要归功于她的监督;特别要感谢在我做手术那几个月期间,她对我无微不至的照顾,这就是患难见真情吧,每当想起这些,我总会非常感动。


1 L

. Gwenn Volkert. The Science and Art of Literature Searching for Computer Science Research.
2 Hidetsugu Nanba, Manabu Okumura. Towards Multi-paper Summarization Using Reference Information. Proceedings of the Sixteenth International Joint Conference on Artificial Intelligence, pages: 926 - 931, 1999
3 Qiaozhu Mei, ChengXiang Zhai. Generating Impact-Based Summaries for Scientific Literature. Proceedings of the 46th Annual Meeting of the Association for Computational Linguistics (ACL '08), pages 816-824, 2008
4 Nakov, A. Schwartz, and M. Hearst. Citances: Citation sentences for semantic analysis of bioscience text. In Proceedings of ACM SIGIR'04 Workshop on Search and Discovery in Bioinformatics. 2004
5 Aaron Elkiss, Siwei Shen, Anthony Fader. Blind men and elephants: What do citation summaries tell us about a research article? Journal of the American Society for Information Science and Technology, pages 51-62 , 2008.
6 Nanba, Hidetsugu, Noriko Kando, and Manabu Okumura. Classification of research papers using citation links and citation types: Towards automatic review article generation. In Proceedings of the 11th SIG Classification Research Workshop, pages 117-134, 2004
7 Vahed Qazvinian, Dragomir R. Radev. Scientific Paper Summarization Using Citation Summary Networks. undisclosed conference or journal, pages 1-9,2008.
8 Zaiqing Nie, Yunxiao Ma, Shuming Shi, Ji-Rong Wen and Wei-Ying Ma, Web Object Retrieval. The 16th international World Wide Web conference (WWW 2007), pages 81-90, 2007.

??

??

??

??







4







相关文档