在python中计算余弦相似度的最快方法

时间:2021-06-17 11:51:26

标签: python list numpy mysql-python cosine-similarity

我正在尝试计算文档的 TFIDF 向量表示(MySQL 数据库中有 500 个文档)和用户查询的 TFIDF 向量表示之间的余弦相似度。最初,我编写了自己的代码来执行此计算(我的代码在代码段中进行了注释)。执行计算平均需要 4.8 。然后在寻找减少计算时间的方法时,我尝试为此使用 numpy 库。但是,现在执行计算也需要 1.3

def csim(dtv,qv):
    csim=[]
    b = np.array(qv)
    for i in range(len(dtv)):
        # numerator= np.dot(dtv[i],qv)
        # denominator = np.sqrt(np.sum(np.power(dtv[i],2)) * np.sum(np.power(qv,2)))
        # csim.append(((numerator / (denominator + 1e-9)), i + 1))
        a = np.array(dtv[i])
        numerator = np.dot(a, b)
        denominator = np.linalg.norm(a)*np.linalg.norm(b)
        csim.append(((numerator / (denominator + 1e-9)), i + 1))
    return csim

这里 dtv 是文档向量列表的列表,qv 是列表形式的查询向量的向量表示。如何减少余弦相似度的计算时间?

这是我找到的 one reference,但我无法理解余弦相似度是如何计算的。

我希望在毫秒范围内减少计算时间。

Here 是文档 1 的 TFIDF 向量表示。 Here 是查询的 TFIDF 向量表示。

0 个答案:

没有答案