Как я могу кластеризовать темы, полученные из модели скрытого распределения Дирихле при использовании text2vec в R? - PullRequest
0 голосов
/ 22 октября 2019

После запуска моделирования LDA в R с использованием text2vec (как показано ниже) я хочу применить жесткий кластер к результатам тем, чтобы получить второй слой для категоризации, но как мне найти способ вычисления расстояний между ними?

#LDA modeling
library(text2vec)

library(stringr)
 prep_fun = function(x) {
       x %>% 
         str_to_lower                         %>%   #make text lower case
         str_replace_all("[^[:alpha:]]", " ") %>%   #remove non-alpha symbols 
         str_replace_all("\\s+", " ")         %>%   #collapse multiple spaces 
         str_replace_all("\\W*\\b\\w\\b\\W*", " ")  #No individual letters
    }

library(tm)
tok_fun <- function(x) {
tokens <- word_tokenizer(x)
lapply(tokens, tm::stemDocument, language="english")
}

t1 <- Sys.time()
vocab <- create_vocabulary(it_patentes, ngram = c(ngram_min = 1L, ngram_max = 3L), 
                           stopwords = palabrascompletas)
pruned_vocab <- prune_vocabulary(vocab, term_count_min =  max(vocab$term_count)*.01, 
                                 doc_proportion_min = 0.001)          
pruned_vocab <- pruned_vocab[order(-pruned_vocab$term_count),]
pruned_vocab <- pruned_vocab[1:500,]

vectorizer <- vocab_vectorizer(pruned_vocab)
print(difftime(Sys.time(), t1, units = 'sec'))

#Construct document-term matrix
t1 <- Sys.time()
set.seed(17)
dtm <- create_dtm(it_patentes, vectorizer,type = "dgTMatrix", progressbar = FALSE)
print(difftime(Sys.time(), t1, units = 'sec'))

t1 <- Sys.time()
#Model with 5 topics
set.seed(17)
lda_model <- LDA$new(n_topics = 10)
set.seed(17)
doc_topic_distr <- lda_model$fit_transform(x = dtm_tfidf,  progressbar = F) 
print(difftime(Sys.time(), t1, units = 'sec'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...