2017-07-25 2 views
1

Quand je former mon modèle LDA en tant que telComment obtenir une distribution de sujet complète pour un document utilisant Gensim LDA?

dictionary = corpora.Dictionary(data) 
corpus = [dictionary.doc2bow(doc) for doc in data] 
num_cores = multiprocessing.cpu_count() 
num_topics = 50 
lda = LdaMulticore(corpus, num_topics=num_topics, id2word=dictionary, 
workers=num_cores, alpha=1e-5, eta=5e-1) 

Je veux obtenir une distribution de sujet complet pour tous num_topics pour chaque document. C'est, dans ce cas particulier, je veux que chaque document ait 50 sujets contribuant à la distribution et Je veux être en mesure d'accéder à la contribution de tous les 50 sujets. Ce résultat est ce que LDA devrait faire si adhérant strictement aux mathématiques de LDA. Cependant, le gensim ne sort que les sujets qui dépassent un certain seuil comme indiqué here. Par exemple, si je tente

lda[corpus[89]] 
>>> [(2, 0.38951721864890398), (9, 0.15438596408262636), (37, 0.45607443684895665)] 

qui ne montre que 3 sujets qui contribuent le plus à documenter 89. J'ai essayé la solution dans le lien ci-dessus, mais cela ne fonctionne pas pour moi. J'ai toujours la même sortie:

theta, _ = lda.inference(corpus) 
theta /= theta.sum(axis=1)[:, None] 

produit la même sortie c'est-à-dire seulement 2,3 sujets par document.

Ma question est de savoir comment puis-je modifier ce seuil pour que je puisse accéder au COMPLET distribution de sujet pour chaque document? Comment puis-je accéder à la distribution complète du sujet, même si la contribution d'un sujet à un document est insignifiante? La raison pour laquelle je veux la distribution complète est que je peux effectuer une recherche KL similarity entre la distribution des documents.

Merci à l'avance

Répondre

0

il ne semble pas que tout le monde a répondu, donc je vais essayer de répondre à cette mieux que je peux compte tenu de la gensim documentation.

Il semble que vous devez définir un paramètre minimum_probability à 0,0 lors de la formation du modèle pour obtenir les résultats souhaités:

lda = LdaMulticore(corpus=corpus, num_topics=num_topics, id2word=dictionary, workers=num_cores, alpha=1e-5, eta=5e-1, 
       minimum_probability=0.0) 

lda[corpus[233]] 
>>> [(0, 5.8821799358842424e-07), 
(1, 5.8821799358842424e-07), 
(2, 5.8821799358842424e-07), 
(3, 5.8821799358842424e-07), 
(4, 5.8821799358842424e-07), 
(5, 5.8821799358842424e-07), 
(6, 5.8821799358842424e-07), 
(7, 5.8821799358842424e-07), 
(8, 5.8821799358842424e-07), 
(9, 5.8821799358842424e-07), 
(10, 5.8821799358842424e-07), 
(11, 5.8821799358842424e-07), 
(12, 5.8821799358842424e-07), 
(13, 5.8821799358842424e-07), 
(14, 5.8821799358842424e-07), 
(15, 5.8821799358842424e-07), 
(16, 5.8821799358842424e-07), 
(17, 5.8821799358842424e-07), 
(18, 5.8821799358842424e-07), 
(19, 5.8821799358842424e-07), 
(20, 5.8821799358842424e-07), 
(21, 5.8821799358842424e-07), 
(22, 5.8821799358842424e-07), 
(23, 5.8821799358842424e-07), 
(24, 5.8821799358842424e-07), 
(25, 5.8821799358842424e-07), 
(26, 5.8821799358842424e-07), 
(27, 0.99997117731831464), 
(28, 5.8821799358842424e-07), 
(29, 5.8821799358842424e-07), 
(30, 5.8821799358842424e-07), 
(31, 5.8821799358842424e-07), 
(32, 5.8821799358842424e-07), 
(33, 5.8821799358842424e-07), 
(34, 5.8821799358842424e-07), 
(35, 5.8821799358842424e-07), 
(36, 5.8821799358842424e-07), 
(37, 5.8821799358842424e-07), 
(38, 5.8821799358842424e-07), 
(39, 5.8821799358842424e-07), 
(40, 5.8821799358842424e-07), 
(41, 5.8821799358842424e-07), 
(42, 5.8821799358842424e-07), 
(43, 5.8821799358842424e-07), 
(44, 5.8821799358842424e-07), 
(45, 5.8821799358842424e-07), 
(46, 5.8821799358842424e-07), 
(47, 5.8821799358842424e-07), 
(48, 5.8821799358842424e-07), 
(49, 5.8821799358842424e-07)]