分享好友 最新动态首页 最新动态分类 切换频道
从零到一带你实战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

最新文章
探索sem优化的挺好实践策略
探索SEM优化的最佳实践策略在数字营销中,搜索引擎营销(SEM)已成为提升品牌曝光和获得潜在客户的重要手段。SEM不仅包括了通过搜索引擎广告增加网站流量的手段,还包括通过优化广告投放策略、关键词选择以及内容调整来提高营销效果。要充
为什么百度关键词如此重要,百度关键词不行
百度关键词的重要性体现在多个方面,尤其是对于希望在百度搜索引擎上获得可见性和流量的网站或个人来说,以下是一些详细的原因和小标题,以及一个简单的单元表格来概述这些点: 1.(SEO)提高排名:通过使用正确的关键词,网站可以在百度搜索
抖音下载视频怎么去水印教程
方法一:古月水印助手(小程序)古月水印助手是一款专门针对抖音视频去水印的小程序,用户只需简单几步,就能轻松去除视频中的水印。在抖音平台上,视频内容的分享和传播已经成为一种常见的社交方式。无论是搞笑片段、舞蹈挑战,还是生活记录
电商网页设计创新与用户体验优化策略
随着互联网的不断发展,电商行业迎来了前所未有的机遇与挑战。人们越来越依赖在线购物,电商平台的竞争也愈加激烈。如何在众多电商网站中脱颖而出,吸引并留住用户,成为每个电商企业必须面对的难题。网页设计的创新与用户体验的优化,已经
注册域名要优先选择哪些后缀的?
在选时,首先需要考虑的是该域名的应用场景。因为不同的后缀与其所对应的行业或地域有着密切的联系,所以选择合适的域名后缀可以起到非常重要的作用。 下面,就让我们来一一介绍一些优先选择的域名后缀:后缀是最常见、最流行的域名后缀之
数字化营销:利用数字技术制定精准营销策略
  数字化营销:利用数字技术制定精准营销策略。数字化营销,也称为网络营销或电子营销,是一种利用数字技术,如互联网、移动设备和社交媒体等,来推广产品和服务,与消费者建立联系并提升品牌价值的营销策略。营销管理公司分析称,这种营
OpenAI完成66亿美元融资,估值达1570亿美元!
当地时间10月2日,人工智能明星公司OpenAI正式宣布,已经完成了新一轮的66亿美元融资,使公司估值达到1,570亿美元。据介绍,OpenAI新一轮融资由创投公司Thrive Capital领投,包括微软、英伟达、软银集团、Khosla Ventures、Altimeter Capit
架构设计内容分享(一百八十八):医院PACS信息系统分布式存储架构设计
目录 一、PACS 系统的存储需求 1.系统数据架构 2.系统数据存储量 3.系统数据存储方式 二、PACS 系统分布式存储架构设计 1.总体架构设计 2.存储访问协议 3. 存储容量和性能设计 4.存储网络设计 5
搜索引擎优化的基本内容和方法
一、什么是搜索引擎优化 搜索引擎优化,简称为SEO,表面的含义来看,就是让网站更容易被搜索引擎收录,并且当用户通过搜索引擎进行检索时在检索结果中获得好的排名位置,从而达到网站推广的目的。真正意义上的搜索引擎优化应该是按照规范的
ScrapingBee
ScrapingBee官网,最好的网络爬虫软件api,ai自动采集数据工具ScrapingBee有一个简单的 API,只需最少的编码知识即可上手。API文档齐全,并且有各种编程语言的代码片段可帮助用户快速入门。如果您正在寻找可靠且高效的网络抓取工具,Scraping
相关文章
推荐文章
发表评论
0评