5
私はベクトルのセットを持っており、コサインの類似性に基づいてトップ25の最も近いベクトルを取り出す必要があります。Pythonで多数のベクトルのコサイン類似度を素早く計算する方法は?
ScipyとSklearnは余弦距離/類似度2ベクトルの計算を実装していますが、100k X 100kサイズのCosine Simを計算してからtop-25を取り出す必要があります。 Pythonで速い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のペア?または、他の何か? –
各ベクトルについて、私は1つおきのベクトルとのコサイン類似度を計算し、コサイン類似度に関して各ベクトルに対して25個のベクトルを選択する。 – user3667569
それはどれくらい速くしたいかによって決まります。実際には遅すぎるとサブサンプルに潜んでいる時間を使って実装例を表示し、希望のスピードが増えたら教えてくださいあなたはPythonでより良いアルゴリズムで加速することができますか、またはあなたがcythonまたはマルチスレッドに行く必要がある場合は... – Silmathoron