2021. 1. 25. 18:38ㆍ머신러닝
※ 토픽 모델링 ( Topic modeling )
토픽 모델 (Topic model) 이란, 문서 집합의 추상적인 주제를 발견하기 위한 통계적 모델.
문헌 내에 어떤 주제가 들어있고, 주제 간의 비중이 어떤지는 문헌 집합 내의 단어 통계를 수학적으로 분석함으로써 알아낼 수 있다.
토픽 모델링의 중요한 특징은 레이블이 된 데이터가 필요 없다는 점이며, 스스로 패턴을 식별하는 비지도학습 방식이다.
◎ 토픽 모델링에 대한 사용 사례
• 문서 토픽 요약 : 문서의 토픽을 요약할 수 있어서, 신속하게 분류할 수 있도록 도와줌.
준다.
• 검색엔진 최적화 : 토픽과 관련 키워드를 식별하여, 온라인 기사, 블로그 및 문서를 쉽게 태그 할 수 있으므로 검색 결과 최적화가 향상됨.
• 고객 지원 개선 : 제품 및 서비스 사양, 부서 등 고객 불만이나 피드백에 관련해, 토픽과 관련 키워드를 발견할 수 있다.
▶ 잠재 디리클레 할당 ( Latent Dirichlet Allocation )
- 주어진 문서에 대해 각 문서에 어떤 주제들이 존재하는지에 대한 확률 모델.
'선발', '마무리', '홈런' 단어와 '사고’, '시속'이 있다면 어느 단어를 보았는지에 따라 다양한 주제가 나올 수 있다.
'잠재 디리클레 할당' 이라는 이름은 이런 잠재 정보를 알아내는 방법에서 잠재라는 명칭을 따왔고, 이 때 각 토픽들이 나올 확률이 디리클레 (dirichlet) 분포를 따른다는 가정을 하기 때문에 디리클레라는 단어가 붙었다.
무엇보다 문서의 토픽은 단 하나로 정해지는 것이 아니라, 여러 토픽의 비율로 표현할 수 있다.
from gensim import corpora
from gensim import models
from wordcloud import WordCloud
import matplotlib.pyplot as plt
documents=[
'나는 아침에 라면을 자주 먹는다.',
'나는 아침에 밥 대신에 라면을 자주 먹는다.',
'현대인의 삶에서 스마트폰은 필수품이 되었다.',
'현대인들 중에서 스마트폰을 사용하지 않는 사람은 거의 없다. ',
'점심시간에 스마트폰을 이용해 영어 회화 공부를 하느라 혼자 밥을 먹는다.'
]
stoplist = ('.!?') # 불용어 처리
texts = [[word for word in document.split() if word not in stoplist]
for document in documents]
dictionary = corpora.Dictionary(texts) # 사전 생성 (토큰화)
print(dictionary)
corpus = [dictionary.doc2bow(text) for text in texts] # 말뭉치 생성 (벡터화)
print('corpus : {}'.format(corpus))
#-----------------------------------------------------------------
lda = models.ldamodel.LdaModel(corpus=corpus, id2word=dictionary,
num_topics=2, random_state = 1) # 모델구축
for t in lda.show_topics(): # 주제마다 출현 확률이 높은 단어 순으로 출력
print(t)
#-----------------------------------------------------------------
wc = WordCloud(background_color='white',
font_path='./sample/SeoulNamsanM.ttf') # 워드클라우드
plt.figure(figsize=(30,30))
for t in range(lda.num_topics):
plt.subplot(5,4,t+1)
x = dict(lda.show_topic(t,200))
im = wc.generate_from_frequencies(x)
plt.imshow(im)
plt.axis("off")
plt.title("Topic #" + str(t))
plt.savefig('LDA_wordcloud.png', bbox_inches='tight') # 이미지 저장
▷ 1. 토픽 A : 먹는다 7.5%, 나는 6%, 라면을 5.7%...
▷ 2. 토픽 B : 스마트폰은 5%, 필수품이 5%, 먹는다 5% …
※ 참고도서 : 실무가 훤히 보이는 머신러닝 & 딥러닝 ※