5
나는 벡터 집합을 가지고 있으며 나는 코사인 유사성에 기초하여 가장 가까운 벡터를 찾아야한다.파이썬에서 다수의 벡터에 대한 코사인 유사성을 신속하게 계산하는 방법은 무엇입니까?
Scipy와 Sklearn은 코사인 거리/유사성 2 벡터를 계산하기위한 구현이 있지만 100k x 100k 크기의 Cosine Sim을 계산 한 다음 상위 25 개를 추출해야합니다. 파이썬에서 빠른 implemenet이 있습니까?
#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()
"상위 25 개의 가장 가까운 벡터"는 무엇을 의미합니까? 가장 가까운 25 쌍? 또는 다른 것? –
각 벡터에 대해, 나는 다른 모든 벡터와의 코사인 유사도를 계산하고 코사인 유사성과 관련하여 각 벡터에 대해 25 개의 벡터를 선택합니다. – user3667569
그것은 얼마나 빨리 원하는지에 달려 있습니다 ... 구현 시간의 예를 보여 주면 (잠재적으로 너무 느린 경우 서브 샘플에 잠재적으로) 원하는 속도 증가를 말하면 우리는 파이썬에서만 더 나은 알고리즘으로 가속화 될 수 있거나 파이썬이나 멀티 쓰레드로 갈 필요가 있다면 ... – Silmathoron