VSAG 中的度量语义
本页说明 VSAG 对 l2、ip 和 cosine 的实际处理方式。
警告:VSAG 的内部度量实现是为了性能和一致性做过优化的, 其行为可能与教科书上的数学定义不完全一致。做结果对比或准备 真值时,请以本页描述的语义为准。
VSAG 的搜索接口统一采用“越小越好”的距离模型。为保证性能和跨索引行为一致, 内部实现常会复用平方距离、归一化向量或模长缓存。
l2
- 距离计算公式为
L2Sqr(L2 平方距离)。 - 内部很多内核会直接使用
L2Sqr来加速计算。 - 平方形式是为了性能考虑,排序结果仍与 L2 距离一致。返回的距离值和 范围搜索阈值都是平方后的值。
ip
- 距离计算公式为
1 - inner_product。 - 内积越大,距离越小。
cosine
- 距离计算公式为
1 - cosine_similarity。 - 为了性能,某些实现会先归一化向量,或保存额外的模长信息, 以复用面向 IP 的计算内核。
cosine 搜索通常假定内部计算路径使用归一化向量。由于实现可能会 执行归一化或缓存模长,返回值的语义目标仍是“距离”,但浮点误差 可能使结果略微偏离理论值域。
返回值范围
l2:0到+infinityip:无上界;当inner_product > 1时,值可能为负cosine:理论上在 cosine similarity 落在[-1, 1]时为0到2, 但浮点误差下可能略微越界
为什么要说明这一点
- 数据集真值、查询语义和索引内部实现必须使用同一套度量约定。
- 索引构建后,
l2、ip、cosine不能互相切换。 - 跨工具对比结果时,要先确认对方使用的是“距离”还是“相似度”语义。