也较为合理的结果。
同时,需要注意的是,如果一个篇论文的被引用次数很高,而且它又有两段评论原文的句子时,那么这两段会一起出现在最终的结果里,在这里我们就需要对结果进行调整,保证在权重相同的情况下,尽可能选择尽量不同的文章的评论。
12
第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算法,对d中的句子s进行打分。这里的打分,主要是基于词频以及相似度来做的。
4.2建模算法
首先,为任何一个句子打分的公式Score(s)如下:
Score(s)??D(?I||?s)
?w?Vw?V
从信息理论的观点,其中D(?I||?s)即为KL-divergence,可以被解释为通过
?P(w|?I)logP(w|?s)??P(w|?I)logP(w|?I)句子s来表示基于影响的段落,需要从文章中删除的信息量。显然,其值越小,Score则越大,它也越能代表文章以及其他文章对它的评价的意思(因为它只要删除较少的信息)
可以看出,公式中最重要的是求出P(w|?I)和P(w|?s)。
13
P(w|?s)?c(w,s)??sP(w|D)|s|??s(1)
c(w,d)??cP(w|C) P(w|?I)?|d|??C
(2)
对于公式(1),其中,c(w,s)表示一个单词w在句子s中出现的次数,P(w|D)表示单词w出现在所有论文空间中出现的概率,D为我们的整个论文空间。而?s为平滑参数。我们假设?s为|s|的n倍,则(1)式可以看成是
P(w|s) n?1
可见,n越大,表示w与整个论文空间的关系越大,而与这个句子的关系则较少。
n?1?P(w|D)n?s等于|s|时,表示二者一样,各占1/2。我在这里将n设置为了1。
对于公式(2),其中c(w,d)表示一个单词w在当前要求的这篇论文中出现的次数,而P(w|C)表示单词w在我们为这篇论文求出的评价句子的集合C中出现的概率。?C为平滑参数。我们仍然假设us为|s|的n倍,则(2)式可以看成
P(w|d)P(w|C)
n?1?n?1n可见,n越大时,表示这个单词w与C的关系越大,而n小于1时,则与论文本身关系较大。可以看出,极端的情况,当n为0时,则w只与原论文有关系了,与我们获得的那些评价都没有关系了,因此获得的句子实际上对其他论文也没有什么影响了。因此,对于本实验,应当将n设置的越大越好。
4.3算法的实现
具体实现算法时,会出现一些问题:我们假设一篇论文可以划分成1000个
句子,每个句子有20个不同单词,我们总共有2000篇论文,那就有4亿个单词。那么,对于每一个句子s,我们在进行上面的算法时,需要进行如下一步
?(P(w|?I)logP(w|?s)?p(w|?I)logP(w|?I))w?V
这就需要对这4亿个单词进行遍历一遍,并且分别计算括号中的那一步。而
每篇论文有1000个句子,就相当于要计算4000亿次,这个计算量对我们来说太庞大了,因此,我在这里选取了一个简便一点的方法,就是在上面的一步时,并不是对整个单词空间进行计算,而只是对论文d和评论集合C中出现的所有单词进行遍历计算打分。
可以看出,对于一个既不在d中又不在C中的单词,P(w|?I) = 0.对结果也没有影响。因此,上面的公式只是理论的公式,具体应用时,只需要对d和C中出现的单词进行计算即可,这就节省了大量的计算量。整个流程如图表 3,需
14
要用到图表 2中的前三步算法获得的评论列表。这里之所以不用图表 2的最终结果,是因为我们需要更多的信息,信息越多,获得的概括越具有影响力。 图表
4.4获得基于影响的概括
通过上面的模型,可以对A中的每个句子进行打分,然后根据所得分数进行从大到小排序。这里因为每篇论文只有1000左右的句子,数量级并不是很大,就自己写了一个简单的冒泡排序算法来排序。之后,选择其中得分最高的k个句子,组合在一起,就获得了原文基于影响的概括了。从整个建模的过程中也可以看出,所谓基于影响,就是通过那些对A进行评价的句子集C,分别获得Si与这些句子的相似程度,与其相似程度最高的,证明这个句子被其他作者提及的最多,影响最大。而这个概括与摘要的区别就是,影响较大的句子,可能原来的作者并没有想到,因此在摘要中并没有提及(正所谓无心插柳柳成荫);而摘要中提及的部分,影响可能反而没有那么大。
图表 3
15
第5章 搭建搜索引擎
本章内容主要介绍如何利用PARADISE搜索引擎平台来搭建我们的论文检索系统。通过这段内容,我们可以了解到PARADISE使用的基本过程,最终我们会发现,如果想搭建其他方向的搜索引擎,使用PARADISE也是非常方便的。
5.1 PARADISE结构简介
PARADISE系统,全称是Platform for Applying, Researching And Developing Intelligent Search Engine, 是网络实验室搜索引擎组耗时一年多在一个国家863项目支持下开发的,其目的是建立一个搜索引擎平台,将搜索引擎的各个部分模块化,使得这个搜索引擎不只针对专一的某一个领域,而是可以针对各个领域。其功能有点类似于Lucene系统,与其不同的是PARADISE是用C++编写的。PARADISE有以下几大的模块,见表格 3。
表格 3
analysis index search front_evidence (1)analysis是预处理模块,用于对网页进行去噪、消重以及编码转换等处理,如果是针对paper的pdf转换后的text文件建立索引,这一步骤就可以省略了。 (2)index是索引模块,用于将需要检索的部分建立倒排索引。具体如何使用5.2会提到。
(3)search是搜索模块,将index建成之后,就可以利用index数据开启搜索服务,对于每一个词,去倒排索引里面查找包含它的文档id号(网页中为url),从而完成检索。
(4)front_evidence是前台模块,完成一个类似于天网搜索引擎的前台界面。除了显示结果之外,还进行摘要处理。这个地方需要注意的就是与index部分有一定的结合,会在后面提到。
除了以上4个大的模块之外,PARADISE还提供了很多可供选择以及继承修改的小模块。
例如,在search的语言模型这个部分,可以选择需要的模型,也可以自己重写一些语言模型。压缩的时候,可以选择vint、pfordelta等等各种压缩算法PARADISE系统接口设计得非常好,当需要对上面任何一个模块进行修改时,不需要修改源代码,只需要自己重写一些继承的类就可以了。
16