Gensim은 Python에서 토픽 모델링을 위한 라이브러리이며, 문서 클러스터링에도 활용할 수 있습니다. 이 블로그 포스트에서는 Gensim을 사용하여 문서 클러스터링을 수행하는 방법에 대해 알아보겠습니다.
데이터 로드 및 전처리
Gensim을 사용하기 위해서는 먼저 데이터를 로드 및 전처리해야 합니다. 일반적으로 텍스트 데이터의 경우, 토큰화, 불용어 처리 및 정규화와 같은 전처리 단계가 필요합니다. 잠시 후에 샘플 코드를 통해 데이터 전처리 단계를 살펴보겠습니다.
# 필요한 라이브러리 임포트
from gensim.corpora import Dictionary
from gensim.models import TfidfModel
from gensim.similarities import MatrixSimilarity
from gensim.models import LsiModel
from gensim.models.coherencemodel import CoherenceModel
from gensim.models.ldamodel import LdaModel
# 데이터 로드 및 전처리
def preprocess_data(data):
# 토큰화 및 정규화 등의 전처리 단계
processed_data = tokenization(data)
processed_data = normalization(processed_data)
return processed_data
# 데이터 전처리 단계 적용
preprocessed_data = preprocess_data(data)
문서 벡터화
Gensim을 사용하여 문서 클러스터링을 수행하기 위해서는 문서를 벡터 형태로 표현하는 과정이 필요합니다. 여기서는 TF-IDF벡터화를 사용하여 문서를 벡터로 변환하는 방법에 대해 살펴보겠습니다.
# 토큰화된 문서를 기반으로 사전을 생성
dictionary = Dictionary(preprocessed_data)
# 사전을 사용하여 문서를 BOW(Bag of Words) 형태로 변환
bow_corpus = [dictionary.doc2bow(doc) for doc in preprocessed_data]
# TF-IDF 모델 생성 및 문서를 TF-IDF 벡터로 변환
tfidf_model = TfidfModel(bow_corpus)
tfidf_corpus = tfidf_model[bow_corpus]
문서 클러스터링
인덱싱된 문서 집합이 생성되면, Gensim을 사용하여 문서 클러스터링 알고리즘을 적용할 수 있습니다. 여기서는 Latent Semantic Indexing (LSI)를 사용하여 클러스터링을 수행하는 방법에 대해 알아보겠습니다.
# LSI 모델 생성
lsi_model = LsiModel(tfidf_corpus, id2word=dictionary, num_topics=10)
# 문서를 LSI 벡터로 변환
lsi_corpus = lsi_model[tfidf_corpus]
# 유사도 행렬 생성
similarity_matrix = MatrixSimilarity(lsi_corpus, num_features=len(dictionary))
# 클러스터링
num_clusters = 3
clusters = {i: [] for i in range(num_clusters)}
for i, doc in enumerate(lsi_corpus):
cluster_id = sorted(enumerate(similarity_matrix[doc]), key=lambda x: x[1], reverse=True)[0][0]
clusters[cluster_id].append(i)
# 클러스터 결과 확인
for cluster_id, doc_ids in clusters.items():
print(f"Cluster {cluster_id + 1}: {doc_ids}")
클러스터 평가
마지막으로, 문서 클러스터링 결과를 평가해야 합니다. Gensim을 사용하여 주어진 클러스터링 결과의 일관성을 평가하는 Coherence Model을 계산하는 방법에 대해 알아보겠습니다.
# Coherence Model을 사용하여 클러스터링 결과 평가
coherence_model = CoherenceModel(model=lsi_model, texts=preprocessed_data, coherence='c_v')
coherence_score = coherence_model.get_coherence()
print(f"Coherence Score: {coherence_score}")
이상으로 Gensim을 사용한 문서 클러스터링에 대해 알아보았습니다. Gensim은 다양한 기능을 제공하기 때문에, 알고리즘 적용과 평가 단계에서 여러 가지 설정을 변경하여 클러스터링 성능을 향상시킬 수 있습니다. 추가로, LDA, Word2Vec 등의 다른 알고리즘을 사용하여 클러스터링을 수행하는 방법에 대해도 찾아보시기를 권장합니다.