稀疏搜索,密集搜索

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

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?这是什么含义?”),他很可能什么都找不到。

关键词搜索: