如何在结构主题建模R-package中绘制文档主题分布?

时间:2018-10-23 12:15:31

标签: python r scikit-learn topic-modeling

如果我使用python Sklearn进行LDA主题建模,则可以使用transform函数获取LDA结果的“文档主题分布”,如下所示:

document_topic_distribution = lda_model.transform(document_term_matrix)

现在我也尝试了R结构主题模型(stm)软件包,我希望得到相同的结果。 stm软件包中是否有任何功能可以产生相同的结果(文档主题分发)? 我有如下创建的stm对象:

stm_model <- stm(documents = out$documents, vocab = out$vocab,
                       K = number_of_topics, data = out$meta, 
                       max.em.its = 75, init.type = "Spectral" )

但是我没有发现如何从该对象中获得所需的分布。 documentation并没有真正帮助我。

1 个答案:

答案 0 :(得分:2)

正如emilliman5指出的那样,您的stm_model提供了对模型基础参数的访问,如图in the documentation所示。

实际上,theta参数是

  

按主题数划分的主题数矩阵中的文档数。

这需要一些语言上的解析:它是一个N_DOCS x N_TOPICS矩阵,即它具有N_DOCS行,每个文档一个,以及N_TOPICS列,每个主题一个。这些值是主题比例,即stm_model[1, ] == c(.3, .2, .5),表示文档1为主题30%,主题1、20%和主题3为50%。

要找出主题占主导地位的文档,您必须找到最大值的(列!)索引,该索引可通过以下方式检索:通过使用apply调用MARGIN=1,基本上说“逐行执行”; which.max仅返回最大值的索引:

apply(stm_model$theta, MARGIN=1, FUN=which.max)