我的意图是使用 HDBSCAN 对来自 doc2vec 的文档向量进行聚类。我想找到存在语义和文本重复的小簇。
为此,我使用 gensim 生成文档向量。生成的 docvecs 的元素都在 [-1,1] 范围内。
为了比较两个文档,我想比较角度相似度。我通过计算向量的余弦相似度来做到这一点,效果很好。
但是,要对文档进行聚类,HDBSCAN 需要距离矩阵,而不是相似度矩阵。从余弦相似度到余弦距离的原生转换sklearn
是1-similarity
。但是,据我了解,使用此公式可以打破三角不等式,使其无法成为真正的距离度量。在搜索和查看其他人的类似任务的代码时,似乎大多数人似乎都在使用sklearn.metrics.pairwise.pairwise_distances(data, metric='cosine')
定义余弦距离的方法1-similarity
。看起来它提供了适当的结果。
我想知道这是否正确,或者我是否应该使用角距离,计算为np.arccos(cosine similarity)/pi
. 我还看到人们在 l2 归一化文档向量上使用欧几里得距离;这似乎等同于余弦相似度。
请让我知道计算聚类文档向量之间距离的最合适方法是什么:)