新浪微博 Github

《信息检索导论》第一章总结


一、信息检索概念


信息检索是从大量非结构化的文档集中找到用户需要的信息;

当然信息检索远不止这些,比如从包中拿出信用卡并查看卡号,在计算机中查找文件等;

非结构化:数据没有清晰的语义结构,计算机不容易处理;

严格的非结构化数据是不存在的,比如文本虽然属于非结构化,但是文本也有固定的格式,如标题等;

半结构化数据:处在结构化和非结构化之中的信息;

 

分类:给定类别,将文档进行指派给特定的类别;一般都是有训练集和测试集;

聚类:将给定的文档集进行自动聚团并分开,即预先不指定类别;

grep是Unix中查询的命令;

 

语料库(corpus)=Collection;

 

ad-hoc检索:文档集相对静止,用户需求不断变化且是一次性的,输入请求,返回相关文档;

一般的信息检索系统都属于ad-hoc检索;

 

信息需求:用户原始查询,比如I want a apple and a banana;

查询:通过tokenization等预处理后输入系统的语句,比如want apple banana;

比如原本信息需求是I have a Apple,Banana;查询为 Apple AND Banana;

评价信息检索系统指标

正确率:f11/(f10+f11);

召回率:f11(f01+f11);


二、布尔检索模型


布尔检索模型简单的说就是把文档看成是词的集合,而考虑词在特定文档中是否出现,而不考虑出现次数;

最平常的信息检索方式是扫描文档集;

但是因为要应对很多问题,比如临近查询等,就需要预先构造索引;

词项-文档矩阵:纵坐标表示词项,横坐标表示文档,能够进行boolean查询;

但是有一个缺点就是空间消耗太大,因为此矩阵是稀疏的;


三、倒排索引


由dictionary和posting组成,一般dictionary放在内存中,而posting放在磁盘中;

在词典中可以加入额外信息比如文档频率即posting的长度以方便后续操作(比如AND);

可以对词典进行压缩,使得尽可能多的词典放入内存;

 

posting的数据结构:

1.单链表:适用于更新频繁的posting,需要更多的空间;

2.变长数组:适用于更新不频繁的posting,因为连续存储,因此能够加快遍历;


四、布尔查询与运算


类似于A AND B的布尔查询,可以通过复杂度为O(x+y)的合并算法;

对于A AND B AND C这类多个连续布尔查询,则可以通过查询优化进行合并;

查询优化方法:每次都取长度最小的两个posting合并;

比如A 的长度为10,B的长度为20,C的长度为15,则可以先取A和C合并后的中间结果再和B合并;

注意:在多个连续布尔查询时一般中间结果放在内存中,而其余的放在磁盘中;

这种方法不一定是最好的,但是大部分情况下是最好的;

 

对于(A OR B)AND (C OR D) AND (E OR F),启发式的查询优化方法如下:

因为OR可以理解为加法操作,因此A OR B的估计长度为len(A+B);因此我们可以先从(A OR B)、(C OR D)、(E OR F)中抽出长度最短的两个进行AND操作;

 

 

 

处理A AND NOT B查询:

(1)初始办法:先算NOT B生成一个新的posting(O(N)),再和A合并(O(A+len));

(2)高效办法:类似于A AND B的做法,移动指针来判断,只需要O(A+B),需要考虑当B指针移到最后而A还没有移到最后的情况;

如果B是一个高频词,则先算NOT B,因为NOT B可以使posting变小;

如果B是一个低频词,则用(2)的方法算更快;

 

对于A OR B查询,复杂度O(x+y);

对于A OR NOT B查询,复杂度为O(N);

 

布尔查询的缺点:

1.对于AND操作,召回率太低;

2.对于OR操作,正确率太低;


补充


1.WestLaw查询

1.空格表示“或”而不是“与”,&表示与;

2./s表示在一句句子,/p表示一个段落,/k表示k个词内; 

3.!表示通配符查询;

2.memex介绍

来自Bush于1945年的论文,一种能够存储个人档案、笔记、书等资料的设备,用户能够方便查阅资料; 

posted @ 2012-01-06 14:50  xiazdong  阅读(309)  评论(0编辑  收藏  举报