我正在尝试计算文档的 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,但我无法理解余弦相似度是如何计算的。
我希望在毫秒范围内减少计算时间。