我在使用TbRef
软件包中的LDA进行测试,感到困惑,为什么在使用相同数据时text2vec
和fit_transfrom
是不同的。
The documentation指出,变换将学习的模型应用于新数据,但结果与transform
产生的结果有很大出入
fit_transform
我希望data("movie_review")
library(stringr)
library(text2vec)
library(dpylr)
tokens = movie_review$review[1:4000] %>%
tolower %>%
word_tokenizer
it = itoken(tokens, ids = movie_review$id[1:4000], progressbar = FALSE)
v = create_vocabulary(it) %>%
prune_vocabulary(term_count_min = 10, doc_proportion_max = 0.2)
vectorizer = vocab_vectorizer(v)
dtm = create_dtm(it, vectorizer, type = "dgTMatrix")
lda_model = LDA$new(n_topics = 10, doc_topic_prior = 0.1, topic_word_prior = 0.01)
set.seed(123)
doc_topic_distr =
lda_model$fit_transform(x = dtm, n_iter = 1000,
convergence_tol = 0.001, n_check_convergence = 25,
progressbar = FALSE)
set.seed(123)
new_doc_topic_dist =
lda_model$transform(x = dtm, n_iter = 1000,
convergence_tol = 0.001, n_check_convergence = 25,
progressbar = FALSE)
head(doc_topic_distr)
head(new_doc_topic_dist)
和doc_topic_distr
都一样,但它们却完全不同。
答案 0 :(得分:0)
好问题!确实,CRAN版本存在问题(并且大多数在github上的dev版本中已修复)。问题如下:
fit_transform
期间,我们学习了文档主题分布和单词主题分布。收敛后,我们将单词主题保存在模型中,并返回文档主题作为结果。transform
期间,我们使用固定的词-主题分布,并且仅推断文档-主题。无法保证推断出的文档主题在fit_transform
期间是相同的(但是应该足够接近)。我们在开发版本中所做的更改-我们运行fit_transform
和transform
,以使每种方法的文档主题分布几乎相同。 (为了确保它们完全相同,还进行了一些其他的参数调整-请参阅开发版本的文档。)