前言
在RAG知识库中,如果要想取得不错的结果,重点之一就是要在海量的知识库中,检索出来最相关的、完整的信息,目前的检索方式有三种:密集向量检索、稀疏向量检索、关键词检索
首先需要说明一点,向量数据库的检索,和常见的对象数据库逻辑不一样
向量数据库重点在于“概率”,相同的关键词,在不同的参数或方式下,查询出来的结果是不同的,查询出来的数量也是可控制的
但对象数据库是确定性的,不论是等于还是like,在数据和关键词不变的情况下,查询的结果总是确定的
这是理解上述三种检索方式的思维前提,我们需要先跳出查询结果是确定性的这个思维定式
接下来我们详细了解下,这三种检索方式的原理以及优缺点,以便在业务中选择最合适的检索方式
开始前,我们先介绍两种算法:TF-IDF 和 BM25,这两种算法跟关键词检索和稀疏向量检索密切相关
TF-IDF 和 BM25
TF-IDF是什么
TF-IDF 的全称是 Term Frequency-Inverse Document Frequency,即词频-逆文档频率。
主要用来评估一个词语对于一个文件集或语料库中的其中一份文件的重要程度。一个词语在某篇文章中出现的频率高(TF高),并且在其他文章很少出现(IDF高),则认为该词语有很好的区分能力,对这篇文章更重要
- TF (词频):一个词在一篇文档中出现的频率。
- IDF (逆文档频率):一个词在整个文档集合 中的普遍重要性。出现越广泛的词(如“的”、“是”),其重要性越低;出现越罕见的词,其重要性越高。
TF-IDF的值就是 TF 与 IDF 的乘积。
TF (Term Frequency) - 词频
词频表示一个词在文档中出现的次数。但为了消除不同文档长度带来的偏差,会对词频进行标准化。常见的标准化方法是使用相对词频。
公式1:相对词频
TF(t, d) = (词t在文档d中出现的次数) / (文档d中所有词的总数)
例如:一篇文档总共有100个词,其中“苹果”出现了5次,那么“苹果”的TF值就是 5 / 100 = 0.05。
IDF (Inverse Document Frequency) - 逆文档频率
逆文档频率的核心逻辑是,如果一个词在很多文档出现,那么这个词可能不重要,比如“的”,“是”等,无法用于区分文章。反之,如果一个词只在少数几篇文章出现,那么说明这个词对这几篇文章的筛选很重要,可以用于区分文章
IDF(t, D) = log( (语料库中文档的总数N) / (包含词t的文档数 + 1) )
N:语料库中文档的总数。包含词t的文档数:也叫“文档频率”(DF)。如果一个词越常见,这个值就越大。+1:平滑项(Laplace Smoothing),防止分母为0(即防止某个词不在任何文 档中出现的情况)。有时也用 +1 或 +0.5 等其他平滑方式。
“逆”体现在哪里?
- 常见词(如“的”)的DF很高,
N/DF的值接近1,取对数后接近0,从而降低了该词的权重。 - 罕见词的DF很低,
N/DF的值很大,取对数后得到一个较大的正数,从而提升了该词的权重。
log 的作用是压缩尺度,使IDF的值不会因为N和DF的差距过大而爆炸式增长。
TF-IDF
最终,一个词t对于文档d在语料库D中的TF-IDF值计算如下:
TF-IDF(t, d, D) = TF(t, d) * IDF(t, D)
- TF-IDF值与一个词在文档中的出现次数成正比。一个词在某篇文档中出现的次数越多,TF-IDF值越大,说明这个词可以用来查询这个文档
- TF-IDF值与包含该词的文档数成反比。一个词在整个语料库内出现的文档数越多,TF-IDF值越小,说明这词太常见了,在几乎所有文档都有,无法用来查询某个文档
因此,在你输入一句话时,TF-IDF可以针对其中的某些词,查询出这个词出现的此处较多的文档,但是会避免使用场景词语比如“的”“是”等查询文档,因为这些词在所有文档出现的次数都很多

BM25
BM25是TF-IDF的改进版,核心还是使用词频和逆文档频率计算文档的相关性。通过引入一系列参数和算法优化,由于算法有点复杂,暂时不做深入研究,理解原理即可。BM25的计算公式如下
Score(D, Q) = Σ(i=1 to n) IDF(q_i) * [ (TF(q_i, D) * (k1 + 1)) / (TF(q_i, D) + k1 * (1 - b + b * |D| / avgdl)) ]
BM25相对TF-IDF做了一些改进
- 控制词频的无限增大
在TF-IDF中,词频是不受限制的,比如“的”在某个文档中出现了1000次,他的TF值会很高,这显然是不合理的。因此BM25引入了饱和函数限制TF值的无限增大
- 控制文档长度对算法的影响
TF-IDF只对文档内的词频进行了归一化处理(除以总词数),但没有考虑不同文档之间的长度差异。一篇长文档自然比短文档包含更多的词,因此任何一个词在长文档中出现的概率本身就更高,但这并不一定意味着长文档与查询更相关。
- 逆文档频率的调整
BM25使用的IDF公式也与标准IDF略有不同,但其核心思想一致:惩罚常见词,提升罕见词的权重。
BM25的这些改进,使得算法对于某篇文档的匹配度评分时,更少的受到文档本身的长度、某些常见词的高频出现的影响,通过更科学的函数控制这些因素对于评分的影响,使得BM25在信息检索领域的实际应用中,其效果几乎总是优于传统的TF-IDF
现在让我们进入正题,首先看一下关键词检索
关键词检索
通过对上述两个算法的介绍,我们不难猜出,关键词检索,绝不仅仅是像对象数据库中的“like”那样简单的获取包含这个关键词的所有数据
而是根据一系列算法,如TF-IDF或BM25,对重要的词优先检索,对不重要的词,降低对检索的影响,从而得出整个语料库中,满足检索关键词的,评分最高的文档
密集向量检索
说到密集向量检索,我们又不得不再次提到向量化
向量化是指将非结构化的数据,如文本,转换为结构化的向量,是由一系列数字组成的高维数组。
如“我喜欢吃苹果。”这句话,经过向量算法,可能被转化为[0.8, 0.2, 0.1](实际中维度通常是几百或上千)
密集向量检索,实际上是计算关键词与被匹配文档的余弦相似度,从而得出“最像”的文本
假设我们有三部电影:
- 《星际穿越》:简介:“一群探险家穿越虫洞,进行太空冒险的故事。”
- 《盗梦空间》:简介:“一群特工进入他人梦境,窃取秘密的故事。”
- 《玩具总动员》:简介:“一个男孩的玩具们活了过来并一起冒险的故事。”
我们使用一个文本嵌入模型将所有简介转换为向量(假设为3维)并存入向量数据库:
- 《星际穿越》向量:
[0.9, 0.1, 0.2]// 高维代表“太空”、“科幻” - 《盗梦空间》向量:
[0.8, 0.2, 0.1]// 高维代表“梦境”、“科幻” - 《玩具总动员》向量:
[0.1, 0.8, 0.9]// 低维代表“科幻”,高维代表“玩具”、“动画”
现在,用户输入查询:“给我找一些关于在想象世界里冒险的科幻电影。”
- 向量化查询:将用户的查询语句也通过同一个模型转换为向量。假设得到查询向量:
[0.85, 0.15, 0.1]。这个向量捕捉了“科幻”、“冒险”、“想象世界”等核心语义。 - 相似度计算:系统计算查询向量与数据库中所有电影向量的余弦相似度(一种衡量向量方向相似性的指标,值越接近1越相似)。
- 与《星际穿越》相似度:0.995
- 与《盗梦空间》相似度:0.993
- 与《玩具总动员》相似度:0.45
- 返回结果:系统按照相似度从高到低返回最相关的电影。即使用户的查询中没有出现“太空”、“梦境”、“虫洞”等任何电影简介里的具体关键词,系统依然能通过向量的语义理解返回最相关的结果:《星际穿越》和《盗梦空间》。
密集向量检索解决了关键词检索中,相似语句的匹配度问题,如“香蕉”“苹果”这两个在关键词匹配时不可能被匹配到一起的词,在向量检索中,可能因为这两个词的“水果”属性被匹配
换言之,密集向量检索可以基于语义检索,而关键词检索只能基于词语本身检索
稀疏向量检索
稀疏向量检索,可以理解为关键词检索的更优化算法,核心逻辑是将文本表示为一个很长的向量,这个向量的维度对应于整个词汇表(比如英语中的所有单词),可能是数万或者数百万维度,但向量中绝大多数位置的值都是0,只有少数几个对应着文档中实际出现过的词的位置不为零。因此,它被称为“稀疏”向量。
稀疏向量中,每一个有值的向量都代表一个词,因此可以很好的验证检索的生效关键词
相对来讲,密集向量的多数维度都有值,而且维数相对较低(几百或者几千)
稀疏向量通常使用 TF-IDF或BM25计算关键词,然后将关键词的TF-IDF值加入到这个稀疏向量中这个关键词对应的位置
现在我们有三篇文档:
- D1: “苹果是一种水果。” → 包含词:
苹果,水果 - D2: “苹果公司生产手机。” → 包含词:
苹果,公司,手机 - D3: “香蕉和苹果都是水果。” → 包含词:
香蕉,苹果,水果
我们使用一种简单的二进制表示法(如果词出现则为1,否则为0)。它们的稀疏向量如下(维度顺序为:[苹果, 手机, 水果, 香蕉, 公司]):
- D1:
[1, 0, 1, 0, 0] - D2:
[1, 1, 0, 0, 1] - D3:
[1, 0, 1, 1, 0]
可以看到,每个向量大部分都是0。
在实际应用中,我们不会用简单的1和0,而是使用TF-IDF值,它更能体现一个词对文档的重要性。
用户输入查询:“水果”。
- 向量化查询:查询Q“水果”的向量为:
[0, 0, 1, 0, 0]。 - 计算相似度:通常使用点积或余弦相似度来计算查询向量与每个文档向量的相似度。
- 返回结果:根据相似度排序,返回排名靠前的文档
关键词检索和稀疏向量检索几乎类似,稀疏向量检索是关键词检索的数学化实现。但是在一些匹配度要求极高的情况下,如法律,医疗等,依然需要使用关键词检索
对比

目前在RAG中,通常采用混合检索策略,同时使用稀疏检索和密集检索,然后将两者的结果进行融合和重新排序。
- 稀疏检索可以快速地从海量文档中筛选出一个候选集
- 密集检索可以理解语义的情况下,检索出更多稀疏检索无法检索到的内容
混合检索方式既能利用关键词检索的快速和稳定,又能发挥语义理解的智能和精准
以上就是对于RAG中几种检索方式的介绍,在实际的业务中,还需要根据自己的语料库和需求情况,选择合适的方式及混合比例进行检索,力求达到满足业务的检索结果
在检索结束后,为了保证信息不被遗漏,我们可能会检索大量的结果,此时直接将所有结果输入大语言模型,仍会因信息过载而影响生成质量与效率。因此,我们还需对召回结果进行精细化筛选与重排(ReRank),为后续的大模型生成提供更优质、更聚焦的上下文信息,在达到效果的前提下高效的完成任务。
最后
为什么要学AI大模型
当下,⼈⼯智能市场迎来了爆发期,并逐渐进⼊以⼈⼯通⽤智能(AGI)为主导的新时代。企业纷纷官宣“ AI+ ”战略,为新兴技术⼈才创造丰富的就业机会,⼈才缺⼝将达 400 万!
DeepSeek问世以来,生成式AI和大模型技术爆发式增长,让很多岗位重新成了炙手可热的新星,岗位薪资远超很多后端岗位,在程序员中稳居前列。

与此同时AI与各行各业深度融合,飞速发展,成为炙手可热的新风口,企业非常需要了解AI、懂AI、会用AI的员工,纷纷开出高薪招聘AI大模型相关岗位。

最近很多程序员朋友都已经学习或者准备学习 AI 大模型,后台也经常会有小伙伴咨询学习路线和学习资料,我特别拜托北京清华大学学士和美国加州理工学院博士学位的鲁为民老师给大家这里给大家准备了一份涵盖了AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频 全系列的学习资料,这些学习资料不仅深入浅出,而且非常实用,让大家系统而高效地掌握AI大模型的各个知识点。
这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】
AI大模型系统学习路线
在面对AI大模型开发领域的复杂与深入,精准学习显得尤为重要。一份系统的技术路线图,不仅能够帮助开发者清晰地了解从入门到精通所需掌握的知识点,还能提供一条高效、有序的学习路径。

但知道是一回事,做又是另一回事,初学者最常遇到的问题主要是理论知识缺乏、资源和工具的限制、模型理解和调试的复杂性,在这基础上,找到高质量的学习资源,不浪费时间、不走弯路,又是重中之重。
AI大模型入门到实战的视频教程+项目包
看视频学习是一种高效、直观、灵活且富有吸引力的学习方式,可以更直观地展示过程,能有效提升学习兴趣和理解力,是现在获取知识的重要途径

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

海量AI大模型必读的经典书籍(PDF)
阅读AI大模型经典书籍可以帮助读者提高技术水平,开拓视野,掌握核心技术,提高解决问题的能力,同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说,阅读经典书籍是非常有必要的。

600+AI大模型报告(实时更新)
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

AI大模型面试真题+答案解析
我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下


这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】
98

被折叠的 条评论
为什么被折叠?



