信息检索(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)来解决。
如上图,左边称为词项字典(dictionary), 右边成倒排记录(posting), 记录该词项出现在哪些文档中
1.2 构建倒排索引
1 收集需要建立索引的文档
2 将文档换成一个个词条(token), 该过程成为(tokenization)
3 预处理,归一化词项
4对所有文档按照其中出现的词项来建立倒排索引,索引中包括一部词典和一个全体倒排记录表
如下图,先列出词,然后排序,然后生成倒排记录,同事记录文档频率(document frequency)
1.3 布尔查询
比如查询 brutus and calpurnia
也就是取交集。合并算法如下
利用这种排序方法,则需要对倒排记录表排序。
查询优化( query optimization)
从小到大依次进行处理,如果我们先合并两
个最短的倒排记录表,那么所有中间结果的大小都不会超过最短的倒排记录表。
boolean查询的一些高级用法:
空格 表示或,&与, /s 同一个句子, /p同一个段落,/k k个词之内,等。可见布尔查询更适合专业人员。
和布尔检索模型相对的是排序检索模型或有序检索模型( ranked retrieval model)(也即给出排序的结果,现在的搜索模式)。 后者不是具有精确予以的逻辑表达式,而是采用一个或多个词构成自由文本查询(free text query) (也即更复杂)
按照逻辑AND OR的布尔查询会导致召回率与正确率的两个极端,但是很难达到均衡。