欧式距离、余玄相似度、编辑距离、jaccard相似性区别与总结

在计算文本相似度的时候,通常有两个层面,一个是基于字面的相似度,一个是基于语义的相似度,基于文本语义匹配可参考博文文本语义匹配,这里不再赘述。在计算基于字面的文本相似性的时候,通常有欧氏距离、cosine余弦相似度、编辑距离、jaccard相似度等方式,下面一一介绍。

余弦相似度

余弦距离,也称为余弦相似度,是用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小的度量,公式如下:
欧式距离、余玄相似度、编辑距离、jaccard相似性区别与总结

余弦距离和欧氏距离的对比

余弦距离使用两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比欧氏距离,余弦距离更加注重两个向量在方向上的差异。
借助三维坐标系来看下欧氏距离和余弦距离的区别:
欧式距离、余玄相似度、编辑距离、jaccard相似性区别与总结
从上图可以看出,欧氏距离衡量的是空间各点的绝对距离,跟各个点所在的位置坐标直接相关;而余弦距离衡量的是空间向量的夹角,更加体现在方向上的差异,而不是位置。
余弦距离更多的是从方向上区分差异,而对绝对的数值不敏感,更多的用于使用用户对内容评分来区分兴趣的相似度和差异,同时修正了用户间可能存在的度量标准不统一的问题(因为余弦距离对绝对数值不敏感)。

杰卡德相似性度量

杰卡德相似系数

两个集合A和B交集元素的个数在A、B并集中所占的比例,称为这两个集合的杰卡德系数,用符号 J(A,B) 表示。杰卡德相似系数是衡量两个集合相似度的一种指标(余弦距离也可以用来衡量两个集合的相似度)。
欧式距离、余玄相似度、编辑距离、jaccard相似性区别与总结

杰卡德距离

与杰卡德相似系数相反的概念是杰卡德距离(Jaccard Distance),可以用如下公式来表示:
欧式距离、余玄相似度、编辑距离、jaccard相似性区别与总结
杰卡德距离用两个两个集合中不同元素占所有元素的比例来衡量两个集合的区分度。

调整余弦相似度算法(Adjusted Cosine Similarity)

余弦相似度更多的是从方向上区分差异,而对绝对的数值不敏感,因此没法衡量每个维度上数值的差异,会导致这样一种情况:
用户对内容评分,按5分制,X和Y两个用户对两个内容的评分分别为(1,2)和(4,5),使用余弦相似度得到的结果是0.98,两者极为相似。但从评分上看X似乎不喜欢2这个 内容,而Y则比较喜欢,余弦相似度对数值的不敏感导致了结果的误差,需要修正这种不合理性就出现了调整余弦相似度,即所有维度上的数值都减去一个均值,比如X和Y的评分均值都是3,那么调整后为(-2,-1)和(1,2),再用余弦相似度计算,得到-0.8,相似度为负值并且差异不小,但显然更加符合现实。

字符串编辑距离(Levenshtein距离)

精确计算两个字符串的编辑距离,可以使用经典的动态规划思路,一般可用于拼写检查,模糊匹配等场景。