计算python中稀疏张量的余弦相似度的有效方法?

时间:2017-07-03 13:54:55

标签: python machine-learning nlp word2vec tensor

我有一个单位张量(长度= 1)的列表。此列表包含 ~20 000 此类张量。张量具有 ~3 000 尺寸但非常稀疏。仅 x(0 尺寸不是0 。我需要计算所有这些张量之间的余弦相似度。这样做最有效的方法是什么? (这不是一个NLP任务,但我的解决方案看起来类似于 word2Vect 方法,这就是为什么我添加了NLP标记。我的张量比 word2vec <维度更大/ strong>并且它更稀疏)

2 个答案:

答案 0 :(得分:1)

请参阅以下网站了解sklearn cosine_similarity函数

http://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.cosine_similarity.html

在python中

from sklearn.metrics.pairwise import cosine_similarity
cos_sim = cosine_similarity(vector1,vector2)

答案 1 :(得分:0)

SciKit-Learn的cosine_similarity是你的朋友:

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

# example test:
T = sparse.rand(4, 3, 0.9)
cosine_similarity(T)

# full run (tensor as described in question):
T = sparse.rand(20000, 3000)
%time cosine_similarity(T)

在我的机器上花费大约4.4秒。

# staying sparse:
%time cosine_similarity(T, dense_output=False)

在我的机器上花费不到2秒(即大约2倍加速)。