文章目录
前言
一、基于向量空间距离的相似度方法
1、欧氏距离(Euclidean Distance)
2、标准化欧氏距离 (Standardized Euclidean distance)
3、曼哈顿距离 (Manhattan Distance)
4、切比雪夫距离 (Chebyshev Distance)
5、闵可夫斯基距离 (Minkowski Distance)
6、马氏距离 (Mahalanobis Distance)马哈拉诺比斯距离
7、兰氏距离 (Lance Williams Distance)
二、夹角余弦
1、余弦夹角(Cosine)
2、Tanimoto系数 (Tanimoto Coefficient)(广义Jaccard相似系数)
三、相关系数
1、皮尔逊相关系数 (Pearson Correlation Coefficient)
四、其他
1、内积法(Inner Product)
2、杰卡德相似系数(Jaccard similarity coefficient)
杰卡德相似系数
杰卡德距离
3、汉(海)明距离(Hamming distance)
4、编辑距离
5、SimHash
总结
在计算机人工智能领域,距离(distance)、相似度(similarity)是经常出现的基本概念,它们在自然语言处理、计算机视觉等子领域有重要的应用,而这些概念又大多源于数学领域的度量(metric)、测度(measure)等概念。
相似度就是比较两个事物的相似性。一般通过计算事物的特征之间的距离,如果距离小,那么相似度大;如果距离大,那么相似度小。
问题定义:有两个对象X,Y,都包含N维特征,X=(x1,x2,x3,...,xn),Y=(y1,y2,y3,...,yn),计算X和Y的相似性。
接下来,我从四个角度对向量相似度计算方法进行总结归纳。
概念:计算两个向量之间的距离,两个向量间距离越近,则两个向量越相似
定义:在n维空间中两个点之间的真实距离。在二维和三维空间中的欧氏距离就是两点之间的直线距离
方法:先将各个分量都先进行标准化,再求得标准化后的欧氏距离
作用:用以标明两个点在标准坐标系上的绝对轴距总和
定义:切比雪夫距离或是L∞度量是向量空间中的一种度量,二个点之间的距离定义为其各坐标数值差绝对值的最大值
示例:在国际象棋中,王的走法为可以横、竖、斜三个方向走动,但每次只能走一步。以下图为例,处于f6处的王到棋盘上各点所需要的最少步数即为该点到其他点的切比雪夫距离。因此切比雪夫距离又称棋盘距离。(如下图)
定义:闵氏距离不是一种距离,而是一组距离的定义。
其中p为变参数。当p=1时,上式即为曼哈顿距离;当p=2时,上式即为欧氏距离;当p趋近无穷大时,易证上式即为切比雪夫距离。根据变参数的不同,闵可夫斯基距离可以表示一类距离。
缺点:将各个分量的量纲 (scale),也就是“单位”当作相同的看待了,没有考虑各个分量的分布(期望、方差等)可能是不同的。
有M个样本向量X1~Xm,协方差矩阵记为S,均值记为向量μ,则其中样本向量X到μ的马氏距离表示为:
若协方差矩阵是单位矩阵(各个样本向量之间独立同分布),则马氏距离就是欧式距离;若协方差矩阵是对角矩阵,则马氏距离就是标准化欧式距离。
夹角余弦取值范围为[−1,1]。
夹角余弦越大表示两个向量的夹角越小,夹角余弦越小表示两向量的夹角越大。
当两个向量的方向重合时夹角余弦取最大值1,当两个向量的方向完全相反夹角余弦取最小值−1。
主要的应用场景:
1)推荐系统中的协同过滤
2)计算文本的相似性
定义:Tanimoto系数是Cosine相似度的拓展:
关系:如果我们的x,y都是二值向量,那么Tanimoto系数就等同Jaccard距离
定义:皮尔逊相关系数一般用于计算两个定距向量间联系的紧密程度,它的取值在[−1,+1]之间。相关系数的绝对值越大,则表明X与Y相关度越高。当X与Y线性相关时,相关系数取值为1(正线性相关)或−1(负线性相关)
详解:
1)当相关系数为0时,X和Y两变量无关系
2)当X的值增大(减小),Y值增大(减小),两个变量为正相关,相关系数在0.00与1.00之间
3)当X的值增大(减小),Y值减小(增大),两个变量为负相关,相关系数在-1.00与0.00之间
当两个变量的标准差都不为零时,相关系数才有定义,皮尔逊相关系数适用于:
1)两个变量之间是线性关系,都是连续数据。
2)两个变量的总体是正态分布,或接近正态的单峰分布
3)两个变量的观测值是成对的,每对观测值之间相互独立
方法:点乘 (如:在transformer中计算相似度)
(杰卡德相似系数是衡量两个集合的相似度一种指标)
定义:两个集合A和B的交集元素在A、B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示
定义:与杰卡德相似系数相反的概念是杰卡德距离(Jaccard distance)。Jaccard(杰卡德)距离是用两个集合中不同元素所占所有元素的比例来衡量两个集合(样本)的区分度。
主要的应用的场景:
1) 过滤相似度很高的新闻,或者网页去重
2) 考试防作弊系统
3) 论文查重系统
定义:汉明距离是simhash算法的御用距离算法。在信息论中,两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。汉明距离不是基于向量空间技术,而是依赖于编码理论。
计算过程:
1)汉明距离是描述两个长度为 n 的码字之间的距离,例如计算码字 x=(x1x2…xi…xn)与 y=(y1y2…yi…yn)之间的距离。
2)运算符号⊕表示模 2 加运算,xi和 yi的取值为 0 或 1。通过此公式计算得出的数据 D(x,y)表示的是码字 x 与 y 中不同符号的数目,也就反映出了码字 x 与 y 之间的差异,D(x,y)值越大说明两个码字相似程度越低。
优点:
1)运算过程比较简便
2)计算速度比较快
应用场景:
利用此方法计算文本之间的相似度时,首先提取出文本的一些相关信息,例如文中的关键字等,然后将其排列成字码形式,文本的信息就通过这些字码表现出来,形成文本与字码的一一对应关系。例如,文本 D 就可以表示成 D=(10100111001101011),其中的 0 和 1 表示的是其所在位置对应的文本信息在文本中的状态,如果 0 表示文本D 在其对应位置上的信息是不存在的,那么 1 就表示文本 D 在其对应位置上的信息是存在的;反过来表示也是可以的。根据上面的阐述我们就可以很容易的将文本表示成码字的形式,想要求出两个文本之间的相似度,就可以依据上面公式的计算结果得出。如果码字的长度为 n,则通过上述公式计算出的两码字之间的距离值会介于0和n之间,当计算结果为n时,说明两文本的所有信息均不相同,反之,当结果为 0时,说明两文本的所有信息都相同。这样的推算方法显然很不直观,而且如果 n 值不同,文本相似度的大小也会很难比较。所以,我们首先要确定整个文本集的码字集,然后将每个文本表示成其对应的码字,对于文本D1=(x1x2…xi…xn)和 D2=(y1y2…yi…yn),定义其相似度计算公式为:
其中,xi和 yi分别为文本 D1和 D2对应的码字中第 i 位的分量,其值 0 或 1,⊕仍然是模 2 加运算,此种运算对计算机来说,十分方便快捷。运用Sim(D1,D2)公式计算出来的文本相似度,其值介于 0 和 1 之间,当结果 0 时,说明两个文本完全不相似,当结果为 1 时,说明两个文本很相似,符合人们正常的认知规律。
定义:Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数,如果它们的距离越大,说明它们越是不同。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。编辑距离越小,两个串的相似度越大,动态规划计算编辑距离。相似度:(1 - 编辑距离 、 两者之间的最大长度; 0- 1之间)
simhash算法分为5个步骤:分词、hash、加权、合并、降维
1)分词:给定一段语句,进行分词,得到有效的特征向量,然后为每一个特征向量设置1-5等5个级别的权重(如果是给定一个文本,那么特征向量可以是文本中的词,其权重可以是这个词出现的次数)。例如给定一段语句:“CSDN博客结构之法算法之道的作者July”,分词后为:“CSDN 博客 结构 之 法 算法 之 道 的 作者 July”,然后为每个特征向量赋予权值:CSDN(4) 博客(5) 结构(3) 之(1) 法(2) 算法(3) 之(1) 道(2) 的(1) 作者(5) July(5),其中括号里的数字代表这个单词在整条语句中的重要程度,数字越大代表越重要。
2)hash:通过hash函数计算各个特征向量的hash值,hash值为二进制数01组成的n-bit签名。比如“CSDN”的hash值Hash(CSDN)为100101,“博客”的hash值Hash(博客)为“101011”。就这样,字符串就变成了一系列数字。
3)加权:在hash值的基础上,给所有特征向量进行加权,即W = Hash * weight,且遇到1则hash值和权值正相乘,遇到0则hash值和权值负相乘。例如给“CSDN”的hash值“100101”加权得到:W(CSDN) = 100101 4 = 4 -4 -4 4 -4 4,给“博客”的hash值“101011”加权得到:W(博客)=101011 5 = 5 -5 5 -5 5 5,其余特征向量类似此般操作。
4)合并:将上述各个特征向量的加权结果累加,变成只有一个序列串。拿前两个特征向量举例,例如“CSDN”的“4 -4 -4 4 -4 4”和“博客”的“5 -5 5 -5 5 5”进行累加,得到“4+5 -4+-5 -4+5 4+-5 -4+5 4+5”,得到“9 -9 1 -1 1”。
5)降维:对于n-bit签名的累加结果,如果大于0则置1,否则置0,从而得到该语句的simhash值,最后我们便可以根据不同语句simhash的海明距离来判断它们的相似度。例如把上面计算出来的“9 -9 1 -1 1 9”降维(某位大于0记为1,小于0记为0),得到的01串为:“1 0 1 0 1 1”,从而形成它们的simhash签名。
应用场景:
网页去重最常用的hash方法,速度很快
以上是我个人在学习过程中的记录所学,希望对正在一起学习的小伙伴有所帮助!!!
本文仅仅是从原理性上从四个角度对向量相似度的方法进行总结归纳。
PS:以上内容首发于我个人网站。
参考链接:
计算向量间相似度的常用方法
相似度的集几种常用方法
计算距离方法总结