在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大模型的风口?
领取方式在文末
为什么要学习大模型?
目前AI大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 , 大模型作为其中的重要组成部分 , 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力, 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 ,为各行各业带来了革命性的改变和机遇 。
目前,开源人工智能大模型已应用于医疗、政务、法律、汽车、娱乐、金融、互联网、教育、制造业、企业服务等多个场景,其中,应用于金融、企业服务、制造业和法律领域的大模型在本次调研中占比超过30%。
随着AI大模型技术的迅速发展,相关岗位的需求也日益增加。大模型产业链催生了一批高薪新职业:
人工智能大潮已来,不加入就可能被淘汰。如果你是技术人,尤其是互联网从业者,现在就开始学习AI大模型技术,真的是给你的人生一个重要建议!
最后
只要你真心想学习AI大模型技术,这份精心整理的学习资料我愿意无偿分享给你,但是想学技术去乱搞的人别来找我!
在当前这个人工智能高速发展的时代,AI大模型正在深刻改变各行各业。我国对高水平AI人才的需求也日益增长,真正懂技术、能落地的人才依旧紧缺。我也希望通过这份资料,能够帮助更多有志于AI领域的朋友入门并深入学习。
真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发
大模型全套学习资料展示
自我们与MoPaaS魔泊云合作以来,我们不断打磨课程体系与技术内容,在细节上精益求精,同时在技术层面也新增了许多前沿且实用的内容,力求为大家带来更系统、更实战、更落地的大模型学习体验。
希望这份系统、实用的大模型学习路径,能够帮助你从零入门,进阶到实战,真正掌握AI时代的核心技能!
01教学内容
从零到精通完整闭环:【基础理论 →RAG开发 → Agent设计 → 模型微调与私有化部署调→热门技术】5大模块,内容比传统教材更贴近企业实战!
大量真实项目案例:带你亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事!
02适学人群
应届毕业生:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。
零基础转型:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界。
业务赋能突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型。
vx扫描下方二维码即可
本教程比较珍贵,仅限大家自行学习,不要传播!更严禁商用!
03入门到进阶学习路线图
大模型学习路线图,整体分为5个大的阶段:
04视频和书籍PDF合集
从0到掌握主流大模型技术视频教程(涵盖模型训练、微调、RAG、LangChain、Agent开发等实战方向)
新手必备的大模型学习PDF书单来了!全是硬核知识,帮你少走弯路(不吹牛,真有用)
05行业报告+白皮书合集
收集70+报告与白皮书,了解行业最新动态!
0690+份面试题/经验
AI大模型岗位面试经验总结(谁学技术不是为了赚$呢,找个好的岗位很重要)
07 deepseek部署包+技巧大全
由于篇幅有限
只展示部分资料
并且还在持续更新中…
真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发