稀疏搜索,密集搜索

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

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项目周报》)

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

  2. 进行“网格搜索” (Grid Search): 这就是你“调旋钮”的过程。你让你的RAG系统 把所有“模拟问题”都跑一遍 ,并记录“召回的命中率”。

    • alpha = 0.1 (偏信关键词):跑一遍测试集,命中率 55% 。
    • alpha = 0.3:跑一遍测试集,命中率 68% 。
    • alpha = 0.5:跑一遍测试集,命中率 75% 。
    • alpha = 0.7 (偏信语义):跑一遍测试集,命中率 71% 。
    • alpha = 0.9:跑一遍测试集,命中率 60% 。
  3. 找到“最佳妥协点”: 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)
    • 你的个人偏好、地理位置…
    • …等等几十上百路召回。
  2. 超级 Reranker (The “RankBrain” Concept): 在召回一个庞大的“候选列表”后,Google 不会用一个简单的 alpha公式。它会启用一个 专门的、极其强大的 AI 模型 (比如RankBrain 和后续的AI排序系统),这个模型就是 一个超级Reranker 。

    这个 Reranker 的工作是:

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

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

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

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

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


原文存档:Notion 原文