根据与 LDA 主题/特征集群的相似性对文本进行分组

Posted

技术标签:

【中文标题】根据与 LDA 主题/特征集群的相似性对文本进行分组【英文标题】:Group texts based on their similarity to LDA topics/feature clusters 【发布时间】:2017-11-18 15:42:00 【问题描述】:

我正在开发一个包含论坛主题内容(第一篇帖子 + 回复)的数据库。我想根据第一篇文章的主题对这些文档进行分组/聚类。

我计算了 LDA/LSI 主题并尝试了 K-means 聚类,但我找不到有关如何从聚类中获取相关文本文档的文档。我只获取每个集群的主要功能,但我想要整个文档或每个集群中与之关联的一些 ID。

我还尝试了使用已知机器学习算法的分类器和推荐器,但它们的结果并不是真的有用。我也试过用word2vec和doc2vec计算相似度,结果也不是很精确。

总而言之,我想根据文本文档的相似特征/主题对文本文档进行分组,而不会丢失指向其内容的链接(如 ID)。我还想到了更高级的方法,但我希望它首先起作用。目标是将来自使用软件有相同问题的用户的帖子分组,并且这些问题的原因可能相同。

【问题讨论】:

【参考方案1】:

您可以使用 Python 中的 lda 库来创建文档的 LDA 表示,如下所示:

import lda
model = lda.LDA(n_topics=20, n_iter=1500, random_state=1)
model.fit(X)
lda_representation = model.doc_topic_

假设 X 是您的文档矩阵,大小为 n_doc x n_vocab,并且您的 lda 表示大小为 n_doc x n_topics

然后你将 lda_representations 与 k-means algorithm from sklearn 聚类:

from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=10, random_state=0)
kmeans.fit(lda_representation)
clusters = kmeans.labels_

其中 clusters 的大小为 n_docs x 1,是您对每个文档的集群分配,例如 clusters[0]0 之间的数字strong> 到 n_clusters - 1 它告诉你 document_0 属于集群 n。

【讨论】:

谢谢似乎是我正在寻找的,我要试试。但是我使用 gensim 来计算 LDA,但我应该能够使您的代码适应它 我成功了,但我有 len(clu​​sters) = len(vocab)。所以我得到了每个术语所属的位置,而不是每个文档所属的位置(clusters[0] 是 term_0 的簇号而不是 document_0)。我做错什么了吗? 打印 lda_presentation.shape 以确保您将正确的表示提供给 kmeans。 lda_presentation.shape[0] 应该是文档的大小。

以上是关于根据与 LDA 主题/特征集群的相似性对文本进行分组的主要内容,如果未能解决你的问题,请参考以下文章

机器学习入门-文本特征-使用LDA主题模型构造标签 1.LatentDirichletAllocation(LDA用于构建主题模型) 2.LDA.components(输出各个词向量的权重值)(代码

文本主题模型之LDA LDA求解之变分推断EM算法

文本主题模型之LDA LDA求解之变分推断EM算法

LDA主题模型原理解析与python实现

文档主题生成模型(LDA)

NLP-04隐含狄利克雷分布(LDA)