我在计算 100 维向量的大列表之间的余弦相似度时遇到了麻烦。当我使用 时from sklearn.metrics.pairwise import cosine_similarity,我会使用MemoryError16 GB 的机器。每个数组都非常适合我的记忆,但我MemoryError在np.dot()内部通话期间得到
这是我的用例以及我目前如何处理它。
这是我的 100 维父向量,我需要将其与其他 500,000 个相同维度(即 100)的不同向量进行比较
parent_vector = [1, 2, 3, 4 ..., 100]
这是我的子向量(这个例子有一些虚构的随机数)
child_vector_1 = [2, 3, 4, ....., 101]
child_vector_2 = [3, 4, 5, ....., 102]
child_vector_3 = [4, 5, 6, ....., 103]
.......
.......
child_vector_500000 = [3, 4, 5, ....., 103]
我的最终目标是获得与父向量具有非常高余弦相似度的前 N 个子向量(以及它们的名称child_vector_1和相应的余弦分数)。
我目前的方法(我知道这是低效且消耗内存的):
第 1 步:创建以下形状的超级数据框
parent_vector 1, 2, 3, ....., 100
child_vector_1 2, 3, 4, ....., 101
child_vector_2 3, 4, 5, ....., 102
child_vector_3 4, 5, 6, ....., 103
......................................
child_vector_500000 3, 4, 5, ....., 103
第 2 步:使用
from sklearn.metrics.pairwise import cosine_similarity
cosine_similarity(df)
获得所有向量之间的成对余弦相似度(如上图所示)
第 3 步:制作一个元组列表以存储所有此类组合的key诸如和余弦相似度等值。child_vector_1
第 4 步:使用 list 获取前 Nsort()个 - 这样我就可以得到子向量名称以及它与父向量的余弦相似度分数。
PS:我知道这是非常低效的,但我想不出更好的方法来更快地计算每个子向量和父向量之间的余弦相似度并获得前 N 个值。
任何帮助将不胜感激。