Я играл с LDA в пакете text2vec
и был сбит с толку, почему fit_transfrom
и 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
будут одинаковыми, но они совершенно разные.