资讯

相似度度量是什么?用一个数衡量两样东西有多像

2026-11-053 分钟阅读百科
TL;DR相似度度量(Similarity Measure)是量化两个对象相似程度的函数,常与距离度量互为反面;常见的有基于距离的欧氏、曼哈顿、闵可夫斯基距离,基于方向的余弦相似度,基于集合的 Jaccard 系数,基于相关的皮尔逊相关系数,序列的编辑距离与动态时间规整,以及可学习的度量;向量检索、推荐、聚类与 K 近邻都依赖它。

相似度度量(Similarity Measure)是用来衡量两个对象之间有多相似的方法,通常用一个数值来表示:数值越大,说明两者越相似。与它密切相关的是距离度量,距离越小说明越相似,两者常常可以相互转换。相似度度量是机器学习、数据挖掘和信息检索中最基础的工具之一。

基于距离的度量

欧氏距离:就是我们日常理解的两点之间的直线距离,把两个向量对应元素之差的平方加起来再开平方。它最常用,但对各个特征的取值范围很敏感,使用前通常需要标准化。曼哈顿距离:把两个向量对应元素之差的绝对值加起来,就像在棋盘状的城市街道上,从一个路口走到另一个路口需要走的路程。闵可夫斯基距离:上面两种距离的推广,通过一个参数 p 来调节,p 等于 1 时是曼哈顿距离,p 等于 2 时是欧氏距离。马氏距离:考虑了特征之间的相关性和各自的尺度,相当于先对数据进行变换再计算欧氏距离,度量学习常常就是在学习一个合适的马氏距离。

基于方向的度量

余弦相似度:计算两个向量之间夹角的余弦值,取值在负 1 到 1 之间,越接近 1 说明方向越一致。它只关心向量的方向,不关心向量的长度。这在文本分析中非常有用:一篇长文章和一篇短文章,如果讨论的是同一个话题,它们的词频向量方向相近,虽然长文章的向量长得多,余弦相似度仍然很高。如今,在比较文本、图片等的嵌入向量时,余弦相似度是最常用的度量,向量数据库和检索增强生成中的语义检索大多基于它。如果事先把所有向量都归一化为长度 1,余弦相似度就等于两个向量的点积,计算更快。

基于集合的度量

Jaccard 系数:两个集合的交集大小除以并集大小,用来衡量两个集合的重合程度。比如比较两个用户购买过的商品集合、两篇文档包含的词语集合。它常用于去重和查找相似的网页,配合 MinHash 等技术可以在海量数据中快速地估算。在大模型的训练数据处理中,也常用它来发现和去除重复或近似重复的文本。

基于相关的度量

皮尔逊相关系数:衡量两组数据之间线性相关的程度,取值在负 1 到 1 之间。它在推荐系统中常用来计算用户之间的相似度:有的用户打分普遍偏高,有的普遍偏低,皮尔逊相关系数会先减去各自的平均分再比较,因此能够消除这种打分习惯上的差异,只看两人的喜好趋势是否一致。斯皮尔曼等级相关系数则只看排名是否一致。

序列和结构的度量

编辑距离:也叫莱文斯坦距离,表示把一个字符串变成另一个字符串,最少需要进行多少次插入、删除和替换的操作,常用于拼写纠错、DNA 序列比对和模糊匹配。动态时间规整:比较两段时间序列的相似度,允许它们在时间轴上有一定的伸缩和错位,比如两个人说同一个词,语速不同,但仍能被识别为相似。此外还有比较概率分布的 KL 散度、JS 散度、Wasserstein 距离等。

如何选择

选择哪种相似度度量,取决于数据的类型和任务的需要:数值特征常用欧氏距离或余弦相似度;文本和嵌入向量常用余弦相似度;集合数据常用 Jaccard 系数;评分数据常用皮尔逊相关系数;序列数据常用编辑距离或动态时间规整。度量的选择会直接影响 K 近邻、K 均值聚类、推荐系统和检索系统的效果。在很多情况下,与其事先固定一个度量,不如根据任务从数据中学习一个合适的度量,这就是度量学习和对比学习所做的事情:训练一个神经网络,把数据映射到一个嵌入空间中,让相似的对象在这个空间中彼此靠近。