使用源自潜在狄利克雷分配的主题对文档进行聚类

数据挖掘 Python 聚类 低密度脂蛋白
2021-10-05 09:41:05

我想将潜在 Dirichlet 分配用于一个项目,并且我正在将 Python 与 gensim 库一起使用。找到主题后,我想使用诸如 k-means 之类的算法对文档进行聚类(理想情况下,我想使用一个好的算法来重叠聚类,因此欢迎任何建议)。我设法获得了主题,但它们的形式是:

0.041*Minister + 0.041*Key + 0.041*moments + 0.041*争议 + 0.041*Prime

为了应用聚类算法并在我错了时纠正我,我相信我应该找到一种使用 tfidf 或 word2vec 将每个单词表示为数字的方法。

您对我如何从例如列表中“剥离”文本信息有任何想法,以便这样做,然后将它们放回去以进行适当的乘法?

例如,如果部长这个词的 tfidf 权重为 0.042 等等,对于同一主题中的任何其他词,我看到的方式我应该计算如下:

0.041*0.42 + ... + 0.041*tfidf(Prime) 并获得稍后将用于对结果进行聚类的结果。

感谢您的时间。

3个回答

假设 LDA 生成了一个主题列表并为每个文档的每个主题打分,您可以将文档及其分数表示为一个向量:

Document | Prime | Minister | Controversial | TopicN | ...
   1       0.041    0.042      0.041          ...
   2       0.052    0.011      0.042          ...

要获取每个文档的分数,您可以运行该文档。作为一个词袋,通过一个训练有素的 LDA 模型。从 gensim 文档:

>>> lda = LdaModel(corpus, num_topics=100)  # train model
>>> print(lda[doc_bow]) # get topic probability distribution for a document

然后,您可以在这个矩阵上运行 k-means,它应该将相似的文档分组在一起。默认情况下,K-means 是一种硬聚类算法,这意味着它将每个文档分类到一个聚类中。您可以使用软聚类机制,该机制将为您提供文档适合聚类的概率分数 - 这称为模糊 k-meanshttps://gist.github.com/mblondel/1451300是一个 Python 要点,展示了如何使用 scikit learn 来做到这一点。

ps:我不能发布超过2个链接

作为上一个答案的补充,您最好不要直接在从 lda topic-doc 分布派生的组合数据上运行 kmeans,而是使用一些组合数据转换将它们投影到欧几里得空间,如 ilr 或 clr。

另一种方法是使用您通过训练 LDA 模型获得的文档主题矩阵,以便以最大概率提取主题并将该主题作为您的标签。

这将给出一个在某种程度上可以解释您的主题的结果。