向量搜索指标:为何你的‘距离’可能出错
Source: Dev.to
指标类型
指标类型定义了向量数据库中存储的数据之间的 “相似度”。从数学上讲,它决定了我们如何衡量两个向量之间的距离——是直线距离、角度差异,还是两者的组合。
选择正确的指标取决于两个因素:
- 你使用的数据类型(文本、图像、音频等)。
- 你使用的嵌入模型,该模型应与数据类型保持一致。
指标在创建索引时设定。如果选错了,你就会使用与嵌入模型不同的“语言”。两个向量在欧氏空间中可能看起来很接近,却在语义上毫不相关。
下面是三种主要指标类型的概述以及何时使用它们。
1. 余弦相似度(NLP 标准)
- 衡量内容: 两个向量之间的夹角。
- 忽略内容: 向量的大小(长度)。
对于文本和 NLP,这通常是默认选择。现代密集嵌入模型将语义意义编码在向量的 方向 上,而不是其长度。
示例
- 向量 A: 句子 “I love cats.”(我爱猫。)
- 向量 B: 一篇 500 字的文章,描述作者有多爱猫。
两个向量指向大致相同的方向(余弦相似度高),即使向量 B 的幅度更大。余弦相似度忽略长度,仅关注 方向。
稀疏 vs. 密集的说明: 在旧的稀疏模型(如 TF‑IDF)中,幅度代表词频。而在现代密集嵌入(如 OpenAI 的
text-embedding-3)中,幅度通常被归一化或与意义无关。
2. L2 / 欧氏距离(物理距离)
- 衡量内容: 空间中点之间的直线距离。
- 关注内容: 方向和幅度两者。
欧氏距离符合我们日常对“距离”的概念。它在 计算机视觉 和 音频 处理领域被广泛使用,因为幅度可以携带有意义的信息(例如像素强度、颜色深度)。
3. 内积(IP)(速度之王)
- 衡量内容: 一个向量在另一个向量上的投影。
- 关注内容: 方向和幅度。
IP 是 推荐系统 的标准指标,因为幅度通常反映用户偏好的强度或物品的流行度。它同时捕捉 喜欢什么(方向)和 喜欢多少(幅度)。
“免费”性能技巧
如果你的嵌入模型输出 归一化向量(长度 = 1),则内积(IP)和余弦相似度在排序顺序上是数学等价的。
- 为什么重要: IP 的计算成本低于余弦相似度,因为余弦相似度在计算时需要对向量进行除法归一化。若向量已经归一化,你可以将指标设为 IP,在保持相同排序准确性的同时提升搜索速度。
TL;DR
- 不要使用默认的指标类型。
- 文本 / RAG: 查看模型文档;通常使用 余弦。
- 图像 / 音频: 可能使用 L2(欧氏)。
- 归一化嵌入: 使用 IP 以获得免费加速。