我在计算大量 100 维向量之间的余弦相似度时遇到问题。当我使用from sklearn.metrics.pairwise import cosine_similarity
, I get MemoryError
在我的 16 GB 机器上。每个数组都非常适合我的记忆,但我得到MemoryError
during 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
及其相应的余弦分数)与父向量具有非常高的余弦相似度。
我目前的方法(我知道效率低且消耗内存):
Step 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
Step 2: Use
from sklearn.metrics.pairwise import cosine_similarity
cosine_similarity(df)
获得所有向量之间的成对余弦相似度(如上面的数据帧所示)
Step 3:制作一个元组列表来存储key
例如child_vector_1
以及所有此类组合的余弦相似度等值。
Step 4:使用以下方法获取前 N 名sort()
列表 - 这样我就可以获得子向量名称及其与父向量的余弦相似度得分。
PS:我知道这效率很低,但我想不出更好的方法
更快计算每个子向量之间的余弦相似度的方法
和父向量并获取前 N 个值。
任何帮助将不胜感激。