使用 Python 计算 3D 数组之间的余弦相似度

数据挖掘 Python 余弦距离 伯特 矩阵
2021-09-24 02:16:41

我有两个矩阵,每个矩阵都有多列和三行。我计算了余弦相似度(sklearn),但它以矩阵形式给出了结果。我怎样才能获得一个单一的价值?这些矩阵是每个词的嵌入,从 BERT 获得。

1个回答

您的输入矩阵(具有3 行多列)说有3 个样本,具有多个属性所以你将得到的输出将是一个 3x3 矩阵,其中每个值都是与另一个样本的相似度(有3 x 3 = 9这样的组合)

如果您要以稀疏格式打印成对的相似性,那么它可能看起来更接近您所追求的。

我创建了两个符合您描述的随机数示例矩阵:

from sklearn.metrics.pairwise import cosine_similarity
from scipy import sparse

a = np.random.random((3, 10))
b = np.random.random((3, 10))

# Create sparse matrices, which compute faster and give more understandable output
a_sparse, b_sparse = sparse.csr_matrix(a), sparse.csr_matrix(b)

sim_sparse = cosine_similarity(a_sparse, b_sparse, dense_output=False)
print(sim_sparse)

输出:

  (0, 2)    0.7938732813430508
  (0, 1)    0.7575978172453429
  (0, 0)    0.7897664361147338
  (1, 2)    0.740418315571796
  (1, 1)    0.833981672896221
  (1, 0)    0.7184526671218405
  (2, 2)    0.8746293481677073
  (2, 1)    0.6456666045233884
  (2, 0)    0.7925289217609924

希望这个输出能让你更清楚地了解你实际得到的输出。

在此处查看有关性能方面的更多详细信息,有关稀疏矩阵的文档在此处。