分享好友 最新动态首页 最新动态分类 切换频道
从零到一带你实战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先回答下可能有朋友的疑惑:公众号还有流
置顶常见的18种微信小程序推广方法精选热门
微信小程序只是一个推广引流的工具,而且是十分注重场景化应用的精简APP。所以小程序的推广必须要注意场景。主动推广,这是我们需要做的,毕竟工具只是工具,无法过多的主动。但是,小程序这个工具的出生带着天然优势,所以就自带很多被动
如何通过SEO优化有效提升“17.c起草99”相关主题的搜索排名
在互联网时代,越来越多的企业和个人意识到内容创作和优化对于网站流量、品牌知名度以及搜索引擎排名的重要性。为了能够更好地满足用户需求和搜索引擎的优化要求,网站内容的撰写不仅要有创意,还必须符合一定的结构和逻辑规范。今天我们将
新手如何快速上手广告联盟推广
作为新手,首先需要了解广告联盟的工作机制和运营模式。广告联盟是一种广告投放平台,联盟网站可以在自己的网页上放置联盟广告,当用户点击或转化时,联盟网站就能获得相应的佣金收益。了解这一基本原理,有助于您更好地规划推广策略。市面上有
铝合金压铸件逆向建模与压铸模具设计
原标题:基于杰魔的铝合金零件逆向建模及压铸模具设计摘要为快速响应市场、提高研发效率,对某铝合金信号放大器外壳进行逆向建模和压铸模具设计。首先采用ATOS蓝色激光扫描系统进行测量,然后应用Geomagic Design X(杰魔)软件对测量所得
沈阳企业网站设计制作,打造企业线上形象的关键
在当今数字化的时代,企业网站已成为展示自身形象、推【常德seo】广产品与服务以及与客户互动的重要平台,而沈阳作为东北地区的重要城市,其企业对于网站设计制作的需求也日益增长。沈阳的企业在进行网站设计制作时,首先要注重整体的规划
得友短视频运营
如何做短视频运营一、定位命名创新互联建站主要从事成都网站设计、成都做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务琼结,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220做短视频,首先要做的
淘宝刷收藏软件
你是否在淘宝上经常遇到收藏数不够的尴尬?又或者是想要提升店铺的人气却束手无策?那么,今天就让我们一起来了解一款能帮你解决这些问题的神奇软件吧!它就是——淘宝刷收藏软件。这款软件不仅可以帮助你快速增加收藏数,还能提升店铺的人
济源企业网络飞跃,SEO优化助力在线腾飞新引擎
济源网络推广SEO优化,是企业在线腾飞的强力新引擎。通过深度优化网站,提升搜索引擎排名,帮助企业扩大在线影响力,吸引潜在客户,实现高效网络营销。助力企业快速提升品牌知名度,抢占市场份额。随着互联网的飞速发展,已经成为企业拓展
重庆seo关键词工具(重庆SEO优化工具)
在当今数字化时代,搜索引擎优化(SEO)对于企业在线可见性和品牌建设至关重要,尤其是在竞争激烈的市场环境中,如中国西南地区的经济中心——重庆。为了有效提升网站排名,吸引目标客户,利用专业的SEO关键词工具成为了许多企业和SEO从业
相关文章
推荐文章
发表评论
0评