토픽 모델링 (Topic Modeling)은 텍스트 본문의 숨겨진 의미구조를 발견하기 위해 사용되는 텍스트 마이닝 기법 중 하나로, 수집된 문서에 어떤 주제들이 존재하는지를 찾아내는 것을 목적으로 한다. 즉, 특정 주제에 관한 문헌에는 그 주제에 관한 단어가 다른 단어들에 비해 더 자주 등장한다는 것을 기반으로 자주 함께 나타나는 단어들을 군집함으로써 잠재된 주제를 추론하는 모형이라고 할 수 있다.
토픽 모델링 모형 중에서는 잠재 디리클레 할당 (Latent Dirichlet Allocation, LDA) 모형이 가장 많이 사용되고 있다. LDA는 주어진 문서에 대하여 각 문서에 어떤 주제들이 존재하는지에 대한 확률모형으로서, 주제별 단어의 분포나 문서별 주제의 분포를 모두 추정할 수 있다. LDA 모형은 복잡한 수식적 설명과 원리 설명을 필요로 하지만, 직관적으로는 함께 자주 나타나는 단어의 주제를 찾는 것이라고 할 수 있다. 즉, 미리 알고 있는 주제별 단어 분포를 바탕으로, 주어진 문서에서 발견된 단어 분포를 분석함으로써 해당 문서가 어떤 주제들을 다루고 있을지를 예측한다.
연습
1) 데이터 전처리
LDA는 문서 단어 행렬 또는 TF-IDF 행렬을 입력으로 받는다. 즉, LDA에서 단어의 순서는 고려하지 않는다. 여기서는 리뷰 문서를 TF-IDF 행렬로 변환하도록 한다.
이는 문서 단어 행렬 (DTM) 내의 단어마다 중요한 정도를 가중치로 부여한 방법이다. TF-IDF에서 TF(단어 빈도)는 특정한 단어가 하나의 문서 내에 얼마나 자주 등장하는지를 나타내는 값으로서, 이 값이 높을수록 중요한 단어라고 할 수 있다. 한편, DF(문서 빈도)는 특정 단어가 얼마나 많은 문서에 나타나는지를 나타낸 값인데, 여러 문서에는 자주 등장하지만, 특정 문서 내에서 자주 나오지 않는다면 그 단어의 중요도는 오히려 낮아진다. 이 DF를 역수로 취한 값이 IDF이다. 결국, TF-IDF는 TF와 IDF를 곱한 값으로서 점수가 높은 단어일수록 다른 문서에는 많지 않고, 해당 문서에서 자주 등장하는, 즉 매우 중요한 단어를 의미하게 된다.
#1. 모듈 및 함수 불러오기
from sklearn.feature_extraction.text import TfidfVectorizer
#2. 문서 단어 행렬 변환
stopword = ['영화', '하지만', '근데', '대한', '이게', '없는', '영화가', '영화는', '영화를', 'ㅋㅋ', '내내', '봤습니다', '보고', '보는', '그냥', '많이', '내가', '그리고', '진짜', '정말', '너무', '나는', '있는', '가장', 'ㅎㅎ']
tv= TfidfVectorizer(max_df=.15, ngram_range=(1,4), min_df=2, stop_words = stopword)
vect = tv.fit_transform(review)
print("문서 단어 행렬 변환 결과: \n", vect.toarray())
2) 토픽 모델링 수행
#1. 모듈 및 함수 불러오기
import numpy as np
from sklearn.decomposition import LatentDirichletAllocation
#2. LDA 모형 생성 및 변환
model = LatentDirichletAllocation(n_components=5, learning_method="batch", max_iter=25, random_state=0)
model.fit_transform(vect)
#3. 토픽별 주요 단어 출력
for topic_index, topic in enumerate(model.components_):
#3-1. 중요도 내림차순 정렬 및 인덱스 추출
print('Topic #',topic_index+1)
topic_index = topic.argsort()[::-1]
#3-2. 단어 추출
feature_names = ' '.join([tv.get_feature_names()[i] for i in topic_index[:10]])
print(feature_names)
This post was written based on what I read and studied the book below.
http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9791195511747
댓글