2017-05-10 2 views
0

J'ai formé un algorithme LDA sur un corpus, et ce que je voudrais faire, c'est obtenir pour chaque phrase le sujet sur lequel il correspond, afin de faire une comparaison entre ce que l'algorithme trouve et les étiquettes que j'ai.Gensim trouver des sujets dans des phrases

J'ai essayé avec le code ci-dessous, mais les résultats sont tout à fait mauvais, je trouve beaucoup de sujet 17 (peut-être 25% du volume, il devrait être plus proche de 5%)

Merci pour votre aide

# text lemmatized: list of string lemmatized 
dico = Dictionary(texts_lemmatized) 
corpus_lda = [dico.doc2bow(text) for text in texts_lemmatized] 

lda_ = LdaModel(corpus_lda, num_topics=18) 

df_ = pd.DataFrame([]) 
data = [] 

# theme_commentaire = label of the string 
for i in range(0, len(theme_commentaire)): 
    # lda_.get_document_topics() gives the distribution of all topic for a specific sentence 
    algo = max(lda_.get_document_topics(corpus_lda[i]))[0] 
    human = theme_commentaire[i] 
    data.append([str(algo), human]) 

cols = ['algo', 'human'] 
df_ = pd.DataFrame(data, columns=cols) 
df_.head() 
+0

Lire ce SO Question pertinente: http://stackoverflow.com/q/42269313/7414759 – stovfl

+0

ce n'est pas vraiment mon problème important est de LDA pas TFIDF. J'ai trouvé mon problème cependant, c'est la fonction max(), elle fonctionne sur la valeur clé de ma liste de tuple [(num_topics, probabilités)] donc en gros je vais avoir 17 la plupart du temps parce que c'est la plus grosse clé. – glouis

Répondre

0

Résolue dans les commentaires:

J'ai trouvé mon problème cependant, il est la fonction max(), il fonctionne sur la valeur de clé de ma liste de tuple [(num_topics, probabilité) ] Donc, fondamentalement, je suis Je reçois la plupart du temps 17 parce que c'est la plus grande clé. - glouis