[파이썬] 문서 군집화 및 주제 모델링

문서 군집화(Cluster Analysis)는 비슷한 특징을 가진 문서들을 그룹화하는 방법을 말합니다. 주제 모델링(Topic Modeling)은 문서 집합에 있는 주요 주제를 식별하는 방법입니다. 이 블로그 포스트에서는 파이썬을 사용하여 문서 군집화와 주제 모델링을 어떻게 수행할 수 있는지 알아보겠습니다.

문서 군집화(Cluster Analysis)

문서 군집화는 비슷한 특성을 가진 문서들을 그룹화하여 각 그룹의 특성을 파악하는 기법입니다. 예를 들어, 뉴스 기사 데이터에서 비슷한 주제의 기사들을 묶어서 정치, 경제, 스포츠 등의 카테고리를 만들어 낼 수 있습니다.

파이썬에서는 다양한 라이브러리를 사용하여 문서 군집화를 수행할 수 있습니다. 예를 들어, scikit-learn 라이브러리의 KMeans 알고리즘을 사용하여 문서 군집화를 수행할 수 있습니다.

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans

# 문서 데이터를 로드합니다.
documents = ["문서 1 내용", "문서 2 내용", "문서 3 내용", ...]

# TF-IDF 벡터화를 수행합니다.
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(documents)

# KMeans 알고리즘을 사용하여 문서 군집화를 수행합니다.
kmeans = KMeans(n_clusters=3)
kmeans.fit(tfidf_matrix)

# 군집화 결과를 확인합니다.
clusters = kmeans.labels_
for i, document in enumerate(documents):
    print(f"문서 '{document}'는 {clusters[i]}번 군집에 속합니다.")

위 코드는 TfidfVectorizer를 사용하여 문서 데이터를 TF-IDF 벡터로 변환한 후, KMeans 알고리즘을 적용하여 3개의 군집으로 문서를 분류하는 예시입니다. 이를 통해 각 문서가 어떤 군집에 속하는지 확인할 수 있습니다.

주제 모델링(Topic Modeling)

주제 모델링은 문서 집합에서 주요 주제를 추출하는 기법입니다. 예를 들어, 뉴스 기사 데이터에서 “경제”, “정치”, “스포츠”와 같은 주요 주제를 식별할 수 있습니다.

파이썬에서 주제 모델링을 수행하기 위해 여러 라이브러리를 사용할 수 있습니다. 가장 널리 사용되는 주제 모델링 알고리즘은 Latent Dirichlet Allocation (LDA)입니다. gensim 라이브러리를 사용하여 LDA를 수행할 수 있습니다.

from gensim import corpora
from gensim.models import LdaModel
from pprint import pprint

# 문서 데이터를 로드합니다.
documents = ["문서 1 내용", "문서 2 내용", "문서 3 내용", ...]

# 문서를 단어 사전으로 변환합니다.
tokenized_documents = [document.split() for document in documents]
dictionary = corpora.Dictionary(tokenized_documents)

# 문서를 BOW(Bag of Words) 형태로 변환합니다.
corpus = [dictionary.doc2bow(tokenized_document) for tokenized_document in tokenized_documents]

# LDA 모델을 학습시킵니다.
lda_model = LdaModel(corpus=corpus, id2word=dictionary, num_topics=3, passes=10)

# 학습된 LDA 모델을 사용하여 문서의 주제를 추출합니다.
topics = lda_model.get_document_topics(corpus)
for i, document in enumerate(documents):
    pprint(f"문서 '{document}'의 주요 주제는:")
    pprint([(topic, round(prob, 2)) for topic, prob in topics[i]])

위 코드는 주어진 문서 데이터를 토큰화하여 단어 사전과 BOW 형태로 변환한 후, LDA 모델을 사용하여 주요 주제를 추출하는 예시입니다. 각 문서의 주요 주제와 해당 주제의 확률을 확인할 수 있습니다.

여기까지 문서 군집화와 주제 모델링을 파이썬에서 어떻게 수행할 수 있는지에 대해 알아보았습니다. 이러한 기법을 사용하면 다양한 데이터 분석 및 자연어 처리 작업에서 유용하게 활용할 수 있습니다.