【发布时间】:2014-05-31 16:49:53
【问题描述】:
我有一组由浮点向量表示的 30 000 个文档。所有向量都有 100 个元素。我可以通过在它们的向量之间使用余弦度量来比较它们来找到两个文档的相似性。问题是找到最相似的文档需要很长时间。有什么算法可以帮助我加快速度吗?
编辑
现在,我的代码只计算第一个向量和所有其他向量之间的余弦相似度。大约需要 3 秒。我想加快速度;)算法不一定要准确,但应该给出与完整搜索相似的结果。
每个向量的元素之和等于1。
start = time.time()
first = allVectors[0]
for vec in allVectors[1:]:
cosine_measure(vec[1:], first[1:])
print str(time.time() - start)
【问题讨论】:
-
也许你能告诉我们你做了什么?或者至少你采取了什么方法
-
向量是否标准化为单位长度?
-
元素之和等于 1。但如果有帮助,我可以将其标准化为 1 的长度。
-
3 000 000 个值的 3 秒我认为相当不错。使用 map 和 numpy,你也许可以赢得半秒。使用 pypy 编译代码可能会让你再花半秒时间。
-
我宁愿寻找一种算法不太准确但速度更快。 Python只是为了测试,我会用另一种语言来实现。
标签: algorithm optimization cosine-similarity