R LDAvis 为每个主题定义文档
R LDAvis defining documents for each topic
这是一个关于 LDA 和 R 中的应用程序 LDAvis 的问题。因为这是我第一次使用这个包,如果能帮助我进行研究,我将不胜感激。
我希望能够按概率查看每个主题定义的文档。我正在使用调查数据,我正在查看评论部分并将它们中的每一个定义为文档。
我将使用 cpsievert 的示例 "A topic model for movie reviews",因为这与我的代码非常相似。完整代码可以在下面link找到:访问
http://cpsievert.github.io/LDAvis/reviews/reviews.html
我已经到了使用基于以下代码的 LDA 模型拟合模型的阶段:
set.seed(123)
fit <- lda.collapsed.gibbs.sampler(documents = documents, K = K, vocab = vocab,
num.iterations = G, alpha = alpha,
eta = eta, initial = NULL, burnin = 0,
compute.log.likelihood = TRUE)
然后使用LDAvis创建交互式html,代码如下:
json <- createJSON(phi = MovieReviews$phi,
theta = MovieReviews$theta,
doc.length = MovieReviews$doc.length,
vocab = MovieReviews$vocab,
term.frequency = MovieReviews$term.frequency)
现在基于互动html我已经根据频率术语定义了主题。 Movie Reviews 上有一个这样的例子,可以通过以下 link:
找到
http://cpsievert.github.io/LDAvis/reviews/vis/#topic=7&lambda=0.6&term=
这个话题可以定义为电影评论的喜剧。
因此,如果在此示例中 "topic7" 被称为喜剧,您如何查看最有可能由该主题定义的评论?
我想知道,我将如何定义基于 topic7 的文档然后能够查看它们,比如使用:
View(MovieReviwes$Topic7)
如果这个问题又宽又长,我深表歉意,但如果有人可以使用我在 link 中给出的示例来回答它,这将大有帮助。提前致谢。
我认为您可能不完全理解 lda 的作用及其工作原理。 lda 模型将生成 k 个主题的列表,然后告诉您哪些词被分配到哪些主题以及它们各自被分配到各个主题的概率。听起来您真正想做的是执行 document/topic 分类而不是 word/topic 分类,如果是这种情况,那么 lda
包将无法满足您的需求。
如果你想要一个真正基于lda
对象的文档分类方法,我想你可以return主题名称每个文档分配给它的最大单词数,尽管我想如果有联系你会 运行 陷入困境(联系的概率随着 k增加和文档数量增加)。
编辑:要求的快速而肮脏的方式:
sums <- fit$document_sums
sums <- t(sums)
sums <- as.data.frame(sums)
topics <- colnames(sums)[max.col(sums,ties.method="first")]
topics <- t(topics)
sums$topics <- topics
这是一个关于 LDA 和 R 中的应用程序 LDAvis 的问题。因为这是我第一次使用这个包,如果能帮助我进行研究,我将不胜感激。
我希望能够按概率查看每个主题定义的文档。我正在使用调查数据,我正在查看评论部分并将它们中的每一个定义为文档。
我将使用 cpsievert 的示例 "A topic model for movie reviews",因为这与我的代码非常相似。完整代码可以在下面link找到:访问
http://cpsievert.github.io/LDAvis/reviews/reviews.html
我已经到了使用基于以下代码的 LDA 模型拟合模型的阶段:
set.seed(123)
fit <- lda.collapsed.gibbs.sampler(documents = documents, K = K, vocab = vocab,
num.iterations = G, alpha = alpha,
eta = eta, initial = NULL, burnin = 0,
compute.log.likelihood = TRUE)
然后使用LDAvis创建交互式html,代码如下:
json <- createJSON(phi = MovieReviews$phi,
theta = MovieReviews$theta,
doc.length = MovieReviews$doc.length,
vocab = MovieReviews$vocab,
term.frequency = MovieReviews$term.frequency)
现在基于互动html我已经根据频率术语定义了主题。 Movie Reviews 上有一个这样的例子,可以通过以下 link:
找到http://cpsievert.github.io/LDAvis/reviews/vis/#topic=7&lambda=0.6&term=
这个话题可以定义为电影评论的喜剧。
因此,如果在此示例中 "topic7" 被称为喜剧,您如何查看最有可能由该主题定义的评论?
我想知道,我将如何定义基于 topic7 的文档然后能够查看它们,比如使用:
View(MovieReviwes$Topic7)
如果这个问题又宽又长,我深表歉意,但如果有人可以使用我在 link 中给出的示例来回答它,这将大有帮助。提前致谢。
我认为您可能不完全理解 lda 的作用及其工作原理。 lda 模型将生成 k 个主题的列表,然后告诉您哪些词被分配到哪些主题以及它们各自被分配到各个主题的概率。听起来您真正想做的是执行 document/topic 分类而不是 word/topic 分类,如果是这种情况,那么 lda
包将无法满足您的需求。
如果你想要一个真正基于lda
对象的文档分类方法,我想你可以return主题名称每个文档分配给它的最大单词数,尽管我想如果有联系你会 运行 陷入困境(联系的概率随着 k增加和文档数量增加)。
编辑:要求的快速而肮脏的方式:
sums <- fit$document_sums
sums <- t(sums)
sums <- as.data.frame(sums)
topics <- colnames(sums)[max.col(sums,ties.method="first")]
topics <- t(topics)
sums$topics <- topics