Skip to content

LDA

전처리는 토픽 모델링을 위한 전처리를 참조

gensim 전처리

설치

!pip install gensim

문서 단어 행렬을 gensim 형식으로 변환

from gensim.matutils import Sparse2Corpus
words = cv.get_feature_names_out().tolist()
corpus = Sparse2Corpus(dtm.T)
id2word = dict(enumerate(words))

0번 문서의 단어 수 보기

corpus[0]

LDA

from gensim.models.ldamodel import LdaModel
lda_model = LdaModel(
    corpus=corpus,
    id2word=id2word,
    num_topics=20,
    random_state=100,
    update_every=1,
    chunksize=100,
    passes=10,
    iterations=400,
    alpha='auto',
    eta='auto',
    per_word_topics=True)

토픽 보기

0번 토픽 보기

lda_model.show_topic(0)

전체 토픽 보기

lda_model.show_topics()

특정 단어와 관련된 토픽 보기

word_idx = words.index('모발')
lda_model.get_term_topics(word_idx)

문서별 토픽 보기

doc_idx = 0
lda_model.get_document_topics(corpus[doc_idx])

평가

로그 혼란도(0에 가까울 수록 성능이 높음)

lda_model.log_perplexity(corpus)

다양도(1에 가까울 수록 성능이 높음)

topn = 25
top_words = set()

for topic in range(lda_model.num_topics):
    for word, prob in lda_model.show_topic(topic, topn=topn):
        top_words.add(word)

len(top_words) / (lda_model.num_topics * topn)

시각화

설치

!pip install pyLDAvis==2.1.2

단어 목록

from gensim.corpora.dictionary import Dictionary
dic = Dictionary()
dic.id2token = id2word
dic.token2id = {w: i for i, w in id2word.items()}

시각화

import pyLDAvis.gensim
p = pyLDAvis.gensim.prepare(
lda_model, corpus, dic, sort_topics=False)
pyLDAvis.display(p)