为什么完全相同的向量之间的火炬余弦相似度给出的相似度为零而不是一?

问题描述 投票:0回答:1

我有两个张量,我想在 Pytorch 中计算它们之间的余弦相似度:

a = torch.tensor([[0.,0.,0.,0.,0.]])
b = torch.tensor([[0.,0.,0.,0.,0.]])

我使用以下函数计算余弦相似度矩阵:

def calc_similarity_batch(a, b):
    representations = torch.cat([a, b], dim=0)
    return F.cosine_similarity(representations.unsqueeze(1), representations.unsqueeze(0), dim = 2)

令我惊讶的是,cosine_similarity 函数计算出的相似度矩阵是:

tensor([[0., 0.],
        [0., 0.]])

虽然应该是:

tensor([[1., 1.],
        [1., 1.]])

因为向量是相同的。有人可以解释一下我的代码有什么问题吗?

pytorch torch cosine-similarity
1个回答
0
投票

你是对的,任何相等向量之间的余弦相似度都应该是1......除了零长度的向量。在这种情况下,除以零,结果是未定义的。您使用的实现似乎以 0 的相似度处理这种情况。

图像显示了公式,您将看到在您的情况下分母为零。

© www.soinside.com 2019 - 2024. All rights reserved.