1

我正在使用text2vec包中的 LDA,并且很困惑为什么使用相同的数据时fit_transfrom和是不同的。transform

文档指出,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相同new_doc_topic_distr,但它们完全不同。

4

1 回答 1

1

好问题!事实上,CRAN 版本存在问题(它主要在 github 上的开发版本中修复)。问题如下:

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

我们在开发版本中所做的更改 - 我们运行fit_transformtransform为每种方法提供几乎相同的文档主题分布。(有几个额外的参数调整以确保它们完全相同 - 请参阅开发版本的文档)。

于 2019-07-17T06:31:03.693 回答