如何查看聚类基于哪些词

How to see on what words the clusters were based on

我正在使用此代码对我的文档进行聚类。 图形输出如下所示: 我正在尝试完成一种打印出集群所基于的最常见单词的方法。 gensim d2v 可以吗?

kmeans_model = KMeans(n_clusters=3, init='k-means++', max_iter=100) 
X = kmeans_model.fit(d2v_model.dv.vectors)
labels=kmeans_model.labels_.tolist()
l = kmeans_model.fit_predict(d2v_model.dv.vectors)
pca = PCA(n_components=2).fit(d2v_model.dv.vectors)
datapoint = pca.transform(d2v_model.dv.vectors)

data['cluster'] = kmeans_model.labels_
clusters = data.groupby('cluster')    


for i, cluster in enumerate(clusters.groups):
    with open('cluster'+str(cluster)+ '.csv', 'w', encoding="utf-8", newline='') as f:
        data = data.replace(r'\r+|\n+|\t+',' ', regex=True)
        data = clusters.get_group(cluster)[['NR_SOLICITACAO','DS_ANALISE','PRE_PROCESSED']] # get title and overview columns
        f.write(data.to_csv(index_label='id')) # set index to id

import matplotlib.pyplot as plt
label1 = ["#0000FF", "#006400", "#FFFF00", "#CD5C5C", "#FF0000", "#FF1493"]
color = [label1[i] for i in labels]
plt.scatter(datapoint[:, 0], datapoint[:, 1], c=color)
centroids = kmeans_model.cluster_centers_
centroidpoint = pca.transform(centroids)
plt.scatter(centroidpoint[:, 0], centroidpoint[:, 1], marker='^', s=150, c='#000000')
plt.show()

您似乎正在使用 Gensim Doc2Vec 模型('Paragraph Vectors' 算法),并且您的代码显示了根据 .dv 属性 计算的聚类。那是 full-document 向量,而不是单个 word-vectors.

如此派生的聚类不会与(例如)LDA 主题可能具有的单个词具有相同类型的直接可报告关系。在那里,LDA模型本身可以直接报告一个词所暗示的主题,或者最能说明一个主题的词。

但是您可以通过间接方式探查个人 word-tokens 与您的群体之间的相似关系。是否有任何能为您的需求提供可接受的结果,您必须尝试和评估。一些可能性:

  1. 直接调查 sets-of-documents:您可以简单地单独计算每个集群中的所有单词 - 就像整个集群一样是一份文件。然后在每个集群中选择 most-distinct 的单词。这可以很简单,如按每个词组中出现的次数对所有词进行顺序排序,并报告其在一个词组中的排名比其他词中的同一个词排名最高 'higher' 的词。或者,您可以使用 term-importance 的其他度量,例如 TF-IDF.

  2. Doc-vectors 到 word-vector 相关性:如果您使用 Doc2Vec 模式,该模式也训练 word-vectors 同时 – 例如 PV-DM 模式 (dm=1), 或者使用 PV-DBOW (dm=0) 同时添加 non-default dbow_words=1 参数——那么模型的 d2v_model.wv 属性 将在兼容坐标 space.

    中具有有效的 word-vectors

因此,您可以查找 similar-to 聚类质心点或 similar-to 每个聚类(甚至可能是每个文档)的较大子集的单词,以获得words-that-may-be-descriptive.

您可以通过使用 doc-vectors 对 .wv 集 word-vectors 执行 .most_similar() 来执行此操作(无论是针对完整文档,还是针对cluster) 作为 positive 个示例。例如:

words_near_one_doc = d2v_model.wv.most_similar(positive=[doc_vec1])

...或...

words_near_centroid_of_3_docs = d2v_model.wv.most_similar(positive=[doc_vec1, doc_vec2, doc_vec3])
  1. 使用合成文档进行探索,例如 one-word 文档,或被单词扰乱的真实文档 additions/removals:您可以检查您的词汇表,然后使用Doc2Vec 模型为每个只有一个单词的合成文档推断新的 doc-vectors。 (考虑更多 epochs,因为文档缺乏正常大小,这会在确定向量之前提示大量训练,并记住这种不自然的过程,如果没有真实文档的正常变化,可能会产生奇怪的结果) .查看那些退化的文档案例在您的 pre-existing 集群中的位置,并将它们视为标签。或者类似地,获取现有文档——可能是那些特别靠近集群之间边界的文档——并尝试从中提取 adding/removing 个单词,以及 re-inferring 个新向量。查看哪些词最强烈 'move' 文档或 away-from 您现有的集群,并考虑将这些词用作正面或负面标签。