曼哈顿距离和汉明距离在特定的向量搜索场景中非常有用,因为它们独特的属性与数据或问题结构相符。曼哈顿距离(L1)衡量向量坐标之间绝对差的总和,使其在数据中沿单个维度差异比直线距离更重要的情况下有效。例如,在推荐系统中分析用户在离散类别中的行为(例如,每个应用上花费的时间),曼哈顿距离可以更好地捕捉增量差异。汉明距离计算向量之间不匹配的位置,非常适合二进制或分类数据,例如比较哈希图像指纹或 DNA 序列。例如,使用感知哈希(二进制表示)检测相似图像可以从汉明距离中受益,因为它量化了精确的位置不一致。
在计算方面,曼哈顿距离和汉明距离在操作和效率上都与欧几里得(L2)和余弦距离不同。曼哈顿需要对绝对差求和,这比欧几里得的平方和平方根步骤稍快。对于高维向量,这可以在紧密循环中节省周期,尽管实际上都是 O(n)。对于二进制数据,汉明距离甚至更便宜——它是按位异或运算,然后是人口计数——通常通过硬件指令进行优化。但是,汉明仅适用于固定长度的离散数据,这与处理连续值的欧几里得或余弦不同。余弦相似度对向量进行归一化并计算它们的点积,这会增加归一化开销(向量幅度需要 O(n) 次运算)。虽然库优化了这些步骤,但曼哈顿和汉明仍然可以在其特定的应用中胜过,尤其是在避免浮点运算时。
这些指标的索引支持各不相同。欧几里得和余弦距离在向量数据库(例如,FAISS、Annoy)中得到广泛支持,并且具有优化的索引结构,如 KD 树或 IVF。曼哈顿距离不太常见,但在某些库(例如,Scikit-learn 的 BallTree)或通过自定义实现中得到支持。汉明距离通常仅限于用于二进制数据的专用索引,例如基于位图的结构或反向多索引。例如,FAISS 包含使用汉明距离优化二进制代码的功能。开发人员可能需要调整数据(例如,将特征二值化)或使用近似方法来有效利用汉明距离。相比之下,欧几里得/余弦得益于成熟的、开箱即用的连续嵌入解决方案,使其更易于实现通用向量搜索。选择正确的指标取决于数据类型、维度和可用工具。