如何获得集群词

时间:2019-09-23 12:04:49

标签: python k-means doc2vec

如何获取每个群集的单词

我将它们分组了


    LabeledSentence1 = gensim.models.doc2vec.TaggedDocument
    all_content_train = []
    j=0
    for em in train['KARMA'].values:
        all_content_train.append(LabeledSentence1(em,[j]))
        j+=1
    print('Number of texts processed: ', j)


    d2v_model = Doc2Vec(all_content_train, vector_size = 100, window = 10, min_count = 500, workers=7, dm = 1,alpha=0.025, min_alpha=0.001)
    d2v_model.train(all_content_train, total_examples=d2v_model.corpus_count, epochs=10, start_alpha=0.002, end_alpha=-0.016)```



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

我可以获得文本及其簇,但是我如何学习主要创建这些组的单词

1 个答案:

答案 0 :(得分:0)

列出与任何文档或文档向量最相关的单词不是Doc2Vec的固有功能。 (其他算法,例如LDA,将提供这种算法。)

因此,一旦将文档拆分为群集,就可以编写自己的代码,以报告每个群集中“最多代表的单词”。

例如,计算整个语料库中每个单词的频率,然后计算每个聚类中每个单词的频率。对于每个聚类,报告N个单词,它们的簇内频率是整个语料频率的最大倍数。这会为您的数据提供有益的结果,以满足您的需求吗?您必须尝试一下。

另外,关于您使用Doc2Vec

  • 没有充分的理由将现有类TaggedDocument别名为一个奇怪的类名,例如LabeldSentence1。只需直接使用TaggedDocument

  • 如果将语料库all_content_train提供给对象初始化(如代码那样),那么您不需要也需要调用train() 。培训将已经自动进行。如果您确实想要超过默认训练量(epochs=5),只需为初始化提供一个更大的epochs值即可。

  • 您提供给train()start_alpha=0.002, end_alpha=-0.016的学习率值无意义且具有破坏性。几乎没有用户需要修改这些alpha值,但是特别是,他们永远都不能像这些值一样从训练周期的开始到结束增加

  • 如果在INFO级别启用了日志记录的情况下运行和/或密切关注输出,则可能会看到读数和警告,表明正在进行过多的培训,或者使用了有问题的值。