文本聚类和主题提取

Mis*_*ion 7 text-mining python-2.7 topic-modeling scikit-learn

我正在使用优秀的scikit-learn模块进行一些文本挖掘.我正在尝试对科学摘要进行聚类和分类.

我正在寻找一种方法来聚集我的tf-id表示集,而不必事先指定簇的数量.我无法找到一个可以做到这一点的好算法,并且仍能正确处理大型稀疏矩阵.我一直在研究使用scikit-learn的kmeans,但它无法确定最佳簇数(例如使用BIC).我也尝试使用高斯混合模型(使用最佳BIC分数来选择模型),但它们非常慢.

在我对文档进行聚类之后,我希望能够查看每个聚类的主题,这意味着他们倾向于使用的词.在给定数据矩阵和集群标签的情况下,有没有办法提取这些信息?也许采用聚类的均值并使用tf-id-vectorizer对其进行逆变换?我之前曾尝试使用卡方和随机森林对特征重要性进行排名,但这并不是说哪个标签类使用了什么.

我尝试使用NMF分解方法(仅使用scikit-learn网站的示例代码)进行主题检测.它工作得很好,很快就产生了非常有意义的话题.但是,我没有找到一种方法来使用它将每个数据点分配给一个集群,也没有自动确定"最佳"集群数.但这是我正在寻找的那种东西.

我还在某处读到,可以直接从适合的LDA模型中提取主题信息,但我不明白它是如何完成的.由于我已经将LDA实现为基线分类器和可视化工具,因此这可能是一个简单的解决方案.

如果我设法生成有意义的集群/主题,我将把它们与一些人造标签(不是基于主题的)进行比较,看看它们是如何对应的.但这是另一个主题的主题:-)

ogr*_*sel 4

您可以尝试使用较低的 TF-IDF max_df,例如max_df=0.5,然后使用 k-means(或MiniBatchKMeans)。要找到合适的 K 值,您可以尝试以下启发法之一:

  • 差距统计
  • 预测强度

此博客文章中提供了执行说明:http://blog.echen.me/2011/03/19/counting-clusters/

这些方法都没有在 sklearn 中实现。如果您发现其中任何一个对您的问题有用,我将非常感兴趣。如果是这样,讨论如何最好地在 scikit-learn 中贡献默认实现可能会很有趣。

  • 根据经验,我发现丢弃过于频繁的文本特征(超过文档的 50%)可以更好地进行文本聚类,因为聚类更加分离,因此更容易找到 k 均值(更稳定的解决方案)。另一方面,对于文本分类,“max_df”的最佳值通常在 0.75 到 1 之间(通过与监督信号的交叉验证发现)。至于 GMM 与 KMeans,k-means 的训练速度更快。 (2认同)