在 R 中使用 LDA 对新文本进行分类

Classifying new text using LDA in R

我第一次尝试使用 R 进行主题建模。所以,这可能是一个非常愚蠢的问题,但我被卡住了,谷歌搜索没有给出明确的答案。

给定一个文档语料库,我使用 LDA 函数来识别语料库中的不同主题。模型拟合完成后,如何将模型应用于新一批文档以将它们分类到目前发现的主题中?

示例代码:

data("AssociatedPress", package = "topicmodels")

n <- nrow(AssociatedPress)
train_data <- sample(1:n,0.75*n,replace = FALSE)
AssociatedPress_train <- AssociatedPress[(train_data),]
AssociatedPress_test <- AssociatedPress[!(train_data),]

ap_lda <- LDA(AssociatedPress_train, k = 5, control = list(seed = 1234))

现在,我可以使用拟合模型 ap_lda 对 AssociatedPress_test 中的文档进行分类吗?如果是,如何?如果不是,那么为这种未来分类创建模型的最佳方法是什么?

您可以使用 topicmodels::posterior() 函数来查找 AssociatedPress_test 对象中每个新文档的 "top topic"。下面是一个显示如何完成此操作的片段。

# code provided in quesiton------------------------------------------
library(tm)
data("AssociatedPress", package = "topicmodels")

n <- nrow(AssociatedPress)
train_data <- sample(1:n, 0.75*n, replace = FALSE)
AssociatedPress_train <- AssociatedPress[ train_data, ]
AssociatedPress_test  <- AssociatedPress[-train_data, ]

ap_lda <- topicmodels::LDA(AssociatedPress_train, k = 5, 
                           control = list(seed = 1234))
#--------------------------------------------------------------------

#posterior probabilities of topics for each document & terms
post_probs <- topicmodels::posterior(ap_lda, AssociatedPress_test)

#classify documents by finding topic with max prob per doc
top_topic_per_doc <- apply(post$topics, 1, which.max)

head(top_topic_per_doc)

#OUTPUT
# [1] 4 2 4 2 2 2