Topi c моделирование - запустить LDA в sklearn: как вычислить Wordcloud? - PullRequest
0 голосов
/ 21 марта 2020

Я обучил свою модель LDA на sklearn , чтобы построить модель topi c, но не знаю, как вычислить ключевое слово Wordcloud для каждой из полученных тем?

Вот моя модель LDA:

vectorizer = CountVectorizer(analyzer='word',       
                         min_df=3,                        
                         max_df=6000,
                         stop_words='english',             
                         lowercase=False,                   
                         token_pattern ='[a-zA-Z0-9]{3,}' 
                         max_features=50000,             
                        )
data_vectorized = vectorizer.fit_transform(data_lemmatized) # data_lemmatized is all my processed document text

best_lda_model = LatentDirichletAllocation(batch_size=128, doc_topic_prior=0.1,
                      evaluate_every=-1, learning_decay=0.7,
                      learning_method='online', learning_offset=10.0,
                      max_doc_update_iter=100, max_iter=10,
                      mean_change_tol=0.001, n_components=10, n_jobs=None,
                      perp_tol=0.1, random_state=None, topic_word_prior=0.1,
                      total_samples=1000000.0, verbose=0)

lda_output = best_lda_model.transform(data_vectorized)

Я знаю, что best_lda_model.components_ дает топи c веса слов ... vectorizer.get_feature_names () дает все слова из словаря в каждом топи c ...

Большое спасибо заранее!

1 Ответ

0 голосов
/ 21 марта 2020

Необходимо выполнить итерацию по модели 'component_', которая имеет размер [n_components, n_features], поэтому первое измерение содержит темы, а второе - оценки для каждого слова в словаре. Поэтому сначала вам нужно найти индексы наиболее релевантных слов для тем, а затем, используя словарь 'vocab', определенный с помощью get_features_names (), вы можете получить слова.

import numpy as np

# define vocabulary to get words names 
vocab = vectorizer.get_feature_names()

# dictionary to store words for each topic and number of words per topic to retrive 
words = {}
n_top_words = 10

for topic, component in enumerate(model.components_):

    # need [::-1] to sort the array in descending order
    indices = np.argsort(component)[::-1][:n_top_words]

    # store the words most relevant to the topic
    words[topic] = [vocab[i] for i in indices]
...