Hybrid Search (混合搜索)

**来源:**Notion **原发布时间:**发布日期: 2025-10-28; 创建时间: 2025-10-28 10:35:31.670Z; 最后编辑时间: 2025-10-28 10:36:04.070Z **标签:**AI

原文:https://almond-oxygen-ceb.notion.site/Hybrid-Search-29a8b1cc19aa806bb4bbf9cb9d1badba?pvs=25


稀疏搜索,密集搜索

先来理解一下什么是稀疏搜索 (关键词搜索),密集搜索(向量搜索)。

1. 稀疏搜索 (Sparse Search) - 关键词搜索

• 为什么叫“稀疏” (Sparse)? 因为它所使用的“向量”是“稀疏”的。 •什么是“稀疏向量”?一个“稀疏向量”是一个维度超多(比如几万、几十万维),但绝大部分维度上的值都是0 的向量

[0, 0, 1, 0, 0, 0, 1, 0, ...]例子(TF-IDF /BM25): 1. 想象一下,你的“词典”里一共有 50000 个不同的词。 2.那么,你的向量就会有 50000维,每一个维度对应词典里的一个词。 3.现在,你要表示一个很短的文档:“AI产品小白”。 4. 这个文档对应的 50000维向量会长这样: ▪ … ▪ 第 1000 维 (对应 “AI”):值为 1 ▪ … ▪ 第 8888维 (对应 “产品”):值为 1 ▪ … ▪ 第 15000 维 (对应 “小白”):值为 1 ▪ …5. 在这个 50000 维的向量里,只有 3 个维度有值,剩下的49997 个维度全是 0

“稀疏搜索”(关键词搜索)就是在匹配两个“稀疏向量”里哪些“非零”的维度是重叠的(即:它们是否包含了相同的关键词)。** 2. 密集搜索 (Dense Search) - 向量搜索**

• 为什么叫“密集” (Dense)?因为它所使用的“向量”是“密集”的。 • 什么是“密集向量”?一个**“密集向量”(也就是我们一直聊的“向量嵌入”)是一个维度相对较少**(比如384 维或 768维),但几乎每一个维度上都有一个非零的、有意义的值(通常是小数)。

[-0.1, 0.9, -0.4, 1.2, ..., 0.3]

例子(BERT 嵌入): 1. 你还是用一个 768 维的 BERT模型来表示“AI产品小白”。 2. 你得到的 768 维向量会长这样: [-0.123,0.891, -0.456, 1.222, …, 0.334] 3. 在这个向量里,768个维度中的每一个都有一个值。没有“空着”的维度。 4.“AI”、“产品”、“小白”这三个词的“含义”被模型“打碎”并“密集地”混合、编码进了这全部的768 个数字中。你无法单独指出哪个维度代表“AI”。

这就是一个“密集”的向量。“密集搜索”(向量搜索)就是在计算两个“密集向量”在 768维空间中的“距离”,来判断它们的“含义”有多接近。


知识召回,即在已经建立的数据库/知识库中找资料,让它回流。在知识召回中有两大门派:语义搜索/向量搜索/密集搜索关键词搜索/稀疏搜索。

语义搜索:

他很聪明,能理解“含义”。你问他:“我想找关于悲伤的书”,他不仅会找标题带“悲伤”的,还会找“抑郁”、“难过”、“沮B”相关的书。

非常智能,能理解同义词和上下文。

但是 他对**“新词”和“专业黑话”**一无所知。如果你问他:“我想找关于Project-Phoenix-X1 的资料”,他会一头雾水(“Phoenix?凤凰?X1?这是什么含义?”),他很可能什么都找不到。

关键词搜索:

就是最古老的“搜索”方式(也叫稀疏搜索,如 BM25)。

你让他找Project-Phoenix-X1,他就会去书库里挨个检查,一字不差地找出所有提到Project-Phoenix-X1 的书。

极其擅长查找“新词”、“专业术语”、“产品代号”、“人名”。只要精确匹配,他一定能找到。

但他非常“笨”。你问他“悲伤”,他绝对找不到“抑郁”的书,因为这两个词长得不一样

混合搜索 (Hybrid Search) =把这两个方式放在一起工作。

“Alpha” (α) 参数就是那个神奇的“融合旋钮”:

它是一个 0到1 之间的值:

  • **alpha = 1** 100%相信语义搜索(只听管理员A的)。
  • **alpha = 0** 100%相信关键词搜索(只听管理员B的)。
  • **alpha = 0.5****:**两个管理员平起平坐(50% 对 50%)。

现代 RAG系统几乎标配都是“混合搜索”。它能确保在用户提问时,既能“理解含义”(语义),又能“抓住重点”(关键词)。

你可以通过调整 alpha这个“旋钮”,来决定你的AI助手是更“天马行空、重理解”(alpha高),还是更“脚踏实地、重精确”(alpha 低)。


我的产品,alpha该调成多少?

你不能猜,你必须“测试”。

  1. **准备“黄金测试集” (Golden Set):**这就是你的“电影片段”。你需要和团队(或你自己)一起,手动准备一个“标准答案”。这个“标准答案”包含两列:
  • **“模拟用户问题” (Query):**比如:“我们的Project-Phoenix-X1项目进展如何?”
  • **“你期望AI召回的文档ID” (Expected Result):**比如:doc_id_789 (即那篇《X1项目周报》)

你需要准备几十上百个这样的“问题-答案”对。

  1. 进行“网格搜索” (Grid Search):这就是你“调旋钮”的过程。你让你的RAG系统把所有“模拟问题”都跑一遍,并记录“召回的命中率”。
  • **alpha = 0.1** (偏信关键词):跑一遍测试集,命中率55%
  • **alpha = 0.3**:跑一遍测试集,命中率68%
  • **alpha = 0.5**:跑一遍测试集,命中率75%
  • **alpha = 0.7** (偏信语义):跑一遍测试集,命中率71%
  • **alpha = 0.9**:跑一遍测试集,命中率60%
  1. 找到“最佳妥协点”:**alpha = 0.5**在你的“黄金测试集”上表现最好。于是,你就把它设为你产品的“默认值”

关键点:这个值完全取决于你的“数据”

  • 如果你的产品是“医学论文库”(充满黑话),你的最佳alpha 可能会很低(比如 0.3),因为“关键词”更重要。
  • 如果你的产品是“心理咨询助手”(全是模糊的描述),你的最佳alpha 可能会很高(比如 0.7),因为“语义”更重要。

每次查询,最优的alpha不一样?

一个“静态”的 alpha = 0.5 只是一个妥协。

  • 当用户问:“PHQ-9 是什么?”(关键词黑话),系统应该用 alpha = 0.2
  • 当用户问:“我最近感觉很难过” (模糊语义),系统应该用alpha = 0.8

那么,通用的高级系统是怎么解决这个问题的呢? 答案是:他们不用**alpha**,他们用更高级的武器——“重排器”(Reranker)。

**alpha**** 混合搜索:**是在“一次召回时”就试图一个最好的融合比例。(称为“后期融合”。

**“重排器” (Reranker) 方案:**是在“多路召回后”再用一个更强的AI来做“精选”。(称为“重排”)

那么也许你要问:Reranker比alphare精度更高,那是不是可以完全替代呢?

实际上,Reranker 方案并不是用来替代alpha方案的,它们是两种不同成本和精度的工具。**alpha****方案远未过时。它仍然是目前工业界应用最广泛、最高效的混合搜索方案。**

Reranker (重排器)方案是“更强”,但它带来了巨大的成本和延迟,所以它们是两种不同场景下的选择。它是一个独立的AI 模型,在引入RAG后,在原本的embedding模型,LLM模型之外,还要Reranker模型付费。而这一步的延迟和成本是额外的,而且非常高昂的。

Embedding 模型、Reranker 模型、LLM 模型。

  • **alpha**** 方案 (廉价版混合搜索)**
  • 优点:极快、成本低、实现简单(数据库内置)。
  • 缺点: 召回率“良好”,但不是“顶尖”。那个静态的alpha 值只是一个“妥协”。
  • 适用场景:
  • 实时性要求极高的聊天机器人。
  • 成本敏感的应用。
  • 绝大多数的 RAGMVP(最小可行产品)项目。
  • Reranker 方案 (豪华版精排)
  • 优点: 召回率顶尖。
  • Reranker 通过阅读全文来判断相关性,远比 alpha那个简单的数学公式要准。
  • 缺点:显著增加延迟和计算成本
  • 适用场景:
  • 答案精度要求极高,不容忍错误的应用(比如法律、医疗问答)。
  • 用户愿意为“更准”而多等 1 秒钟的场景。
  • 成本不敏感的企业级应用。

例子:Gemini

Google从一开始就是一家“召回”公司。它的核心技术就是“排序”(Ranking)。

  1. 多路召回 (Multi-Recall): Google的系统会同时从成千上万个不同的“信息源”召回内容。这远远不只是“语义”和“关键词”两路。它会考虑:
  • 关键词匹配(稀疏)
  • 语义匹配(密集)
  • 网页的权威性(PageRank 等)
  • 信息的新鲜度(QDF - Query Deserves Freshness)
  • 你的个人偏好、地理位置…
  • …等等几十上百路召回。
  1. 超级 Reranker (The “RankBrain” Concept):在召回一个庞大的“候选列表”后,Google 不会用一个简单的 alpha公式。它会启用一个专门的、极其强大的 AI 模型(比如RankBrain 和后续的AI排序系统),这个模型就是一个超级Reranker

这个 Reranker 的工作是:

“看着这个用户的‘查询’,再看看这 1000篇‘候选文档’,请用你对世界、对语言、对用户意图的全部理解,给出一个全新的、最权威的相关性排序。”

这个 Reranker模型会综合考虑所有因素(相关性、权威性、可信度、新鲜度等),输出一个远比alpha 公式精确得多的“最终排序”。

  1. 最终喂给Gemini: 最后,这个“超级Reranker”选出的“最优上下文”(比如 Top 3的网页摘要),才会连同你的问题一起,被发送给Gemini。然后,再基于这些“顶配”的材料,为用户生成最终的答案。

值得注意的是,Gemini以及chatGPT之类的,其实是LLM的名字,决定答案的智商和文采。他所用的RAG算是它的同事(配套工具),决定的是答案的事实准确性和相关性。

市面上所有顶级的 AI 聊天产品(Google 的 Gemini 应用、微软的Copilot、Perplexity),内置了极其强大的Reranker 方案