文档库 最新最全的文档下载
当前位置:文档库 › 北大毕业论文基于PARADISE平台论文检索系统

北大毕业论文基于PARADISE平台论文检索系统

本科生毕业论文

题目:基于PARADISE平台论文检索系统

Literature Search Design based on PARADISE

姓名:李峰

学号:

院系:信息科学技术学院

专业:计算机科学与技术系

指导教师:闫宏飞副教授

二〇一三年十二月二日

摘要:

本文基于天网实验室的Platform for Applying, Researching And Developing Intelligent Search Engine (PARADISE)搜索引擎平台,通过以从https://www.wendangku.net/doc/307350921.html,抓取的计算机网络方向的2500多篇论文为数据,搭建成一个论文搜索系统,最终目的是通过论文之间的引用关系,获得其他引用这篇论文的作者对这篇论文的评价,形成一个小的评价段落,以及Impact-based Summaries,从而使得我们能够从专业级的角度获得这篇论文的内容以及优劣。我们首先根据https://www.wendangku.net/doc/307350921.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章引言 (5)

1.1研究背景 (5)

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

1.2工作内容

1.2.1抓取所需要的论文数据

要进行论文搜索,首先需要一批实验数据,我是从https://www.wendangku.net/doc/307350921.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是以(作者,文章名,发表期刊,年份)的形式表现出来的,例

而我们存储每篇文章的时候,是以期刊作为文件夹,以文章作文文件名来存

因此,我们需要从上面的那句话中提取会议名以及文章名,才能获得文章之间的引用关系,建立一个FromTo表,这之中甚至是相差一个空格都不行的,会直接导致整个系统的失败。

于是,我们想出了一个简单的办法。可以看到,在https://www.wendangku.net/doc/307350921.html,上,每一篇论文的格式都是规整的,从上面可以很容易的提取出摘要、文章名、期刊等信

息,可以下载到pdf版的文件;更重要的是,对于论文的引用信息,在该网页上该出了一个超链接,点击之后就可以进入引用的文章的信息。因此,可以利用递归的方法,进入引用的文章,从中提取出会议名以及文章名,这样,每篇文章的引用就可以形成上面的格式,并且是完全正确的,方便我们建立引用映射表。接着,要设定递归的种子以及递归的层数。因为我们的实验所需要的数据最好是在一个领域里面的一个方向的论文,并且需要引用关系较紧密的,以便于后续的工作,因此,这里采用www会议的文章作为种子,对于每一篇文章递归三层。如果递归四层,就会太多了。假设一篇文章又十个引用,那么递归四层,就会导致没从www会议中抓取一篇文章,就需要抓取1000篇相应的其他文章,这个数量实在是太大了;如果递归两层,就会导致每篇文章只能抓取其引用的文章,这样引用的层次较浅,很有可能导致最后引用倒置时,每一篇文章只被一两篇文章引用,这样不利于我们的实验。

最后,我们需要将pdf转化为txt格式,这是利用linux自带的pdf2txt 工具来实现的,但是这个工具并不支持对文件夹的递归操作,因此,我用python 写了一个脚本,通过递归操作,可以将一个sourceDir里面的所有pdf文件递归转化为txt文件,并按照原来的相对路径存在destDir里面。

2.2数据抓取的过程

已经确定抓取数据的大体方法了,下面就要开始正式的抓取数据了。所用的工具比较简单,就是利用linux下的wget工具,将网页下载到文本文件里进行分析。另外我们这里利用了第三方库boost::regex,这种正则表达式非常适合从网页中进行模式匹配并且提取出数据。有了前面的两项工具,我们只需要分析好网页的模式,尽量正确的提取数据既可以了,需要注意的是,由于网页并不是完全规整的,因此,有时候,对于同一个数据,往往要写多种匹配的公式才可以,这其中,最麻烦的当属提取引用部分了(我们不仅要提取引用,还要提取这个引用对应得url,从而递归进入提取它的论文名)。

还需要注意的一点就是,由于网页的不规整性,所以要排除一些错误的情况。还有一些文章,确实没有摘要、引用或者其他信息(这些文章多出现在引用链的顶层,主要是一些书籍等参考资料,所以也比较正常),遇到这些情况我们就不抓取下来了。 2.3数据的存储及解析

在将数据从网页下载下来之后,需要存储起来。首先,对于pdf 的格式,只能存在文件系统里,按正常的方式存储。对于其他的信息,这里选择存储在berkeleyDB 里面。berkeleyDB 是一种轻量级的数据库,Mysql 等数据库底层就是利用berkeleyDB 来完成的。它的有点是可移动性,不用想Mysql 那样搭建服务器,而且读取数据时较快。对于每一篇文章的基本信息metadata ,按照【表格 1】中的形式存入berkeleyDB

中:

表格 1

获得这些基本信息之后,我们还要根据这些元信息,陆续建立一些berkeleyDB文件,用于存储其他信息,如[表格 2]:

表格 2

其中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建模之前我们所有的数据

在建模之前,我们先来看看我们已经获得了哪些数据:

下面,我们就可以参照KL-divergence算法([3]3,Qiaozhu Mei and ChengXiang Zhai),对d中的句子s进行打分。这里的打分,主要是基于词频以及相似度来做的。

4.2建模算法

首先,为任何一个句子打分的公式Score(s)如下:

Dθθ即为KL-divergence,可以被解释为通过从信息理论的观点,其中(||)

I s

句子s来表示基于影响的段落,需要从文章中删除的信息量。显然,其值越小,Score则越大,它也越能代表文章以及其他文章对它的评价的意思(因为它只要删除较少的信息)

对于公式(1),其中,(,)c w s 表示一个单词w 在句子s 中出现的次数,(|)p w D 表示单词w 出现在所有论文空间中出现的概率,D 为我们的整个论文空间。而s μ为平滑参数。我们假设s μ为|s|的n 倍,则(1)式可以看成是(|)(|)*11p w s p w D n n n +++,可见,s μ越大,表示w 与整个论文空间的关系越大,而与这个句子的关系则较

少。W 等于1时,则表示二者一样,各占1/2。我在这里将s μ设置为了1。

对于公式(2),其中(,)c w d 表示一个单词w 在当前要求的这篇论文中出现的次数,而(|)p w C 表示单词w 在我们为这篇论文求出的评价句子的集合C 中出现的概率。C μ为平滑参数。我们仍然假设u 为w 的n 倍,则(2)式可以看成(|)(|)*11p w d p w C n n n

+++,可见,n 越大时,表示这个单词w 与C 的关系越大,而n 小于1时,则与论文本身关系较大。可以看出,极端的情况,当n 为0时,则w 只与原论文有关系了,与我们获得的那些评价都没有关系了,因此获得的句子实际上对其他论文也没有什么影响了。因此,对于本实验,应当将n 设置的越大越好。

4.3算法的实现

具体实现算法时,会出现一些问题:我们假设一篇论文可以划分成1000个句子,每个句子有20个不同单词,我们总共有2000篇论文,那就有4亿个单词。这就需要对这4亿个单词进行遍历一遍,并且分别计算括号中的那一步。而每篇论文有1000个句子,就相当于要计算4000亿次,这个计算量对我们来说太庞大了,因此,我在这里选取了一个简便一点的方法,就是在上面的一步时,并不是对整个单词空间进行计算,而只是对论文d 和评论集合C 中出现的所有单词进行遍历计算打分。

可以看出,对于一个既不在d 中又不在C 中的单词,(|)I p w θ = 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

(1)analysis是预处理模块,用于对网页进行去噪、消重以及编码转换等等处理,如果是对网页构建搜索引擎,这一步骤就可以省略了。

(2)index是索引模块,用于将需要检索的部分建立倒排索引。具体如何使用5.2会提到

(3)search是搜索模块,将index建成之后,就可以利用index数据开启搜索服务,对于每一个词,去倒排索引里面查找包含它的文档中的id号(网页中为url),从而完成检索。

(4)front_evidence是前台模块,完成一个类似于天网搜索引擎的前台界面。除了现实结果之外,还进行摘要处理,一个文档的摘要。这个地方需要注意的就是与index部分有一定的结合,会在后面提到。

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

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

相关文档
相关文档 最新文档