2016-03-24 23 views
0

oluşturmak ve bir matris oluşturmak için gereken D, belgelerin sayısıdır ve T, konuların sayısıdır. DT (ij), Di adlı belgedeki bir sözcüğün, Tj'e atanan sayısını belirtir. https://rstudio-pubs-static.s3.amazonaws.com/79360_850b2a69980c4488b1db95987a24867a.htmlGensim LDA Ben belgelerin bir dizi konu modelleme uygulamak gerekir bir proje üzerinde çalışıyorum bir 'belge-konu matrisi

Ben gensim için yeni ve şimdiye kadar ben 1. Önişlenmiş bir belge listesini 2. oluşturulan ve belgeleri simgeleþtirilmiþ var:

Şimdiye kadar Bu tut izlemiştir. 3. corpora.Dictionary() id-> sözlük terimi oluşturmak için kullanılır (id2word) 4. tokenized belgeleri bir belge dönem matrisine dönüştürür

bir LDA modeli oluşturdu. Şimdi konu başlıklarım var.

Daha önce bahsettiğim matrisi şimdi nasıl edinebilirim? Bu matrix kullanarak, t ile ilgili 2 belge arasındaki benzerliği hesaplayacağım:

sim (a, b) = 1- | DT (a, t) - DT (b, t) |

cevap

1

kodunuzu Gösterilen yararlı olacaktır, ama biz tarafından daha sonra bağlantılı modeli tanımlanır eğitimde örnek çıkmak olsaydı:

:

ldamodel = gensim.models.ldamodel.LdaModel(corpus, num_topics=2, id2word = dictionary, passes=20) 

Eğer gibi komut şey koymak olabilir

model_name = "name_of_my_model" 
ldamodel.save(model_name) 

Ardından, çalıştırdığınızda, bu, komut dizininin çalıştırıldığı aynı dizinde bir model oluşturur.

print(ldamodel[doc_bow]) 

bu modele benzerlik elde etmek istiyorsanız o zaman da, sorgu belge için bir model oluşturmak ve sonra arasındaki kosinüs benzerliği almak gerekir:

Sonra birlikte konu olasılık dağılımını elde edebilirsiniz iki:. ilgilendiğiniz matris oluşturmak için yararlı olabilir listeleri döndürür pyLDAvis kaynak kodunda bir uygulama yoktur

dictionary = corpora.Dictionary.load('dictionary.dict') 
corpus = corpora.MmCorpus("corpus.mm") 
lda = models.LdaModel.load("name_of_my_model.lda") 

index = similarities.MatrixSimilarity(lda[corpus]) 
index.save("simIndex.index") 

docname = "docs/the_doc.txt" 
doc = open(docname, 'r').read() 
vec_bow = dictionary.doc2bow(doc.lower().split()) 
vec_lda = lda[vec_bow] 

sims = index[vec_lda] 
sims = sorted(enumerate(sims), key=lambda item: -item[1]) 
print sims 
+0

Soruyu cevapladığınız için teşekkür ederiz. Benzerliği bulmak için açıkladığınız süreçleri ben alırım. Ama aslında bir makalede önerilen bazı benzerlik ölçütlerini uygulamaya çalışıyorum. Aslında bu matrise ihtiyacım var: DT, D × T matrisi, burada D doküman sayısı ve T sayısı konu sayısıdır. DT (ij), Di adlı belgedeki bir sözcüğün, Tj'e atanan sayısını belirtir. Bunlar, LDA modelini oluşturmak için kullanılan aynı belgelerdir. –

0

yılında _extract_data yönteminden

Snippet: model için konulardan

def _extract_data(topic_model, corpus, dictionary, doc_topic_dists=None): 
    ... 
    ... 
    ...  
    return {'topic_term_dists': topic_term_dists, 'doc_topic_dists': doc_topic_dists, 
     'doc_lengths': doc_lengths, 'vocab': vocab, 'term_frequency': term_freqs} 

sayı statik olacaktır. Belki de T matrisi için belge konusu dağıtımını bulmakla ilgileniyorsunuzdur. Bu durumda, DxT matrisi doc_lengths x doc_topic_dists olur.

İlgili konular