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

How to plot a document topic distribution in structural topic modeling R-package?

如果我使用 python Sklearn 进行 LDA 主题建模,我可以使用转换函数来获得 "document topic distribution" LDA 结果,如下所示:

document_topic_distribution = lda_model.transform(document_term_matrix)

现在我也尝试了 R structural topic models (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 也没有真正帮助我。

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

的确,theta参数是一个

Number of Documents by Number of Topics matrix of topic proportions.

这需要一些语言解析:它是一个 N_DOCS × N_TOPICS 的矩阵,即它有 N_DOCS 行,每个文档一个,N_TOPICS 列,一个每个主题。这些值是主题比例,即如果 stm_model[1, ] == c(.3, .2, .5),则意味着文档 1 是 30% 的主题 1、20% 的主题 2 和 50% 的主题 3。

要找出哪个主题主导文档,您必须找到最大值的(列!)索引,可以检索该索引,例如通过用 MARGIN=1 调用 apply,基本上就是 "do this row-wise"; which.max 简单地 returns 最大值的索引:

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