作为 doc2vec 嵌入的一部分,我有一堆 300 维的向量。每个向量都是一篇文章的表示。我的目标是丢弃重复的文章。我正在考虑在我的数据集上运行DBSCAN聚类,然后对于每个聚类标签,丢弃重复项。我选择 DBSCAN 是因为它是分层的,它可以将余弦距离作为度量,我认为这比欧几里德距离更适合文档相似性检测。
问题是,如果我选择余弦距离,那么 sklearn DBSCAN 实现不允许 'ball_tree' 和 'kd_tree' 作为算法,因此我留下了 'brute',我猜它有 O(n^2)对所有向量运行时的复杂性。
如果我不走集群路线,那么我会看到两个选项。most_similar
使用vanilla doc2vec 或通过 annoy index的方法计算所有向量的相似度。根据这个doc vanilla doc2vec 具有相似性查询的线性复杂度,而 annoy 给出亚线性时间复杂度。我想知道,根据我的用例,哪一个是最佳选择?我错过了更好的方法吗?