[파이썬] Gensim 활용한 문서 클러스터링

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 등의 다른 알고리즘을 사용하여 클러스터링을 수행하는 방법에 대해도 찾아보시기를 권장합니다.