这个问题引起了比它更值得的论坛争论,因为对于大多数实际设置来说,答案是可以证明的,“这根本无济于事”。
这是证据,然后是少数 案件,它使一个大。
三个定义 点出产物不常态化,并随任一向量的大小而增长.
余弦将这个量分出,只测量角度,给出了 [-1, 1] 中的值.
欧几利德是直线相距,因此在另外两个相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相相距相距相距相距相距相距相距相距相距相距相距相距相相相相距相距相 最后的区别是虫子的真正来源,即使测量选择无关紧要。
一半的向量库返回相似度和相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距相距 在调出任何阈值之前,请打印文档的分数,以反对自己。
如果是1.0,则有相似性;如果是0.0,则有相距。
在单位向量上,它们是相同的排名 假设每个存储的向量已经正常化为单位长度,所以。
大多数现代嵌入的API已经返回了单位向量;用快速的规范计算而不是假设检查一次.
根据这个假设: 第(1)行说同心素和点产品是同一个数字,而不仅仅是同一个订单.
第(2)行说平方的欧几利得相距是同心素相似性的严格递减的线性函数——严格单通变换无法再排列任何东西.
按欧几利得相距排列递增,再用余弦排列递增,生成相同的列表,按相同的顺序排列,用于每个查询.
因此,如果你的矢量是正常的,那么在它开始之前,测量辩论就解决了.
您的上- 10 字节相同 。
不同之处在于每个结果旁边的被打印出的数字: 余弦 0.94 与 Euclidean 对应,您所调出的任何阈值都必须通过这个关系翻译,而不是被结转.
当选择真正涉及非正常化的矢量时 这是真正的分歧 如果星等不同,点产品会奖励长向量而余弦会忽略长度.
这是否是一个特性取决于您模型中的长度编码 。
一些检索模型经过培训,使规范带有信心或信息性的概念,其作者将内出产指定为分分函数;使用cosine在那里丢弃了该模型训练出的一个信号.
相反,如果长度是人工活——更长的块,更多的活物,更大的规范——点产品将你的搜索变成由你最长的文件赢得的受欢迎的比赛.
规则不是“Cosine比较安全”。
规则是: 使用该功能 模式卡名称,因为该模型是针对该功能而训练的.
同表矢量列中的非嵌入向量被再用到没有嵌入的东西——计数,TF-IDF行,特征向量,用户行为计数.
其中没有任何一项是正常化的,上述推理都不适用。
在那里,量子通常是真实的信息,而欧几利得或点子产品往往是正确的.
在一个索引中长度非常不同的文件,即使有一个返回单位向量的模型,将30个按键标题与2000个按键页相混合,将两个不同的长度制度放在一个空格中,集合在它们之间表现不同.
余弦不能解决这个问题——矢量已经正常化了,所以已经没有分出量了——这值得一提,因为"使用余弦"是给它的通常建议.
修补的尺寸是一成不变的 不是一成不变的 量子化后二进制完全取代了度量:1位向量被比作汉明相距,汉明相距是超过XOR的个数,与正弦相距没有算术关系.
Scalar int8分数保持了大约但并不准确的顺序,因此在浮点32上被校正的相近阈值将无法维持.
您设定的任何阈值都必须在数量变化后重新生成 。
错配