【问题标题】:Visualize documents embeddings and clustering可视化文档嵌入和聚类
【发布时间】:2020-11-30 12:55:10
【问题描述】:

我有以下数据框:

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 万个文档。

【问题讨论】:

  • 嵌入的维度是多少?
  • @AkshaySehgal 是 768
  • 每个文档的向量长度为​​ 768?
  • @AkshaySehgal 是的!
  • 请检查我的答案以了解某些方向。希望有帮助

标签: python cluster-analysis embedding


【解决方案1】:

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

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

  1. Kmeans(基于欧式距离的集群)
  2. Dbscan(具有密度概念的集群)
  3. Gaussian mixtures(基于 k 高斯混合的集群)

您可以使用Silhouette score 来查找聚类算法的最佳聚类数,以在聚类中实现最佳分离。

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

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

  1. PCA
  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)--|
                                                             

【讨论】:

  • 很高兴为您提供帮助。如果它有助于解决您的问题,请标记解决方案,以便其他有类似问题的人也可以找到它。
猜你喜欢
  • 1970-01-01
  • 2019-12-24
  • 1970-01-01
  • 2013-09-18
  • 2019-05-20
  • 2021-10-04
  • 2020-03-15
  • 1970-01-01
  • 2018-05-25
相关资源
最近更新 更多