可视化文档嵌入和聚类

Visualize documents embeddings and clustering

我有以下数据框:

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]

我想对它们进行聚类和可视化,以查看文档之间的相似之处。什么是最好的 method/steps 来做到这一点?

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

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

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

  1. Kmeans(基于欧氏距离的聚类)
  2. Dbscan(具有密度概念的簇)
  3. Gaussian mixtures(基于 k 个高斯混合的聚类)

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

对于可视化,您只能在 3D 或 2D 中可视化 space。这意味着你将不得不使用一些降维方法将768维降低到3维或2维。

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

  1. PCA
  2. T-SNE
  3. LDA(需要标签)

一旦您对数据进行了聚类并分别降低了数据的维度,您可以使用 matplotlib 绘制 2D/3D 中的每个点 space 并根据其聚类为每个点着色 (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 space,然后使用聚类方法进行聚类。这将减少您必须处理的计算量,因为现在您仅在 3 个维度而不是 768 个维度上进行聚类,但是以可能帮助您更好地区分聚类的信息为代价。

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