pytorch中向量和矩阵行余弦相似度

use*_*835 4 cosine-similarity pytorch

在pytorch中,我有多个(十万规模)300个暗淡向量(我认为我应该在矩阵中上传),我想根据它们与另一个向量的余弦相似度对它们进行排序并提取前1000个。我想避免 for 循环,因为它很耗时。我一直在寻找有效的解决方案。

Shi*_*han 6

您可以使用torch.nn.function.cosine_similarity函数来计算余弦相似度。和torch.argsort提取前 1000 个。

这是一个例子:

x = torch.rand(10000,300)
y = torch.rand(1,300)
dist = F.cosine_similarity(x,y)
index_sorted = torch.argsort(dist)
top_1000 = index_sorted[:1000]
Run Code Online (Sandbox Code Playgroud)

请注意 的形状y,在调用相似度函数之前不要忘记重塑形状。另请注意,argsort仅返回最接近向量的索引。要访问这些向量本身,只需编写x[top_1000],它将返回一个矩阵形状(1000,300)