信息检索导论学习笔记 --第一章 布尔检索

摘要:
信息检索是从大规模非结构化数据(通常是文本)的集合中找到满足用户信息需求的信息文档。所有文档都形成一个“集合”,有时称为“语料库”。真实需求的召回率是多少

信息检索(informagto retrieval) 是从大规模非结构化数据(通常是文本)的集合中找出满足用户信息需求的资料

文档document

所有文档组成“文档集“(collection), 有时也称“语料库”(corpus)

查询(query)

相关的(relevant)

正确率(precision): 返回结果中 真正和信息需求相关的文档所占比例

//给出的结果,多少是真正需求的

召回率(recall): 所有和信息需求真正相关的文档中被检索系统返回的百分比

//真正的信息需求有多少出现给出的结果

假如我们建立一个 词项-文档的矩阵:

                         doc1      doc2     doc3

hello                    1          0          1

caeasar               0           0          1

mercy                  0          1          0

假如我们有50w个词,100w的文档,那么矩阵的大小就是50w*100w, 太大了,而且这个矩阵很多项多是0,那么就是稀疏矩阵。

建立倒排索引(inverted index)来解决。

Image

如上图,左边称为词项字典(dictionary), 右边成倒排记录(posting), 记录该词项出现在哪些文档中

1.2 构建倒排索引

1 收集需要建立索引的文档

2 将文档换成一个个词条(token), 该过程成为(tokenization)

3 预处理,归一化词项

4对所有文档按照其中出现的词项来建立倒排索引,索引中包括一部词典和一个全体倒排记录表

如下图,先列出词,然后排序,然后生成倒排记录,同事记录文档频率(document frequency)

Image(1)

1.3 布尔查询

比如查询  brutus and calpurnia

Image(2)

也就是取交集。合并算法如下

Image(3)

利用这种排序方法,则需要对倒排记录表排序。

查询优化( query optimization)

从小到大依次进行处理,如果我们先合并两

个最短的倒排记录表,那么所有中间结果的大小都不会超过最短的倒排记录表。

对于任意的boolean查询,我们必须保存临时结果Image(4)

boolean查询的一些高级用法:

Image(5)

空格 表示或,&与, /s 同一个句子, /p同一个段落,/k k个词之内,等。可见布尔查询更适合专业人员。

和布尔检索模型相对的是排序检索模型或有序检索模型( ranked retrieval model)(也即给出排序的结果,现在的搜索模式)。 后者不是具有精确予以的逻辑表达式,而是采用一个或多个词构成自由文本查询(free text query) (也即更复杂)

按照逻辑AND OR的布尔查询会导致召回率与正确率的两个极端,但是很难达到均衡。

免责声明:文章转载自《信息检索导论学习笔记 --第一章 布尔检索》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(八) 之 用 Redis 实现用户在线离线状态消息处理41.配置完善爬虫代码文件及图片下载文件重命名问题-2下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Oracle分区表

最近因为业务上客户数据的表空间占用过大,而想通过删除一部分数据来缩小表空间文件的大小无法实现,故想到使用分区表来实现 分区表分为范围分区(range)、哈希分区(hash)、列表分区(list)、以及一些组合分区(range-hash、range-list) 以下为各个分区的创建语法: 1、范围分区(range) 简介: 语法: 1     CREATE...

SQL查询表中的有那些索引

方法1. 使用系统表 -- 查询一个表中的索引及索引列 USE AdventureWorks2008 GO SELECT indexname = a.name , tablename = c. name , indexcolumns = d .name , a .indid FROM sysindexes a JOIN sysindexke...

mysql查询语句中使用星号真的慢的要死?

前言 之所以写这篇文章,是源于以前看过的关于sql语句优化的帖子,里面明确提到了在sql语句中不要使用 * 来做查询,就像下面的规则中说的 2、尽量避免使用select *,返回无用的字段会降低查询效率。如下: SELECT * FROM t 优化方式:使用具体的字段代替*,只返回使用到的字段。 但是中国有句姥话叫“尽信书不如无书”,难道在sql...

MySQL索引及使用详解

一.索引的作用        一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重。        在数据量和访问量不大的情况下,mysql访问是非常快的,是否加索引对访问影响不大。但是当数据量和访问量剧增的时候,就会发现mysql变慢...

SQL查询速度慢的原因分析和解决方案

SQL查询速度慢的原因分析和解决方案 查询速度慢的原因很多,常见如下几种:1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)2、I/O吞吐量小,形成了瓶颈效应。3、没有创建计算列导致查询不优化。4、内存不足5、网络速度慢6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)7、锁或者死锁(这也是查询慢最常见的问题,是程序设计...

反射+枚举+freemarker,自动生成实体类,自动建表建索引(二)之建表建索引,注解和DatabaseMetaData 获取信息

接上一篇博文 反射+枚举+freemarker,自动生成实体类,自动建表建索引(一)之生成实体类,枚举详解,这篇博文介绍自动建表。 用反射+枚举+freemarker,自己实现的自动生成实体类和自动建立数据表建索引。用enum枚举作为数据表的配置文件,1个枚举就是1张表,根据枚举类,自动生成实体类,和自动建表建索引。 主要步骤和 上一篇博文差不多,就是...