开始之前,建议先对测试数据进行归一化处理。归一化处理后,点积、余弦相似度,欧氏距离之间有等价关系。
其中每一维的 L2 正则化算法:
近似最近邻搜索(approximate nearest neighbor searching, ANNS)是目前针对向量搜索的主流思路。其核心理念在于只在原始向量空间的子集中进行计算和搜索,从而加快整体搜索速度。
通过余弦判断相似度:数值越大,相似度越高。即
因此,归一化后两个向量之间的余弦相似度不变。特别的,
因此,向量归一化后,内积与余弦相似度计算公式等价。
通过欧氏距离判断相似度:欧式距离越小,相似度越高。即
如果进一步展开上面的公式:
因此,欧氏距离的平方与内积负相关。而欧式距离是非负实数,两个非负实数之间的大小关系与他们自身平方之间的大小关系相同。
所以,向量归一化后,针对同一个向量,在同等搜索空间的条件下,欧氏距离返回的前 K 个距离最近的向量结果集与内积返回的前 K 个相似度最大的向量结果集是等价的。