我有一个非常大的域名数据集。数据集的大约大小为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处理器
如何找到大型数据集的余弦相似度?
答案 0 :(得分:1)
根据答案here,您可以根据标准化输入使用KDTree
产生余弦距离。这只是设置要返回的最小距离的一种情况(因此,您不必保留所有较大的距离,这是您正在使用的大部分内存),并使用例如{{ 1}}来自scipy.spatial.cKDTree.sparse_distance_matrix
。
不幸的是,我现在没有方便的口译员来编写完整的答案,但这就是关键所在。
请确保您要从该距离矩阵拟合的任何模型都可以接受稀疏输入。