分享好友 最新动态首页 最新动态分类 切换频道
从零到一带你实战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服务商
英语智能聊天机器人
引言:英语智能聊天机器人是一种创新的人工智能技术,将语音识别、自然语言处理以及机器学习等技术应用于英语学习和沟通交流领域。它可以模拟人类对话的能力,并通过语音或文本与用户进行实时交流。英语智能聊天机器人在英语学习、在线客服
ai动漫文案软件有哪些
以下是若干流行的动漫文案软件它们各自具有独有的功能和特点:1. 瓦兔推文工厂:这是一款专为动漫和游戏爱好者设计的推文软件。它提供了丰富的素材库和个性化的人物角色选择让使用者可以轻松创作出独到的动漫文案并一键生成视频镜头框。2.
锦州SEO推广,助力企业腾飞的网络营销之路
随着互联网的飞速发展,网络营销已成为企业拓展市场、提升品牌知名度的重要手段。作为辽宁省的重要城市,拥有丰富的自然资源和独特的地域文化。在众多竞争激烈的企业中,如何脱颖而出?锦州SEO成为企业网络营销的利器。一、什么是SEO?SEO
王者代练:游戏技能升级与快速上分的秘密武器
在当今社会,电子竞技已经成为一种全新的竞技方式,吸引了众多游戏爱好者的关注。王者荣耀作为其中最受欢迎的游戏之一,更是让无数玩家为之疯狂。然而,对于许多玩家来说,想要在游戏中取得更高的排名和更好的成绩并不容易。这时,“王者代
高效开发Maven架构设计图解/掌握项目工程自动化技巧(精通篇三)
Maven是一个项目管理和构建自动化工具,主要服务于基于Java的项目。它使用一个名为POM(Project Object Model)的XML文件来描述项目的构建过程、依赖、插件等信息。 肖哥弹架构 跟大家“弹弹” 高并发锁, 关注公
新手申请域名技巧新手怎么注册好一个域名?
  如今,随着互联网的飞速发展,做一个网站已经成为越来越多公司的选择,但是在做一个网站的时候,最重要的一步是申请一个域名,因为我们想打开任何一个网站,都是第一个进入域名的,它作为企业的网络门面,它起到了非常大的作用,但是对
百色市工业和信息化局 百色市发展和改革委员会 关于印发《百色市散装水泥、预拌混凝土
第一章规划编制的原则和依据一、规划编制原则本规划依据国家和自治区相关政策法规,结合当前建材工业转型升级、绿色发展、高质量发展等主题进行编制,规划编制原则要求:一是把握规划的前瞻性,明确百色市散装水泥、预拌混凝土、预拌砂浆行
谷歌浏览器:Google Chrome (Win&Mac) 最新版
Google Chrome是一款由Google开发的免费网络浏览器软件。它是目前最受欢迎和广泛使用的浏览器之一,可在多个操作系统上运行,包括Windows、MacOS、Linux和移动平台。以下是Google Chrome的一些主要特点和功能:快速速度:Chrome以其快速的
森林人最新款,揭秘森林人最新款车型:全面升级与技术创新
  揭秘森林人最新款车型:性能升级与技术革新  摘要:本文将详细&#
相关文章
推荐文章
发表评论
0评