Python 주제 분석


수강중

21. LDA 실습

전처리된 데이터 불러오기

import joblib
data = joblib.load('corpus.pkl')
locals().update(data)

LDA 모형

from gensim.models.ldamodel import LdaModel

모형을 설정한다.

  • num_topics: 최종 분석의 주제 수
  • passes: 총 훈련 과정의 수. 신경망 학습에서 에포크와 같다
  • iteration : 각 문서에 대해 업데이트를 반복하는 횟수
  • random_state: 재현 가능한 결과를 위해 임의의 숫자를 설정한다.
model = LdaModel(
    corpus=corpus,
    id2word=id2word,
    
    num_topics=5,
    passes=3,
    iterations=100,
    
    random_state=123)

모형 저장과 불러오기

저장

model.save('lda-model')

불러오기

model = LdaModel.load('lda-model')

문서의 주제별 연관 단어 확인

5개 주제로 분류하였을 때, 각 주제와 관련있는 단어를 확인합니다.

show_topic: 주제분류 결과는 해당 토픽과 가중치가 높은 10개 단어를 나타냄

model.show_topic(0)
[('war', 0.0064665256),
 ('king', 0.006203565),
 ('men', 0.006002039),
 ('group', 0.0055560553),
 ('killed', 0.0054466403),
 ('ship', 0.0049963156),
 ('world', 0.0048147435),
 ('escape', 0.0047872616),
 ('army', 0.0046246666),
 ('time', 0.0043569086)]

'war', 'escape', 'army' 등의 단어가 있는 것으로 보아, 첫번째 주제는 전쟁과 관련된 영화라 추정할 수 있다.

문서의 주제 확인

검증데이터 x_test 의 첫번째 문서를 대상으로 앞서 만든 주제분석 모형 결과를 확인한다.

from gensim.matutils import Sparse2Corpus

테스트 데이터의 단어문서행렬을 불러온다.

data = joblib.load('movie.pkl')
x_test = data['x_test']

gensim 형식으로 변환한다.

cps_test = Sparse2Corpus(x_test.T)

첫번째 문서를 선택한다.

doc = cps_test[0]
doc
[(9, 1),
 (30, 1),
 (78, 1),
 (110, 1),
 (112, 1),

Sparse2Corpus 대신 다음과 같이 변환할 수도 있다.

row = x_test[0]
doc = list(zip(row.indices, row.data))

models.get_document_topics: 특정 문서가 앞서 학습한 모형의 5개 주제 중 어떤 주제에 해당하는지 예측

model.get_document_topics(doc)
[(0, 0.7408204), (2, 0.08385202), (3, 0.17091121)]

위 결과에서 테스트 데이터의 0번 문서는 0번 주제를 74%, 2번 주제를 8%, 3번 주제에 17% 가지고 있다.