gpt4 book ai didi

python - 如何在 Python 中快速计算大量向量的余弦相似度?

转载 作者:太空狗 更新时间:2023-10-29 21:54:30 24 4
gpt4 key购买 nike

我有一组 100,000 向量,我需要根据余弦相似度检索前 25 个最接近的向量。

Scipy 和 Sklearn 有计算余弦距离/相似度 2 向量的实现,但我需要计算 100k X 100k 大小的 Cosine Sim,然后取出前 25 个。有没有python compute的快速实现?

根据@Silmathoron 的建议,这就是我正在做的 -

#vectors is a list of vectors of size : 100K x 400 i.e. 100K vectors each of dimenions 400
vectors = numpy.array(vectors)
similarity = numpy.dot(vectors, vectors.T)


# squared magnitude of preference vectors (number of occurrences)
square_mag = numpy.diag(similarity)

# inverse squared magnitude
inv_square_mag = 1 / square_mag

# if it doesn't occur, set it's inverse magnitude to zero (instead of inf)
inv_square_mag[numpy.isinf(inv_square_mag)] = 0

# inverse of the magnitude
inv_mag = numpy.sqrt(inv_square_mag)

# cosine similarity (elementwise multiply by inverse magnitudes)
cosine = similarity * inv_mag
cosine = cosine.T * inv_mag

k = 26

box_plot_file = file("box_data.csv","w+")

for sim,query in itertools.izip(cosine,queries):
k_largest = heapq.nlargest(k, sim)
k_largest = map(str,k_largest)
result = query + "," + ",".join(k_largest) + "\n"
box_plot_file.write(result)
box_plot_file.close()

最佳答案

我会首先尝试更智能的算法,而不是加速蛮力(计算所有向量对)。 KDTrees 可能会起作用,scipy.spatial.KDTree(),如果你的向量是低维的。如果它们是高维的,那么您可能首先需要一个随机投影: http://scikit-learn.org/stable/modules/random_projection.html

关于python - 如何在 Python 中快速计算大量向量的余弦相似度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38029656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com