首页 > 解决方案 > 可视化文档嵌入和聚类

问题描述

我有以下数据框:

print(df)
document                embeddings
   1        [-1.1132643 ,  0.793635  ,  0.8664889]
   2        [-1.1132643 ,  0.793635  ,  0.8664889]
   3        [-0.19276126,  -0.48233205,  0.17549737]
   4        [0.2080252 ,  0.01567003, 0.0717131]

我想对它们进行聚类和可视化以查看文档之间的相似之处。执行此操作的最佳方法/步骤是什么?

这只是一个小数据框,原始数据框有超过 2 万个文档。

标签: pythoncluster-analysisembedding

解决方案


在您的案例中,文档向量位于 768 维欧几里得空间中。意思是在 768 维坐标空间中,每个点代表一个文档。假设这些已经被正确训练,可以安全地想象,与不同的文档相比,在这个空间中上下文相似的文档应该更接近彼此。这可能允许您应用聚类方法将相似的文档组合在一起。

对于聚类,您可以使用多种聚类技术,例如 -

  1. Kmeans(基于欧几里德距离的聚类)
  2. Dbscan(具有密度概念的集群)
  3. 高斯混合(基于 k 高斯混合的集群)

您可以使用轮廓分数来找到聚类算法的最佳聚类数,以在聚类中最好地创建分离。

对于可视化,您只能在 3D 或 2D 空间中进行可视化。这意味着您将不得不使用一些降维方法将 768 维减少到 3 维或 2 维。

这可以通过将以下算法设置为 2 或 3 个组件来实现 -

  1. 主成分分析
  2. T-SNE
  3. LDA(需要标签)

对数据进行聚类并分别降低数据的维数后,您可以使用 matplotlib 在 2D/3D 空间中绘制每个点,并根据其集群 (0-7) 为每个点着色以可视化文档和集群。

#process flow
(20k,768) -> K-clusters (20k,1) ------|
                                      |--- Visualize (3 axis, k colors)
(20k,768) -> Dim reduction (20k,3)----|

这是您要实现的目标的示例-

在此处输入图像描述

在这里,您可以看到 T-SNE 数据的前 2 个组成部分,每种颜色代表您通过选择的聚类方法创建的聚类(使用轮廓分数决定聚类的数量)

编辑:您可以应用降维将 768 维数据投影到 3D 或 2D 空间中,然后使用聚类方法进行聚类。这将减少您必须处理的计算量,因为现在您仅在 3 个维度而不是 768 个维度上进行聚类,但会以可能帮助您更好地区分聚类的信息为代价。

#process flow                                 
                                    |------------------------|  
(20k,768) -> Dim reduction (20k,3)--|                        |-- Visualize
                                    |--- K-Clusters (20k,1)--|
                                                             

推荐阅读