主题建模 - 将具有前 2 个主题的文档分配为类别标签 - sklearn 潜在狄利克雷分配

Posted

技术标签:

【中文标题】主题建模 - 将具有前 2 个主题的文档分配为类别标签 - sklearn 潜在狄利克雷分配【英文标题】:Topic modelling - Assign a document with top 2 topics as category label - sklearn Latent Dirichlet Allocation 【发布时间】:2016-03-29 12:45:46 【问题描述】:

我现在正在使用 LDA(潜在狄利克雷分配)主题建模方法来帮助从一组文档中提取主题。根据我从下面的链接中了解到的情况,这是一种无监督学习方法,可以使用提取的主题对每个文档进行分类/标记。

Topic extraction with Non-negative Matrix Factorization and Latent Dirichlet Allocation

在该链接中给出的示例代码中,定义了一个函数来获取与所识别的每个主题相关联的热门单词。

sklearn.__version__

输出[41]:'0.17'

from sklearn.decomposition import LatentDirichletAllocation 


def print_top_words(model, feature_names, n_top_words):
    for topic_idx, topic in enumerate(model.components_):
        print("Topic #%d:" % topic_idx)
        print(" ".join([feature_names[i]
                        for i in topic.argsort()[:-n_top_words - 1:-1]]))
    print()

print("\nTopics in LDA model:")
tf_feature_names = tf_vectorizer.get_feature_names()
print_top_words(lda, tf_feature_names, n_top_words)

我的问题是这样的。是否有构建模型 LDA 的任何组件或矩阵,我们可以从中获得 文档-主题关联

例如,我需要找到与每个文档关联的前 2 个主题作为该文档的文档标签/类别。是否有任何组件可以查找文档中的主题分布,类似于 model.components_ 用于查找主题中的单词分布。

【问题讨论】:

【参考方案1】:

您可以使用 LDA 类的 transform(X) 函数计算文档-主题关联。

在示例代码中,这将是:

doc_topic_distrib = lda.transform(tf)

lda 是拟合的 lda,tf 是要转换的输入数据

【讨论】:

谢谢!像魅力一样工作 我对这个解决方案有点困惑。我希望得到一个显示与每个文档相关的主题的输出。类似文档 #1:主题:[1, 2, 3] 你得到的是每个文档的主题分布。所以每一行对应一个文档,每一列对应一个主题。要获得您想要的结果,您可以查看每一行并获取三个最大值的列索引。这将为您提供每个文档最重要的三个主题。

以上是关于主题建模 - 将具有前 2 个主题的文档分配为类别标签 - sklearn 潜在狄利克雷分配的主要内容,如果未能解决你的问题,请参考以下文章

使用预先存在的主题进行主题建模

LDA 主题建模 - 训练和测试

R语言中对文本数据进行主题模型topic modeling分析

如何通过监督学习将 .txt 文档分类为其他一些 .txt 类别

Latent Dirichlet Allocation(隐狄利克雷分配模型)——论文翻译与分析

模拟 row_number 函数