分享好友 最新动态首页 最新动态分类 切换频道
从零到一带你实战RAG混合检索原创
2024-12-11 09:01

在之前的文章中,我们探讨了混合检索的概念以及其后续的重新排序(rerank)和重组(reorder)操作。今天,我们将从实践角度解析如何执行混合检索。下图是混合检索的流程:

从零到一带你实战RAG混合检索原创

众所周知,混合检索主要通过关键词匹配来确定可能的答案,接着结合语义匹配以进一步提升答案的精确度。BM25就是其中一种常见的关键词搜索技术。

BM25就像一个智能的匹配工具,在我们使用搜索系统时,它能帮助我们找到最相关的信息。BM25如何做到这一点呢?它主要看两个方面:首先,它会检查我们的查询词在某份文档中出现了多少次;其次,它还会看这个词在所有文档中出现的频率。如果一个词在特定文档中经常出现,但在其他地方很少见,那么这个词对这篇文档来说就非常重要,BM25会认为这篇文档与我们的查询非常匹配。此外,BM25模型对于长文档和短文档有一个平衡处理,防止因文档长度不同,而导致的词频偏差。

让我们通过一个搜索引擎的简单例子来揭示BM25的运作原理。假设你在一个搜索引擎中输入了"香蕉面包",并且有三篇文章与这个查询相关:

首先,BM25会考虑查询词(即"香蕉面包")在每篇文章中出现的频率。在文章A和C中,"香蕉面包"都出现了10次,而在文章B中出现了5次。因此,就频率而言,文章A和C可能比文章B更相关。

然后,BM25会考虑文档的长度。尽管文章A和C中"香蕉面包"的出现次数相同,但文章A只有1000字,而文章C有2000字。这意味着,在文章A中,"香蕉面包"占据了更大比例,因此可能更相关。

因此,综合考虑以上因素,搜索引擎可能会认为文章A是对"香蕉面包"这个查询最相关的结果,其次是文章B,再次是文章C。

langchain中封装了BM25对应的retriever的实现,我们来看下:

上述代码演示了我们在查询"apples"时,BM25根据词频能成功返回包含"apples"的两句话。但是,当我们将查询改为"apple"时,意外地得到了'I like oranges'这一结果。看起来BM25对单词的单复数形式十分"敏感",这也暴露出BM25的一个限制。而同样是基于词频的elasticsearch却能有效改善这一问题。在使用elasticsearch替换bm25之前,我们先凑合着用bm25看下在langchain中如何做混合检索。

在上面的代码中,我们使用了基于关键词搜索的BM25 retriever和基于向量检索的chroma retriever, 然后使用了一个EnsembleRetriever对这两个retriever搜索到的结果使用RFF算法进行整合,整合后我们先来看看查询"apples"的结果:

我们再来搜索一下"apple", 结果如下:

可以看出,基于语义的搜索对单复数形式并不敏感,'I like apples'仍然被检索到。整合后的EnsembleRetriever返回了更优质的结果,前两个都是与"苹果"相关的文档。这也证明了,我们通过使用向量检索成功地弥补了BM25这种关键词搜索可能存在的短板。

RFF 是一种数据融合方法,常用于元搜索。元搜索是将来自多个不同源或检索系统的搜索结果进行融合的过程。RRF通过考虑每个列表中项目的排名和各个列表本身的可靠性进行结果合并。

RRF算法的公式如下:

其中,S是待融合的集合,rank表示每一个条目在其列表中的排名。

以一个具体例子说明:

假设我们有三个搜索系统A、B、C,它们分别产生以下排名:

  • 系统A:[物品1, 物品2, 物品3]
  • 系统B:[物品2, 物品1, 物品3]
  • 系统C:[物品3, 物品1, 物品2]

针对物品1,它在系统A、B、C中的排名分别为1、2、2。其在RRF算法中的得分为:

同样地,我们可以计算物品2和物品3的RRF分数。然后比较这些得分,得分最高的物品就被看作是综合最优的选择。

下面是EnsembleRetriever中对数据融合的RRF算法核心实现:

我们先通过下面的docker-compose.yml安装elasticsearch

这里我们只是做演示示例,所以安装比较简单,没有安装证书和映射分词器等等,elasticsearch安装完之后,我们就可以往里面插入数据并进行查询了。在插入数据之前,我们先建好index, 这个index可以理解成向量库的collection、mysql的table:

索引创建好之后,我们可以开始插入数据。下面是一个 Python 示例,展示了如何使用 ​​ 模块向 Elasticsearch 插入数据,并进行查询:

你会看到,当我们查询 "apple" 时,Elasticsearch 能够返回所有包含 "apple" 的文档。这展示了 Elasticsearch 相比单独使用 BM25 算法的优势。此外,elasticsearch还支持模糊匹配和自动补全功能,即使用户输入有误,也能提供相关的搜索结果,感兴趣的可以自行去研究,这里我们不做重点讲解。

现在我们可以使用elasticsearch和chromadb来做混合检索了,具体代码如下:

实际上,Elasticsearch已经提供了混合检索功能。它允许在存储文档时同时存储对应的文本向量,在进行搜索时只需指定为混合搜索模式即可启用这项功能。但需注意,该功能属于付费服务。以下是相关示例代码:

在这个例子中,我们设置了DenseVectorStrategy策略并开启了混合检索模式(hybrid=True)。然而,此时我们遇到了一个报错:

这个错误表示当前的许可证并不包含“Reciprocal Rank Fusion (RRF)”功能,即Elasticsearch的混合检索功能。如果我们只设置hybrid=False,那么就会使用Elasticsearch的基础向量检索功能,而不涉及任何付费服务。


本文转载自公众号AI 博物院 作者:longyunfeigu

最新文章
SEO网站如何更新,提升搜索引擎排名的策略与技巧,优化SEO,提升搜索引擎排名的关键策略和技巧
随着互联网技术的飞速发展和网络营销的广泛应用,SEO网站优化已成为企业提高在线可见度、扩大市场份额的重要手段,在SEO实践中,有些企业和个人会忽视对SEO网站进行定期更新,导致网站收录量降低、搜索引擎排名下降甚至无法在搜索引擎中找
AI Weekly『11月11-17日』:Kimi发布新一代数学推理模型,腾讯推出AI工作台ima!
大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,A
突发!雅虎邮箱在美国多地陷入瘫痪状态
雅虎邮箱在美国各地瘫痪雅虎邮箱在美国各地瘫痪雅虎邮箱在美国各地瘫痪雅虎邮箱在美国全境崩溃雅虎邮箱在美国各地都无法正常使用了雅虎邮箱在美国各地瘫痪雅虎邮箱在美国各地瘫痪
打造专属个性在线空间,个人网站搭建平台推荐指南
个人网站搭建平台推荐,轻松打造个性化在线空间。选择合适的平台,即可轻松创建个性化网站,展现自我风采。告别繁琐,轻松入门,开启个性化网络生活。WordPressTypechoZ-BlogGitHub PagesCoding Pages在互联网飞速发展的今天,个人网站已成
淘宝宝贝的排名为什么低?其实有16个因素导致
一个店铺想要获得更多的展现和曝光的机会,那么我们就要考虑到多维度加权,就要全面考虑到影响的各个因子,并最大程度的分析各个影响因子的权重,由此才能够有针对性的加强。以下列举了16类影响宝贝权重的影响因素:1、自然搜索成交:自然
谷歌SEO优化:哪些平台适合做?
随着互联网技术的不断发展,如何在谷歌等搜索引擎上做好搜索引擎优化(SEO)已经成为当今网络营销中的重要一环。SEO的实现需要选择合适的平台进行推广和营销,那么哪些平台适合做呢?下面是一些值得你尝试的平台。Google My Business这是用
指定api路径_苹果cms如何设置api?
①接口开关:开启②是否收费:根据自己需求设置收费与否③列表每页显示数量:建议默认20④图片域名:显示图片的完整访问路径所需要,以http:开头,/结尾,不包含upload目录" (如图中方式填
谷歌浏览器(Google Chrome) 内核版v131.0.6778.205
谷歌浏览器免费版是一款安全,稳定和快速的通用浏览器。谷歌浏览器免费版的设计思想基于简单、高速、稳定、安全等理念,并采用Google独家开发出的V8引擎以提升解译JavaScript的效率,而且设计了“沙盒”、“黑名单”、“无痕浏览”等功能来
苹果cms开启微信QQ防红防封功能
声明:除特殊声明外本站文档均由作者原创,转载请注明出处,原文地址:https://www.mytheme.cn/article/177.html最**果cms更新频繁,功能不断更新叠加。今天来普及下苹果v10 更新增加的新功能“微信QQ防红防封跳转提示”开启使用教程。相信
谷歌SEO新手步骤,怎么做?
在当今这个信息爆炸的时代,网站要想在众多竞争者中脱颖而出,谷歌SEO(搜索引擎优化)无疑是一把利剑。作为一名在SEO领域摸爬滚打多年的实践者,我深知新手们面对这个复杂系统时的迷茫与困惑。因此,我将结合自己的实战经验,用通俗易懂的
相关文章
推荐文章
发表评论
0评