引言
Information Retrieval (IR):
从大规模非结构化数据 的集合中找到满足用户信息需求的资料。
包括信息的获取、表示、存储、组织和访问。
一、倒排索引
1、倒排索引介绍
其中倒排索引实现了“单词-文档矩阵”的存储,是实现单词到文档映射关系的最佳实现方式。
所谓正向索引是 通过 文档docID 查找 单词wordID
而反向索引(倒排索引)是 通过 wordID 查找 docID,从词的关键字去查找文档。
倒排索引主要由两个部分组成:“单词词典”和“倒排文件”
单词词典:文档中所有单词的集合,词典中每条索引项记录单词本身的信息和指向“倒排列表”的指针;
倒排文件:所有单词按照docID排序具有可变长度的记录列表。
通常,进行 索引建立 会给分词后的单词做些预处理,以防 索引列表过于稀疏。
2、建立倒排索引
步骤:
1)建立 词条序列 (wordID -> docID)
2)排序:先按照词条排序,再按照docID排序
3、倒排索引查询
查找Brutus AND Caesar都出现的文档:
- 在字典中分别找到Brutus和Caesar,得到它们的倒排记录表
Brutus: 2,4,8,16,32,64,128
Caesar:1,2,3,5, 8, 13, 21,34 - 通过双指针合并两个倒排记录表
双指针查找步骤:
比较docID大小:2>1 -> 下方指针右移一位 -> 2=2 -> 保留记录2,两边都右移一位 -> 4>3 -> 下方指针右移一位 -> 4< 5 -> 上方指针右移 -> 8>5 -> 下方指针右移一位 -> 8=8 -> 保留记录8,两边都右移一位 -> 16>13 -> 下方指针右移一位 -> 16< 21 -> 上方指针右移一位 -> 32>21 -> 下方指针右移一位 -> 32< 34 -> 上方指针右移一位 -> 64>34 -> 下方已遍历完,结束
二、BM25算法
bm25是一种评价 搜索词和所有文档 之间相关性的算法,用来检索模型。
有一个query和一批文档,求query和每篇文档D之间的相关性(相关性计算中统计的query和文档之间的相关概率可通过query的倒排索引来计算):
1、加权求和
首先对query切分,得到单词qi,计算qi的分数:
- 每个单词的权重Wi
- 相关性分数R:单词和D之间的相关性
- 最后对于每个单词的分数求和,得到**query和文档之间的分数**