多向量检索
多向量检索(Multi-Vector Retrieval)是检索增强生成(RAG)系统中使用的一项高级技术,通过为每个文档关联多个向量来增强文档检索效果。
与单向量检索不同,使用 MaxSim 操作符的多向量检索能够捕捉细粒度的语义关系。
关于如何构建端到端的多向量检索应用,请参阅我们的博客了解更多细节。
快速上手
晚期交互(Late interaction)模型会将文档和查询分别嵌入为向量数组,并通过名为 MaxSim 的操作符计算相似度。MaxSim 操作符的定义为 ,即对于查询向量数组中的每个向量,在文档向量数组中找到最接近的向量,计算它们的点积,最后将所有结果求和。
在 VectorChord 中,该操作符的符号为 @#。左操作数是文档向量数组,右操作数是查询向量数组。原始的 MaxSim 操作符基于相似度,而 VectorChord 中的操作符则基于距离:VectorChord 的实现通过对相似度得分取反,将其解释为一种距离度量。
要为向量数组构建索引,首先创建一个名为 items 的表,其中包含一个类型为 vector(n)[] 的 embeddings 列,然后向表中填充生成的数据。
与其他向量操作符一样,使用 MaxSim 操作符的查询也可以通过索引进行加速。
随后,您便可以使用该索引执行向量搜索。
参考
vchordg 不支持此功能。
操作符类
请参阅:
搜索参数(vchordrq)
vchordrq
MaxSim 操作符的索引机制与其他向量操作符类似。当在向量数组列上构建索引时,数组中的每个向量都会被单独插入到索引数据结构中。在查询期间,索引会对查询数组中的每个向量分别执行一次独立的向量搜索。默认情况下,索引不会对结果进行重排序(rerank),而是使用 RaBitQ 的估算距离代替实际距离。随后,索引会将所有独立向量搜索的结果进行合并,以生成最终输出。
MaxSim 索引还使用了以下几个额外参数:
vchordrq.maxsim_refine
since v0.3.0
- 说明:GUC 参数
vchordrq.maxsim_refine会让索引对结果进行重排序,用实际距离替换 RaBitQ 的估算距离,直到前 k 个(top-k)最近向量的距离全部重新计算完毕。 - 类型:整数(integer)
- 取值范围:
[0, 2147483647] - 默认值:
0- 该参数支持回退参数(fallback)。
- 示例:
SET vchordrq.maxsim_refine = 0表示索引始终使用 RaBitQ 的估算距离。SET vchordrq.maxsim_refine = 1024表示索引会对结果进行重排序,用实际距离替换 RaBitQ 的估算距离,直到前 1024 个最近向量的距离全部重新计算完毕。
vchordrq.maxsim_threshold
since v0.3.0
- 说明:GUC 参数
vchordrq.maxsim_threshold启用对缺失值更激进的估算策略。启用该设置后,索引会在最底层列表中找到累积大小达到或超过vchordrq.maxsim_threshold的第一个聚类(cluster),并使用其与查询向量的距离来估算缺失值。 - 类型:整数(integer)
- 取值范围:
[0, 2147483647] - 默认值:
0- 该参数支持回退参数(fallback)。
- 示例:
SET vchordrq.maxsim_threshold = 0表示不启用更激进的估算策略。SET vchordrq.maxsim_threshold = 1024表示索引会在最底层列表中找到累积大小达到或超过1024的第一个聚类,并使用其与查询向量的距离来估算缺失值。