向量搜索有两个关键的概念组成部分:索引和距离度量。一些流行的向量索引包括HNSW、IVF和ScaNN。主要的距离度量有三种:L2或欧几里得距离、余弦相似度和内积。对于二进制向量,其他度量包括汉明距离和杰卡德指数。
向量可以表示为数字列表或作为方向和大小(lists of numbers or as an orientation and a magnitude)。
为了更容易理解这一点,可以想象向量是指向空间中特定方向的线段。
- L2或欧几里得度量是两个向量的“斜边”度量。它测量的是向量线段末端之间的距离大小。
- 余弦相似度是两条线相交处的角度。
- 内积是一个向量在另一个向量上的“投影”。直观上,它同时测量向量之间的距离和角度。
L2 欧式距离
使用场景:
当向量具有不同的大小时,主要关心的是,词在空间中的距离或语义距离。
余弦相似度
使用场景:
主要用于自然语言处理(NLP)应用。
余弦相似度测量的主要是语义方向的差异。如果使用的是归一化向量,余弦相似度等同于内积。
内积
内积是一个向量在另一个向量上的投影。内积的值是向量长度的延伸。两个向量之间的角度越大,内积就越小。内积还与较小向量的长度成比例。因此,当关心方向和距离时,会使用内积。例如,需要通过墙壁直线到达冰箱。
使用场景:
内积可以看作是欧几里得距离和余弦相似度之间的结合。
当处理归一化数据集时,内积与余弦相似度相同,因此内积适用于归一化或非归一化的数据集。它比余弦相似度更快,并且更灵活。
需要注意的一点是,内积不遵循三角不等式。较大的长度(大幅度)会被优先考虑。这意味着在使用内积与倒排文件索引或像HNSW这样的图索引时,应该谨慎。