В пакете R text2vec - Как темы, сгенерированные моделью LDA, могут быть назначены связанным документам.

Использование пакета text2vec в R-реализованной модели LDA, но мне интересно, как назначить каждый документ темам

BELOW HERE is my code:

library(stringr)
library(rword2vec)
library(wordVectors)
#install.packages("text2vec")
library(text2vec)
library(data.table)
library(magrittr)

prep_fun = function(x) {
  x %>% 
    # make text lower case
    str_to_lower %>% 
    # remove non-alphanumeric symbols
    str_replace_all("[^[:alpha:]]", " ") %>% 
    # collapse multiple spaces
    str_replace_all("\\s+", " ")
}
movie_review_train = prep_fun(movie_review_train)

tokens = movie_review_train[1:1000] %>% 
  tolower %>% 
  word_tokenizer
it = itoken(tokens, progressbar = FALSE)
v = create_vocabulary(it)
v
vectorizer = vocab_vectorizer(v)
t1 = Sys.time()
dtm_train = create_dtm(it, vectorizer)
print(difftime(Sys.time(), t1, units = 'sec'))
dim(dtm_train)
stop_words = c("i", "me", "my", "myself", "we", "our", "ours", "ourselves")
t1 = Sys.time()
v = create_vocabulary(it, stopwords = stop_words)
print(difftime(Sys.time(), t1, units = 'sec'))
pruned_vocab = prune_vocabulary(v, 
                                term_count_min = 10, 
                                doc_proportion_max = 0.5,
                                doc_proportion_min = 0.001)
vectorizer = vocab_vectorizer(pruned_vocab)
# create dtm_train with new pruned vocabulary vectorizer
t1 = Sys.time()
dtm_train  = create_dtm(it, vectorizer)
print(difftime(Sys.time(), t1, units = 'sec'))
dtm_train_l1_norm = normalize(dtm_train, "l1")
tfidf = TfIdf$new()
# fit model to train data and transform train data with fitted model
dtm_train_tfidf = fit_transform(dtm_train, tfidf)

dtm = transform(dtm_train_tfidf, tfidf)
lda_model <-LDA$new(n_topics = ntopics
                    ,doc_topic_prior = alphaprior
                    ,topic_word_prior = deltaprior
)
lda_model$get_top_words(n = 10, topic_number = c(1:5), lambda = 0.3)

После этого я хочу назначить каждому документу соответствующие темы. Я получаю список терминов под темами, но я не знаю, как сопоставить.


person manjari    schedule 02.05.2018    source источник
comment
Как насчет официальной документации text2vec.org/topic_modeling.html#example6?   -  person Dmitriy Selivanov    schedule 02.05.2018
comment
Спасибо за вашу ссылку, но и здесь они сопоставили расстояние между темами и частоту терминов в каждой теме. Я хочу назначить каждый документ темам.   -  person manjari    schedule 03.05.2018


Ответы (1)


Распределение по темам документов, doc_topic_distr, проецирует каждый документ в пространство тем, которое можно рассчитать из приведенного ниже кода на основе документации Дмитрия Селиванова (см. http://text2vec.org/topic_modeling.html#example6).).

Фактически, двумя важными выходными данными тематической модели являются матрица тема-слово и матрица темы документа. Матрица тем-слов или распределение тем-слов показывает вес слов в каждой теме, в то время как матрица-тема документа или распределение тем документа демонстрирует вклад тем в каждый документ.

doc_topic_distr = 
   lda_model$fit_transform(x = dtm, n_iter = 1000, 
                      convergence_tol = 0.001, n_check_convergence = 25, 
                      progressbar = FALSE)
person Sam S    schedule 12.11.2018