tf-idf文档术语矩阵和LDA:R中的错误消息

时间:2017-08-08 09:55:35

标签: r matrix text-mining lda tidytext

我们可以将tf-idf文档术语矩阵输入潜在Dirichlet分配(LDA)吗?如果有,怎么样?

它在我的情况下不起作用,LDA功能需要'term-frequency'文档术语矩阵。

谢谢

(我提出的问题尽可能简洁。所以,如果你需要更多细节,我可以添加

##########################################################################
                           TF-IDF Document matrix construction
##########################################################################    

> DTM_tfidf <-DocumentTermMatrix(corpora,control = list(weighting = 
function(x)+   weightTfIdf(x, normalize = FALSE)))
> str(DTM_tfidf)
List of 6
$ i       : int [1:4466] 1 1 1 1 1 1 1 1 1 1 ...
$ j       : int [1:4466] 6 10 22 26 28 36 39 41 47 48 ...
$ v       : num [1:4466] 6 2.09 1.05 3.19 2.19 ...
$ nrow    : int 64
$ ncol    : int 297
$ dimnames:List of 2
  ..$ Docs : chr [1:64] "1" "2" "3" "4" ...
  ..$ Terms: chr [1:297] "accommod" "account" "achiev" "act" ...
- attr(*, "class")= chr [1:2] "DocumentTermMatrix" "simple_triplet_matrix"
- attr(*, "weighting")= chr [1:2] "term frequency - inverse document 
frequency" "tf-idf"

##########################################################################
                           LDA section
##########################################################################

> LDA_results <-LDA(DTM_tfidf,k, method="Gibbs", control=list(nstart=nstart,
  +                                seed = seed, best=best, 
  +                                burnin = burnin, iter = iter, thin=thin))

##########################################################################
                           Error messages
##########################################################################
  Error in LDA(DTM_tfidf, k, method = "Gibbs", control = list(nstart = 
  nstart,  : 
  The DocumentTermMatrix needs to have a term frequency weighting

1 个答案:

答案 0 :(得分:0)

如果您使用topicmodels包浏览LDA主题建模的文档,例如在R控制台中键入?LDA,您将看到此建模过程期望频率加权文档术语矩阵,而不是tf-idf加权。

"Object of class "DocumentTermMatrix" with term-frequency weighting or an object coercible..."

所以答案是否定的,你不能直接在这个函数中使用tf-idf加权的DTM。如果您已经拥有 tf-idf加权的DTM,则可以使用tm::weightTf()进行转换以获得必要的权重。如果你是从头开始构建一个文档术语矩阵,那么不要用tf-idf来加权它。