检索与倒排索引

本文介绍了信息检索中的倒排索引,详细讲解了倒排索引的构造过程和查询机制,并探讨了优化查询的WAND算法。此外,文章还深入讨论了BM25算法,一种用于评估搜索词与文档相关性的方法,其中考虑了单词频率和IDF权重。
部署运行你感兴趣的模型镜像

引言

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和文档之间的分数**

在这里插入图片描述

2、其中单词权重Wi使用 IDF 表示

单词qi在文档中出现的次数越少,权重越大。
在这里插入图片描述
N -> 所有文档数目;dfi -> 包含了单词qi的文档数

3、R相关性分为两部分:

单词与文档的相关性:

BM25的设计依据一个重要的发现:词频和相关性之间的关系是非线性的\color{Blue}{词频和相关性之间的关系是非线性的}线,也就是说,每个词对于文档的 相关性分数不会超过一个特定的阈值\color{Blue}{相关性分数不会超过一个特定的阈值},当词出现的次数达到一个阈值后,其影响就不在线性增加了,而这个阈值会跟文档本身有关。
在这里插入图片描述

单词与query的相关性:

当query很长时,我们还需要刻画单词与query的之间的权重,对于短的query,这一项不是必须的。
在这里插入图片描述
tftd-> 表示qi出现在的d文档数;tftq -> 表示qi在query中出现的次数;Ld -> 表示当前文档的长度;Lave -> 平均doc长度;k1 -> 2;k3 -> 1;b -> 075。

4、BM25最终公式:

在这里插入图片描述
经过试验,上面三个可调参数, [k1] 和 [k3 ] 可取1.2~2,b取0.75

三、倒排索引的优化WAND算法

wand(weak and)算法:计算文本相关性,找出Topk个相关文档。

优势:
采用倒排索引的方式查询,虽然比全量遍历节约大量时间,但有时仍会很慢。wead-and算法通过计算每个词对相关性贡献的上限(TF−IDF)\color{Blue}{计算每个词对相关性贡献的上限(TF-IDF)}TFIDF估计文档的相关性上限\color{Blue}{估计文档的相关性上限}建立一个阈值对倒排中的结果进行减枝\color{Blue}{建立一个阈值对倒排中的结果进行减枝},达到提速\color{Red}{提速}的效果。

首先计算每个词的TF-IDF(一般IDF是固定的,只需要估计一个词在各个文档的词频IF,记录这个词的最大TF),再计算一个query和一个文档的相关性上限值,即query中在同一篇文档共同出现的相关性上限之和。通过与预设的阈值比较,若query与文档的相关性大于阈值,则计算query在该偏文档的相关性;若小于,则丢弃,查看下一篇文档。

例子:
在这里插入图片描述

1、计算query中每个词在各个文档中的TF-IDF,记录每个词的贡献最大值

TF-IDFmax
The0.9
quick1.9
brown2.3
fox7.1

2、倒排索引表上滑动指针,依次计算query在每个文档的相关性

在这里插入图片描述
query中词语出现的第一篇文档是docID=2,出现词只有The和brown,假设他们的文档相关性得分分别为0.1、1.9,那么query在docID=2上的得分是2.0;滑动窗口,下一篇文档是docID=3,只有The,假设得分是0.5。(topk=2)

ScoredocID
2.02
0.53

依次滑向下一个窗口docID=4,由于brown的贡献上限是2.3,大于0.5(这里的0.5相当于是个估计阈值),很有可能得出query在该文档docID=4上的相关性大于query在docID=3上的相关性,所以计算docID=4的文档相关性,假设是1.4(>0.5),更新表格。
在这里插入图片描述

ScoredocID
2.02
1.44

依次滑动窗口docID=5:
在这里插入图片描述
依次滑动窗口docID=6:
在这里插入图片描述
query在docID=6上的最大贡献度1.9,比表格中最小的2.0还小,说明query在docID=6的相关性不可能比超过已计算的top2的相关性,所以
不计算query在docID=6的相关性,再次滑动窗口docID=7…依次类推…
在这里插入图片描述

ScoredocID
8.17
813

当docID>13,发现query的贡献度都不可能大于表格中top2的score,所以结束。

您可能感兴趣的与本文相关的镜像

Wan2.2-T2V-A5B

Wan2.2-T2V-A5B

文生视频
Wan2.2

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值