为什么fit_transform和transform产生不同的结果?

时间:2019-07-16 18:28:30

标签: r nlp lda text2vec

我在使用TbRef软件包中的LDA进行测试,感到困惑,为什么在使用相同数据时text2vecfit_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都一样,但它们却完全不同。

1 个答案:

答案 0 :(得分:0)

好问题!确实,CRAN版本存在问题(并且大多数在github上的dev版本中已修复)。问题如下:

  1. fit_transform期间,我们学习了文档主题分布和单词主题分布。收敛后,我们将单词主题保存在模型中,并返回文档主题作为结果。
  2. transform期间,我们使用固定的词-主题分布,并且仅推断文档-主题。无法保证推断出的文档主题在fit_transform期间是相同的(但是应该足够接近)。

我们在开发版本中所做的更改-我们运行fit_transformtransform,以使每种方法的文档主题分布几乎相同。 (为了确保它们完全相同,还进行了一些其他的参数调整-请参阅开发版本的文档。)