改进的BM25F评分算法在文献检索系统中的应用(共24页).doc
《改进的BM25F评分算法在文献检索系统中的应用(共24页).doc》由会员分享,可在线阅读,更多相关《改进的BM25F评分算法在文献检索系统中的应用(共24页).doc(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上改进的BM25F评分算法在文献检索系统中的应用目录专心-专注-专业摘 要本文主要就改进的BM25F评分算法在论文检索中的实现与应用过程进行了介绍。首先是数据集的建立过程,为了配合BM25F评分算法在结构化文档中的优势,检索对象设定为学术论文,基于万方数据库提供的文献资源通过爬虫建立了检索数据集;然后是搜索引擎搭建过程,索引使用的是倒排索引,在实现了BM25F算法之后,结合实际检索效果,从以下三个方面对系统进行了优化。(1)对BM25F进行改进,将文档中查询关键字的紧邻距离作为影响评分的一个因素加入至BM25F评分算法中。(2)优化了数据库设计,分别添加了各个域的长度字
2、段,为各个区域长度的计算提供了便利,一定程度上提高了检索效率。(3)实现了定时增量索引,在很大程度上节省了索引创建时的开销,同时保证了数据查询的实时性,以及系统数据的可扩展性。关键词: 爬虫;BM25;BM25F;紧邻距离;增量索引;1 系统总体架构及数据准备我们改进了BM25F算法,把它用在了论文检索中,BM25F算法比较适用划分了区域的文档,如论文中的区域有标题,摘要,作者等区域,用这个算法来进行论文的检索就相当的合适。1.1 系统总体架构图1-1 系统架构图以上是我们这个系统的总体架构图,大致分成两块,第一块就是数据准备,即从网上把我们需要的数据用爬虫爬下来,从爬下来的html源代码解析
3、提取出我们想要的字段,然后存储在数据库中。第二块就是当我们有了这些原始数据后,可用它来建立索引、字典等操作,然后再在这个基础上构建我们的搜索引擎,用我们改进的BM25F算法来对检索出来的论文进行排序,再把最终的结果返回给用户。我们在数据库的设计上做一些小优化,以更好地适应我们的算法,它可以在很大程序上减少计算的开销。除此之外,我们在原始的BM25F算法上也做了一些优化,详见后面的章节。1.2 数据准备我们项目中的论文数据爬取自万方,下面是一篇论文示例:图1-2 论文实例在这个页面中,划分了很多字段(或者说区域),有标题、摘要、作者、关键字等。我们主要爬取了标题、摘要、关键字、作者、作者单位这几
4、个字段。下面是一个爬取过程的示意图:图1-3 爬虫过程示意图最后存储在数据库中的结果如下图所示:图1-4 数据库表设计示意图从上图中可以看到,我们不仅保存了爬取到的这些字段的完整信息,还保存了去除停用词后的分词结果,以及一些比较重要的字段的长度,这极大的减小了后续进行BM25F分值计算时的计算开销。2 搜索引擎的搭建过程2.1 索引的建立我们检索系统中所用到的是倒排索引,下面给出倒排索引的相关概念,倒排索引(Inverted Index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数
5、据结构。通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。倒排索引主要由两个部分组成:“单词词典”和“倒排文件”。倒排索引有两种不同的反向索引形式:一条记录的水平反向索引(或者反向档案索引)包含每个引用单词的文档的列表。一个单词的水平反向索引(或者完全反向索引)又包含每个单词在一个文档中的位置。后者的形式提供了更多的兼容性(比如短语搜索),但是需要更多的时间和空间来创建。现代搜索引擎的索引都是基于倒排索引。相比“签名文件”、“后缀树”等索引结构,“倒排索引”是实现单词到文档映射关系的最佳实现方式和最有效的索引结构。存储在MySQL数据库中的每一条记录都被表示成一个文档,我们为每一个文档
6、建立索引。倒排索引的具体建立步骤分为两步,首先使用中文分词器对需要建立索引的文档进行分词,然后构建倒排索引表,我们还做了一个小小的处理,使得一些原来会被分词器当成两个词而分开的词,现在当成一个整体而不会被分开,例如机器学习,如果不做处理,会被分为机器、学习,这样就不符合我们期望的结果。下图是一个倒排索引表的示意图:表2-1 索引文件示意表Key WordsDocument IDFrequencyPositionsFields机器学习12,212,5,2Abstract在上图所示的倒排索引表中,索引的词是机器学习,它出现的区域是摘要,它在文档1的摘要中的出现了2次,位置分别是2和5,在文档2的摘
7、要中出现1次,出现的位置是2。这里所说的位置,都是以分词后的单词为距离来计算的,也就是说以分词后的单词为最小的单位。2.2 中文分词器的比较与选取当前比较常用的中文分词器主要有Paoding Analyzer、Imdict Chinese Analyzer、MMSeg4j Analyzer以及IK Analyzer四种,首先分别简单介绍一下这四种中文分词器。Paoding Analyzer中文翻译为“庖丁解牛”,引入隐喻,采用完全的面向对象设计,构思先进。Imdict Chinese Analyzer是 Imdict Chinese Analyzer智能词典 的智能中文分词模块,算法基于隐马尔
8、科夫模型(Hidden Markov Model, HMM),是中国科学院计算技术研究所的ictclas中文分词程序的重新实现(基于Java)。MMSeg4j Analyzer用Chih-Hao Tsai 的MMSeg 算法实现的中文分词器,并实现 lucene 的 analyzer 和 solr 的TokenizerFactory 以方便在Lucene和Solr中使用。IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, IK Analyzer已经推出了4个大版本。接下来将分别从用户自定义词库、效率以及算法和代码复杂度三个方面
9、对4种分词器进行比较。(1) 用户自定义词库:Paoding Analyzer :支持不限制个数的用户自定义词库,纯文本格式,一行一词,使用后台线程检测词库的更新,自动编译更新过的词库到二进制版本,并加载。Imdict Chinese Analyzer :暂时不支持用户自定义词库,但原版 ICTCLAS 支持用户自定义 stop words。MMSeg4j Analyzer:自带sogou词库,支持名为wordsxxx.dic,utf8文本格式的用户自定义词库,一行一词。不支持自动检测。IK Analyzer:支持API级的用户词库加载,和配置级的词库文件指定,无 BOM 的 UTF-8 编码
10、,不支持自动检测。(2)速度以下数据来源于个分词器官方介绍。Paoding Analyzer:在PIII 1G内存个人机器上,1秒 可准确分词 100万汉字。Imdict Chinese Analyzer :483.64 (字节/秒),(汉字/秒)。MMSeg4j Analyzer:complex 1200kb/s左右,simple 1900kb/s左右。IK Analyzer :具有50万字/秒的高速处理能力(3)算法和代码复杂度Paoding Analyzer :svn src 目录一共1.3M,6个properties文件,48个java文件,6895 行。使用不同的 Knife 切不同
11、类型的流,不算很复杂。Imdict Chinese Analyzer :词库 6.7M(这个词库是必须的),src 目录 152k,20个java文件,2399行。使用 ICTCLAS HHMM隐马尔科夫模型,“利用大量语料库的训练来统计汉语词汇的词频和跳转概率,从而根据这些统计结果对整个汉语句子计算最似然的切分”MMSeg4j Analyzer : svn src 目录一共 132k,23个java文件,2089行。MMSeg 算法 ,有点复杂。IK Analyzer : svn src 目录一共6.6M(词典文件也在里面),22个java文件,4217行。多子处理器分析,跟Paoding
12、Analyzer类似,歧义分析算法还没有弄明白。最终,我们选取了Imdict Chinese Analyzer中文分词器,并对其中文词库进行了处理。处理之后,机器学习、神经网络、数据挖掘等专业词语将会被当做一个词,是查询结果更符合用户的原始意愿。2.3 评分算法的设计与实现2.3.1 BM25算法在信息检索中,BM25算法是用来给文档排序的,具体来说就是当用户向搜索引擎提交一个查询时,会查到很多相关的文档,BM25算法就是给这些文档做相关度排序的,然后按相关度从大到小把结果返回给用户。它是把文档看成是词袋,忽略语法及词的顺序。给定一个查询Q,其中Q包含关键字q1, qn,,则BM25算法为文档
13、打的分用下式来计算:其中,f(qi,D)是关键字在文档D中出现的频率,|D|是文档D的长度(以词的个数计算长度),是文档集中文档的平均长度,k1和b是可调参数,k1的取值在区间1.2,2.0中,b取值在区间 1.2,2.0中,具体编码实现时,通过反复时间尝试,最终取k1=1.2,b=0.75。IDF(Inverse Document Frequency)为逆向文件频率,是一个词语普遍重要性的度量。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到,定义如下:其中,N是文档集中所有文档的个数,n(qi)是文档集中包含检索词项qi的文档数。除此之外,IDF权重
14、的计算公式还有一些变体,但最终我们选取了教材中所给出的上述公式。2.3.2 BM25F算法BM25F是一个从BM25算法修改而来的算法,适用于结构化的文档中,它的主要思想是,结构化文档是由多个区域组成的,如果HTML网页有header、body区域等,每个区域的权重应该区别对待。又例如在检索论文时,认为查询词项出现在标题中,比出现在摘要中更重要,那么就会给标题这个区域以更大的权重,比如认为同样一个词出现在标题中一次,相当于出现在摘要中10次。BM25F算法就是对不同的区域赋予不同的权重,以此来反映不同区域的重要性不同。它主要就是修改了词项频率的计算公式,即修改为下式:其中,f(qi,D,S)为
15、词项qi在文档D的S区域中出现的频率,l(D,S)是文档D中区域S的长度,ls是文档集中所有文档的区域S的平均长度,bs是一个和区域有关的可调参数,与BM25类似,它的取值从0到1,实际编码实现时通过反复实践尝试,我们取bs=0.75。对这些针对特定区域计算的词项频率,或者说是伪频率,加以整合,可以得到一个针对整个文档计算的词项频率公式,如下所示:其中,是区域S的权重,例如在论文检索中,可以取标题区域的权重为=10,摘要区域的权重为=1,这就表示对于一个相同的词项,它出现在标题中比出现在摘要中更加重要。在BM25公式中的词项频率计算公式换为,就得到了BM25F公式,具体如下:在实现了BM25F
16、算法之后,将检索系统应用于数据集中的查询结果,我们发现系统再多关键字查询时精度不高,通过分析得出了原因:BM25算法仅仅是考虑到了文档长度和查询词的词频,而没有考虑查询词之间的紧邻距离。事实上,BM25F的评分公式也很好的印证了这一点。关键词紧邻距离用来衡量多个关键词在同一文档中是否相邻。比如用户搜索“中国足球”这一短语,包含“中国”和“足球”两个关键词,当这两个关键词按照同样顺序前后紧挨着出现在一个文档中时,紧邻距离为零,如果两词中间夹入很多词则紧邻距离较大。紧邻距离是一种衡量文档和多个关键词相关度的方法。紧邻距离虽然不应该作为给文档排序的唯一指标,但在一些情况下通过设定阀值可以过滤掉相当一
17、部分无关的结果。因此,接下来我们将查询词项在文档中的紧邻距离考虑到评分算法中,得到了新的评分算法,定义如下:2.3.3 算法的编码实现(1)BM25算法的实现public BM25BooleanScorer(IndexReader reader, BooleanTermQuery should, BooleanTermQuery must, BooleanTermQuery not, Similarity similarity, String fields, float boosts, float bParams) throws IOException this.ndocs = reader.
18、numDocs();if (should != null & should.length 0) Scorer shouldScorer = new Scorershould.length;for (int i = 0; i 0) Scorer mustScorer = new Scorermust.length;for (int i = 0; i 0) Scorer notScorer = new Scorernot.length;for (int i = 0; i notScorer.length; i+) notScoreri = new BM25FTermScorer(reader, n
19、oti.termQuery, fields, boosts, bParams, similarity);this.notBooleanScorer = new NotBooleanScorer(similarity, notScorer, this.ndocs); elsethis.notBooleanScorer = new MatchAllBooleanScorer(similarity, this.ndocs);代码2-1 BM25评分主程序(2)BM25F评分主程序public List bm25Seacch(String queryStr, int pageNum, int page
20、Size)throws CorruptIndexException, IOException, ParseException String indexDir = pathString;String fields = title, author, paperAbstract, keyword,author_dept ;IndexSearcher searcher = new IndexSearcher(indexDir);String queryString=chineseSplit.chineseAnalyze(queryStr);/ Set explicit average Length f
21、or each fieldBM25FParameters.setAverageLength(title, AveTitle);BM25FParameters.setAverageLength(author, AveAuthor);BM25FParameters.setAverageLength(paperAbs, AveAbs);BM25FParameters.setAverageLength(author_dept, AveDept);BM25FParameters.setAverageLength(keyword, AveKey;)/ Set explicit k1 parameterBM
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 改进 BM25F 评分 算法 文献 检索系统 中的 应用 24
限制150内