向量检索服务 DashVector 免费试用进行中,玩转大模型搜索,快来试试吧~
了解更多信息,请点击:https://www.aliyun.com/product/ai/dashvector
随着对检索增强生成(RAG)管道的最近关注,开发人员已经开始讨论在构建具有生产就绪性能的RAG管道时所面临的挑战。就像生活中的许多方面一样,帕累托法则也在RAG管道中发挥作用,其中达到最初的80%相对较简单,但达到剩下的20%以达到生产就绪状态则变得具有挑战性。
最近,随着人们对检索增强生成(RAG)管道的关注,开发人员开始讨论构建具有生产就绪性能的 RAG 管道所面临的挑战。就像生活中的许多方面一样,帕累托(Pareto)原则也适用于 RAG 管道,在这种情况下,实现最初的 80% 相对简单,但要达到生产就绪的剩余 20% 则具有挑战性,一个经常重复的主题是利用混合搜索改进 RAG 管道的检索部分。
已经积累了构建 RAG 管道经验的开发人员开始分享他们的见解。其中一个经常重复的主题是利用混合搜索改进 RAG 管道的检索部分。
本文将向您介绍混合搜索的概念、混合搜索如何通过检索更多相关结果来帮助您提高 RAG 管道性能,以及何时使用混合搜索。
- 什么是混合搜索
- 混合搜索如何工作?
- 混合搜索如何提高 RAG 管道的性能?
- 何时使用混合搜索?
- 总结
什么是混合搜索
混合搜索是一种搜索技术,它结合了两种或两种以上的搜索算法,以提高搜索结果的相关性。虽然没有明确定义是哪种算法的组合,但混合搜索最常见的是指传统的基于关键字的搜索和现代的向量搜索的组合。
传统上,基于关键词的搜索是搜索引擎的不二选择。但随着机器学习(ML)算法的出现,向量嵌入带来了一种新的搜索技术——向量或语义搜索——使我们能够对数据进行语义搜索。不过,这两种搜索技术都需要考虑必要的权衡:
- 基于关键字的搜索:虽然其精确的关键字匹配功能对特定术语(如产品名称或行业术语)很有帮助,但它对错别字和同义词很敏感,从而导致错过重要的上下文。
- 向量或语义搜索:虽然其语义搜索能力允许基于数据的语义含义进行多语言和多模态搜索,并且使其对于错别字具有强大的鲁棒性,但它可能会漏掉关键字。此外,它取决于生成的向量嵌入的质量,并对领域外术语敏感。
将基于关键字的搜索和矢量搜索结合到混合搜索中,可以充分利用这两种搜索技术的优势,提高搜索结果的相关性,尤其是在文本搜索使用案例中。
例如,搜索查询 "How to merge two Pandas DataFrames with .concat()
?"。关键词搜索有助于找到 .concat()
方法的相关结果。但是,由于 "merge "一词有 "combine"、"join "和 "concatenate "等同义词,如果我们能利用语义搜索的上下文感知功能(详见 "何时使用混合搜索"),将会有所帮助。如果您有兴趣,可以在这个实时演示中使用不同的基于关键字、语义和混合搜索查询来搜索电影(本文将详细介绍其实现过程)。
混合搜索如何工作?
混合搜索将基于关键词的搜索技术和基于向量的搜索技术结合在一起,对它们的搜索结果进行融合和重新排序。
基于关键字的搜索
在混合搜索中,基于关键词的搜索通常使用一种叫做稀疏嵌入的表示法,因此也被称为稀疏向量搜索。稀疏嵌入是指大部分值为零,只有少量非零值的向量,如下所示:
[0, 0, 0, 0, 0, 1, 0, 0, 0, 24, 3, 0, 0, 0, 0, ...]
稀疏嵌入可以用不同的算法生成。最常用的稀疏嵌入算法是 BM25(Best match 25),它建立在 TF-IDF(词频-逆文档频率)方法的基础上,并对其进行了改进。简单来说,BM25 根据术语在某一文档中的频率相对于其在所有文档中的频率来强调术语的重要性。
向量搜索
向量搜索是随着 ML 的发展而出现的一种现代搜索技术。现代 ML 算法(如 Transformers)可以生成数据对象在各种模式(文本、图像等)中的数字表示,称为向量嵌入。
如下所示,这些向量嵌入通常信息密集,且大多由非零值(密集向量)组成。因此,向量搜索也被称为密集向量搜索,如下图所示:
[0.634, 0.234, 0.867, 0.042, 0.249, 0.093, 0.029, 0.123, 0.234, ...]
搜索查询被嵌入到与数据对象相同的向量空间中。然后,根据指定的相似度量(如余弦距离),利用其向量嵌入来计算最接近的数据对象。返回的搜索结果会列出最接近的数据对象,按其与搜索查询的相似度进行排序。
基于关键词和向量搜索结果的融合
基于关键字的搜索和向量搜索都会返回一组单独的结果,通常是按计算相关性排序的搜索结果列表。这些独立的搜索结果集必须合并。
一般来说,搜索结果通常会首先进行评分。这些分数可以根据指定的指标计算,例如余弦距离,或者仅仅是搜索结果列表中的排名。
然后,用参数 alpha
对计算出的分数进行加权,该参数决定了每种算法的权重,并影响结果的重新排序。
hybrid_score = (1 - alpha) * sparse_score + alpha * dense_score
通常,alpha
取值在 0 和 1 之间,其中
- alpha = 1:纯向量搜索
- alpha = 0:纯关键词搜索
下面是关键字搜索和向量搜索融合的一个最小示例,根据排名和 alpha = 0.5
进行评分。
混合搜索如何提高 RAG 管道的性能?
RAG 管道有许多可以调整的旋钮,以提高其性能。其中一个旋钮就是提高检索到的上下文的相关性,因为如果检索到的上下文与给定问题的答案不相关,那么 LLM 也无法生成相关的答案。
根据您的上下文类型和查询,您必须确定这三种搜索技术中哪一种最适合您的 RAG 应用程序。因此,控制基于关键字的搜索和语义搜索之间权重的参数 alpha
可以看作是一个需要调整的超参数。
何时会使用混合搜索?
混合搜索非常适合以下使用情况:您希望启用语义搜索功能,获得更类似于人工的搜索体验,但同时也需要对特定术语(如产品名称或序列号)进行精确的短语匹配。
最初,Stack Overflow 使用 TF-IDF 将关键字与文档进行匹配。然而,描述您试图解决的编码问题可能会很困难。它可能会根据您用来描述问题的词语而导致不同的结果(例如,组合两个 Pandas DataFrames 可以用不同的方法完成,如合并、连接和串联)。因此,语义搜索等更能感知上下文的搜索方法更适合这些情况。
但另一方面,Stack Overflow 的一个常见使用情况是复制粘贴错误信息。在这种情况下,精确的关键字匹配是首选的搜索方法。此外,您还需要对方法和参数名称(例如 Pandas 中的 .read_csv()
)进行精确的关键字匹配。
正如猜测的这样,许多类似的实际使用案例都受益于上下文感知语义搜索,但仍然依赖于精确的关键词匹配。实施混合搜索检索器组件可以让这些使用案例受益匪浅。
总结
本文介绍了混合搜索的背景,即基于关键词的搜索和向量搜索的结合。混合搜索合并了不同搜索算法的搜索结果,并对搜索结果进行相应的重新排序。
在混合搜索中,参数 alpha
控制着基于关键词的搜索和语义搜索之间的权重。该参数 alpha
可被视为 RAG 管道中的一个超参数,用于提高搜索结果的准确性。
我们展示了混合搜索如何在语义搜索可以改善搜索体验的使用案例中发挥作用。不过,当特定术语频繁出现时,精确的关键词匹配仍然很重要。
免费体验阿里云高性能向量检索服务:https://www.aliyun.com/product/ai/dashvector