混合搜索
混合搜索结合了 向量搜索 和 关键词搜索 (BM25),以利用两种方法的优势。它同时考虑了结果的语义相似性(向量搜索)和精确的关键词相关性(BM25),从而提供更全面的搜索结果。
混合搜索并行运行两种搜索类型,并将它们的得分结合起来以生成最终的结果排名。这使其用途广泛且稳健,适用于各种搜索用例。
混合搜索的工作原理
在 Weaviate 中,混合搜索执行以下步骤:
- 并行执行两种搜索
- 向量搜索以查找语义相似的内容
- BM25 搜索以查找关键词匹配项
- 使用 融合方法 组合标准化后的得分
- 返回按组合得分排序的结果
融合策略
Weaviate 支持两种策略(relativeScoreFusion 和 rankedFusion)来组合向量和关键词搜索得分
使用 relativeScoreFusion(从 v1.24 开始的默认设置),每个对象通过标准化向量搜索和关键词搜索各自输出的指标来评分。最高值变为 1,最低值变为 0,其他值根据此比例介于两者之间。因此,总分是通过向量距离和标准化 BM25 分数的加权和计算得出的。
使用 rankedFusion(v1.23 及更早版本的默认设置),每个对象根据其在给定搜索结果中的位置进行评分,从排名最高的对象的最高分开始,并按顺序递减。总分是通过将来自向量和关键词搜索的基于排名的分数相加来计算的。
通常,relativeScoreFusion 可能是个不错的选择,这也是它成为默认设置的原因。
主要原因是 relativeScoreFusion 比 rankedFusion 保留了更多原始搜索的信息,而 rankedFusion 仅保留排名。更普遍地说,我们认为向量和关键词搜索指标中捕获的细微差别更有可能反映在 relativeScoreFusion 生成的排名中。
我们下面提供这两种融合策略的具体示例。
融合示例
假设搜索返回 五个对象,具有 文档 ID(从 0 到 4),以及 关键词 和 向量搜索 的 得分,按得分排序
| 搜索类型 | (id): 得分 | (id): 得分 | (id): 得分 | (id): 得分 | (id): 得分 |
|---|---|---|---|---|---|
| 关键词 | (1): 5 | (0): 2.6 | (2): 2.3 | (4): 0.2 | (3): 0.09 |
| 向量 | (2): 0.6 | (4): 0.598 | (0): 0.596 | (1): 0.594 | (3): 0.009 |
排名融合
得分取决于每个结果的排名,并根据 1/(RANK + 60) 计算,结果如下:
| 搜索类型 | (id): 得分 | (id): 得分 | (id): 得分 | (id): 得分 | (id): 得分 |
|---|---|---|---|---|---|
| 关键词 | (1): 0.0154 | (0): 0.0160 | (2): 0.0161 | (4): 0.0167 | (3): 0.0166 |
| 向量 | (2): 0.016502 | (4): 0.016502 | (0): 0.016503 | (1): 0.016503 | (3): 0.016666 |
如您所见,无论输入得分如何,每个排名的结果都是相同的。
相对得分融合
在相对得分融合中,最高得分设置为 1,最低得分设置为 0,并且所有介于两者之间的条目都根据其与 最大值 和 最小值 的 相对距离 进行缩放。
| 搜索类型 | (id): 得分 | (id): 得分 | (id): 得分 | (id): 得分 | (id): 得分 |
|---|---|---|---|---|---|
| 关键词 | (1): 1.0 | (0): 0.511 | (2): 0.450 | (4): 0.022 | (3): 0.0 |
| 向量 | (2): 1.0 | (4): 0.996 | (0): 0.993 | (1): 0.986 | (3): 0.0 |
因此,得分反映了原始得分的相对分布。例如,前 4 个文档的向量搜索得分几乎相同,标准化后的得分仍然如此。
比较
对于向量搜索,前 4 个对象(ID 2, 4, 0, 1)的得分几乎相同,并且它们都是很好的结果。而对于关键词搜索,一个对象(ID 1)比其他对象好得多。
这在 relativeScoreFusion 的最终结果中得到了体现,它将对象 ID 1 识别为最佳结果。这是合理的,因为该文档是关键词搜索中的最佳结果,与下一个最佳得分之间存在很大差距,并且位于向量搜索的前列。
相反,对于 rankedFusion,对象 ID 2 是最佳结果,紧随其后的是对象 ID 1 和 ID 0。
Alpha 参数
Alpha 值决定了向量搜索结果在最终混合搜索结果中的权重。Alpha 值范围为 0 到 1
alpha = 0.5(默认):两种搜索权重相等alpha > 0.5:向量搜索权重更高alpha < 0.5:关键词搜索权重更高
搜索阈值
混合搜索通过 max vector distance 参数支持最大向量距离阈值。
此阈值仅适用于混合搜索的向量搜索组件,允许您过滤掉在向量空间中过于不相似的结果,无论其关键词搜索得分如何。
例如,考虑最大向量距离为 0.3。这意味着向量距离高于 0.3 的对象将被排除在混合搜索结果之外,即使它们具有很高的关键词搜索得分。
当您希望确保语义相似性达到最低标准,同时仍然利用关键词匹配时,这会很有用。
对于混合搜索的关键词(BM25)组件或最终组合得分,没有等效的阈值参数。
这是因为 BM25 得分不像向量距离那样被标准化或限制,因此通用的阈值意义不大。
关键词 (BM25) 搜索参数
Weaviate 中的混合搜索支持关键词 (BM25) 搜索可用的所有参数。这包括例如,设置分词方法、停用词、BM25 参数 (k1, b)、搜索运算符 (and 或 or)、要搜索的特定属性和/或提升特定属性的能力。
有关这些参数的更多信息,请参阅 关键词搜索页面。
更多资源
问题和反馈
如果您有任何问题或反馈,请在 用户论坛 中告诉我们。
