1

我正在研究包含论坛主题内容的数据库(第一篇文章+回复)。我想根据第一篇文章的主题对这些文档进行分组/聚类。基于与LDA主题/功能集群的相似性对文本进行分组

我计算了LDA/LSI主题并尝试了K均值聚类,但我找不到有关如何从群集获取相关文本文档的文档。我只得到每个集群的主要特征,但我希望整个文档或像每个集群关联的某个ID。

我也尝试过使用已知机器学习算法的分类器和推荐器,但是他们的结果并不是很有用。我也尝试使用word2vec和doc2vec计算相似度,结果也不是很精确。所以总结一下,我想根据他们相似的特征/主题对文本文档进行分组,而不会丢失到他们内容的链接(如ID)。我也有更先进的方法,但我希望这首先工作。我们的目标是使用软件对具有相同问题的用户进行分组,也许这些问题的原因相同。

回答

0

可以使用lda库在Python中创建的文档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_ 

其中簇是大小为n_docs X 1并且对于每个文档,例如群集分配簇[0]之间的数0n_clusters - 1 它告诉你document_0属于群集n。

+1

感谢似乎是我正在寻找,我要去尝试它。然而,我使用gensim来计算LDA,但我应该能够适应你的代码 –

+0

我做了它的工作,但我有len(clusters)= len(vocab)。 因此,我得到每个词所属的位置,而不是每个文档所属的位置(clusters [0]是term_0的集群编号,而不是document_0)。难道我做错了什么 ? –

+0

打印lda_presentation.shape以确保您将正确的表示形式提供给kmeans。 lda_presentation.shape [0]应该是文档的大小。 – Ash