我计算了a & b (=x)和b & c (=y)之间的余弦相似性。我可以使用相同的嵌入来计算a和c之间的相似性(假设它是= z)。
我有一种情况,我只有相似性度量x和y。如果没有原始的嵌入,我如何找到a和c之间的相似之处?如果我用一个平面来表示这个,那么我就会有无穷多的解。有什么方法可以提供一些关于a和c之间关系的见解吗?
a = torch.Tensor([1, 2])
b = torch.Tensor([1, -1])
c = torch.Tensor([2, 3])
sim_ab = torch.dot(a, b) / (torch.sqrt(sum(torch.square(a)) * sum(torch.square(b))))
sim_ac = torch.dot(a, c) / (torch.sqrt(sum(torch.square(a)) * sum(torch.square(c))))
sim_bc = torch.dot(b, c) / (torch.sqrt(sum(torch.square(b)) * sum(torch.square(c))))
print("Actual similarity between b and c: ", sim_bc)
x = torch.arccos(sim_ab)
y = torch.arccos(sim_ac)
print("Measured similarity between b and c: ", torch.cos(x-y))
>>> Actual similarity between b and c: tensor(-0.1961)
>>> Measured similarity between b and c: tensor(-0.1961)
发布于 2021-08-13 09:09:35
考虑简单的情况通常是有用的,例如,即使在二维(平面)情况下,也无法确定z。两个向量之间的相似性与它们之间的角度(在原点)是相同的,因此:
对于a和c之间的角度,这已经给出了两个不同的答案:x+y还是x-y,取决于a和c是否位于b的“同一边”。
在较高的维数中,z的可能角数增加,例如,在三维中,a和c各位于b周围的一个圆锥体上,它们之间有一定的可能角度。
这不是一个证据,但我认为从这一点可以将z绑定到x+y和x-y之间(如果一个值非常小,可能有用,也许不是),但是不能唯一地定义z。
https://datascience.stackexchange.com/questions/99996
复制相似问题