如何找到非常大数组的余弦相似度

时间:2018-10-16 09:46:01

标签: python numpy math data-science

我有一个非常大的域名数据集。数据集的大约大小为100万。

我想查找由于拼写错误而在数据集中重复的相似域。

所以我一直在使用余弦相似度来查找相似文档。

dataset = ["example.com","examplecom","googl.com","google.com"........]
tfidf_vectorizer = TfidfVectorizer(analyzer="char")
tfidf_matrix = tfidf_vectorizer.fit_transform(documents)
cs = cosine_similarity(tfidf_matrix, tfidf_matrix)

上面的示例对于小型数据集运行良好,但对于大型数据集,它会抛出内存不足错误。

系统配置:

1)8GB Ram

2)已安装64位系统和64位python

3)i3-3210处理器

如何找到大型数据集的余弦相似度?

1 个答案:

答案 0 :(得分:1)

根据答案here,您可以根据标准化输入使用KDTree产生余弦距离。这只是设置要返回的最小距离的一种情况(因此,您不必保留所有较大的距离,这是您正在使用的大部分内存),并使用例如{{ 1}}来自scipy.spatial.cKDTree.sparse_distance_matrix

不幸的是,我现在没有方便的口译员来编写完整的答案,但这就是关键所在。

请确保您要从该距离矩阵拟合的任何模型都可以接受稀疏输入。