ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Milvus-04-collection-metric_type度量类型COSINE/L2/IP

Milvus-04-collection-metric_type度量类型COSINE/L2/IP 目录COSINE余弦的方式计算相似度L2欧氏距离的方式计算相似度IP内积的方式计算相似度不同的相似度规则该什么时候使用COSINE余弦的方式计算相似度只看方向不看长度两个向量方向越一致说明向量越相近-1最不像1最像假设有3个二维向量分别是A[1,1]B[2,1]C[-1,-1]如果从坐标系中画3个点会发现A和B的方向差不多A和C的方向相反使用python代码计算A和B的余弦相似度如下importtorchimporttorch.nn.functionalas nn tensor_Atorch.tensor([[1.0,1.0]])tensor_Btorch.tensor([[2.0,1.0]])tensor_Ctorch.tensor([[-1.0,-1.0]])cos_simnn.cosine_similarity(tensor_A,tensor_B,dim1)print(A和B余弦相似度,cos_sim.item())#0.9486832618713379接近1很像 cos_simnn.cosine_similarity(tensor_A,tensor_C,dim1)print(A和C余弦相似度,cos_sim.item())#-0.9999999403953552接近-1完全不像由上面可知A和B很像但是A和C完全不像甚至相反L2欧氏距离的方式计算相似度不看方向只看两个向量之间的距离A和B越近就说明A和B越像假设有3个二维向量分别是A[1,1]B[2,1]C[-1,-1]从坐标系中画3个点A和B很近A和C较远python代码如下importtorchimporttorch.nn.functionalas nn tensor_Atorch.tensor([[1.0,1.0]])tensor_Btorch.tensor([[2.0,1.0]])tensor_Ctorch.tensor([[-1.0,-1.0]])#NOTE可以理解对于本例的二维向量其实就是根据勾股定理求斜边三维向量就是3个平方再开方#p1L1 距离曼哈顿距离#p2L2 距离欧氏距离distancenn.pairwise_distance(tensor_A,tensor_B,p2)print(A和B的欧氏距离,distance)#1.0000distancenn.pairwise_distance(tensor_A,tensor_C,p2)print(A和C的欧氏距离,distance)#2.8284IP内积的方式计算相似度有人说是A向量在B向量上的投影再乘以B其实我觉得没必要去这样理解内积上述文章已经阐述过COS和L2一个通过方向一个通过距离而IP则是通过方向向量长度强度来综合判断下图一眼就可明白内积是什么意思虽然A和C方向完全一致但是你架不住B的力度大所以说从内积的规则判断A和B更相似而A和C仅仅是方向一致而已说白了就是你C确实和我一条心但是你帮不上多大忙虽然B和我不是一条心但是人家出手即可帮大忙python代码如下importtorchtensor_Atorch.tensor([[2.0,2.0]])tensor_Btorch.tensor([[5.0,0.0]])tensor_Ctorch.tensor([[1.0,1.0]])innertorch.matmul(tensor_A,tensor_B.T)print(A和B的内积,inner)# 值为10更相似 innertorch.matmul(tensor_A,tensor_C.T)print(A和C的内积,inner)# 值为4C不如B相似不同的相似度规则该什么时候使用CONSINE常用来处理文本语义例如喜欢爱慕L2常用于数字处理例如音频视频相似度IP不常用一般用在高频搜索中其中IP的强度通常用来表示关键词的出现次数这个具体场景我也不清楚不是很了解没做过不过本文主要讲述的是milvus这个了解一下就行0904重新整理本文下面是场景示例还没写完周五休息了你需要知道的前提方向代表语义在当下AI所有场景中向量的方向代表语义向量的长度代表维度的综合强度也就是说判断两句话是否相似是由向量方向决定的而不是向量长度你需要知道的前提长度代表语义是否可行?答案是不可行若我反过来用长度代表语义而不是方向代表语义这样可以吗比如有A,B,C三个向量他们的长度分别是A2B3C4数轴上分别是234然后我设置阈值为1小于等于1就相似大于1就不相似那么对于该例子B-A3-21得出AB相似度极高C-B4-31得出BC相似度极高C-A4-22得出AC不是很像对于上述例子用长度表示语义从数学的角度来说是没问题的但是该例子是简单的实际业务场景不可能这么简单尝试看如下例子有A,X,Y,Z四个向量产品要求A和X相似A和Y也相似A和Z也相似但是XYZ它们三个之间互不相似此时这种情况在数轴上无法表示只有如下一种方法可以表示就是使用方向不用长度如下图可以完全满足无限个向量相似答案是不可以举个例子就能知道假设公司产品要求示例1现有句子A和句子BA:“草地上有只垂耳兔”B:“一只垂耳兔正在草坪上啃青草”下一篇Milvus-05-将文本变成向量并入库
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进