Io ho usato Latent Dirichlet Allocation (sklearn implementazione) per analizzare circa 500 articoli scientifici-abstract e ho ottenuto argomenti contenenti le parole più importanti (in lingua tedesca). Il mio problema è interpretare questi valori associati alle parole più importanti. Ho ipotizzato di ottenere probabilità per tutte le parole per argomento che aggiungono fino a 1, il che non è il caso.Come interpretare i componenti LDA (usando sklearn)?
Come posso interpretare questi valori? Per esempio vorrei essere in grado di dire perché l'argomento # 20 ha parole con valori molto più alti di altri argomenti. Ha la sua altezza assoluta a che fare con la probabilità bayesiana? L'argomento è più comune nel corpus? Non sono ancora in grado di riunire questi valori con la matematica dietro l'ADL.
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.decomposition import LatentDirichletAllocation
tf_vectorizer = CountVectorizer(max_df=0.95, min_df=1, top_words=stop_ger,
analyzer='word',
tokenizer = stemmer_sklearn.stem_ger())
tf = tf_vectorizer.fit_transform(texts)
n_topics = 10
lda = LatentDirichletAllocation(n_topics=n_topics, max_iter=5,
learning_method='online',
learning_offset=50., random_state=0)
lda.fit(tf)
def print_top_words(model, feature_names, n_top_words):
for topic_id, topic in enumerate(model.components_):
print('\nTopic Nr.%d:' % int(topic_id + 1))
print(''.join([feature_names[i] + ' ' + str(round(topic[i], 2))
+' | ' for i in topic.argsort()[:-n_top_words - 1:-1]]))
n_top_words = 4
tf_feature_names = tf_vectorizer.get_feature_names()
print_top_words(lda, tf_feature_names, n_top_words)
Topic Nr.1: demenzforsch 1.31 | fotus 1.21 | umwelteinfluss 1.16 | forschungsergebnis 1.04 |
Topic Nr.2: fur 1.47 | zwisch 0.94 | uber 0.81 | kontext 0.8 |
...
Topic Nr.20: werd 405.12 | fur 399.62 | sozial 212.31 | beitrag 177.95 |
Hai raggiunto qualche conclusione al riguardo? Sto affrontando lo stesso problema. Hai provato il metodo di punteggio? Sul mio codice restituisce un NaN ... –
Appena trovato [questo isssue] (https://github.com/scikit-learn/scikit-learn/issues/6353) sul github di scikit-learn, questa implementazione sembra essere ancora avere troppi bug per essere utile Probabilmente è meglio usare [gensim] (https://radimrehurek.com/gensim/). –
Grazie per aver condiviso il link gihub! – LSz