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维空间中的“距离”,来判断它们的“含义”有多接近。
什么是混合搜索(Hybrid Search)
知识召回,即在已经建立的数据库/知识库中找资料,让它回流。在知识召回中有两大门派:语义搜索/向量搜索/密集搜索, 关键词搜索/稀疏搜索。
语义搜索:
他很聪明,能理解“含义”。你问他:“我想找关于悲伤的书”,他不仅会找标题带“悲伤”的,还会找“抑郁”、“难过”、“沮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该调成多少?
你不能猜,你必须“测试”。
- **准备“黄金测试集” (Golden Set):**这就是你的“电影片段”。你需要和团队(或你自己)一起,手动准备一个“标准答案”。这个“标准答案”包含两列:
- **“模拟用户问题” (Query):**比如:“我们的
Project-Phoenix-X1项目进展如何?” - **“你期望AI召回的文档ID” (Expected Result):**比如:
doc_id_789(即那篇《X1项目周报》)
你需要准备几十上百个这样的“问题-答案”对。
- 进行“网格搜索” (Grid Search):这就是你“调旋钮”的过程。你让你的RAG系统把所有“模拟问题”都跑一遍,并记录“召回的命中率”。
**alpha = 0.1**(偏信关键词):跑一遍测试集,命中率55%。**alpha = 0.3**:跑一遍测试集,命中率68%。**alpha = 0.5**:跑一遍测试集,命中率75%。**alpha = 0.7**(偏信语义):跑一遍测试集,命中率71%。**alpha = 0.9**:跑一遍测试集,命中率60%。
- 找到“最佳妥协点”:
**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)。
- 多路召回 (Multi-Recall): Google的系统会同时从成千上万个不同的“信息源”召回内容。这远远不只是“语义”和“关键词”两路。它会考虑:
- 关键词匹配(稀疏)
- 语义匹配(密集)
- 网页的权威性(PageRank 等)
- 信息的新鲜度(QDF - Query Deserves Freshness)
- 你的个人偏好、地理位置…
- …等等几十上百路召回。
- 超级 Reranker (The “RankBrain” Concept):在召回一个庞大的“候选列表”后,Google 不会用一个简单的
alpha公式。它会启用一个专门的、极其强大的 AI 模型(比如RankBrain 和后续的AI排序系统),这个模型就是一个超级Reranker。
这个 Reranker 的工作是:
“看着这个用户的‘查询’,再看看这 1000篇‘候选文档’,请用你对世界、对语言、对用户意图的全部理解,给出一个全新的、最权威的相关性排序。”
这个 Reranker模型会综合考虑所有因素(相关性、权威性、可信度、新鲜度等),输出一个远比alpha 公式精确得多的“最终排序”。
- 最终喂给Gemini: 最后,这个“超级Reranker”选出的“最优上下文”(比如 Top 3的网页摘要),才会连同你的问题一起,被发送给Gemini。然后,再基于这些“顶配”的材料,为用户生成最终的答案。
值得注意的是,Gemini以及chatGPT之类的,其实是LLM的名字,决定答案的智商和文采。他所用的RAG算是它的同事(配套工具),决定的是答案的事实准确性和相关性。
市面上所有顶级的 AI 聊天产品(Google 的 Gemini 应用、微软的Copilot、Perplexity),都内置了极其强大的Reranker 方案。