[python] gensim을 활용한 문서군집화 성능 비교

Gensim은 Python으로 작성된 자연어 처리 라이브러리로, 토픽 모델링, 문서 유사성 분석, 텍스트 어셈벨리 등의 작업에 주로 사용됩니다. 특히, Gensim을 사용하여 문서군집화를 수행할 때, 다양한 알고리즘과 파라미터를 적용하여 성능을 비교해볼 수 있습니다.

이번 포스트에서는 Gensim을 사용하여 문서군집화를 수행하는 과정에서 주로 사용되는 알고리즘과 그 성능을 비교해보고자 합니다.

목표

  1. K-means 알고리즘Hierarchical 알고리즘을 사용하여 문서군집화를 수행합니다.
  2. 성능 평가를 위해 각 알고리즘의 군집화 결과를 비교합니다.

데이터셋 준비

분석에 사용할 데이터셋은 캐글 등의 오픈 데이터셋이나 실제 엔터프라이즈 데이터 등을 활용할 수 있습니다. 이 예시에서는 20 뉴스그룹 데이터셋을 사용하여 문서군집화를 수행하겠습니다.

from sklearn.datasets import fetch_20newsgroups
data = fetch_20newsgroups(subset='all', shuffle=True, remove=('headers', 'footers', 'quotes'))
documents = data.data

Gensim을 사용한 문서군집화

Gensim의 TfidfModel을 사용하여 TF-IDF 행렬을 생성하고, 이를 기반으로 문서군집화를 수행합니다. 먼저, TF-IDF 행렬을 생성하는 코드는 다음과 같습니다.

from gensim import corpora
from gensim.models import TfidfModel
from gensim.sklearn_api import TfIdfTransformer

# 텍스트 전처리 및 토큰화
tokenized_docs = [doc.split() for doc in documents]

# 단어장 생성
dictionary = corpora.Dictionary(tokenized_docs)

# TF-IDF 행렬 생성
tfidf_model = TfidfModel(dictionary=dictionary)
tfidf_matrix = tfidf_model[tokenized_docs]

이제 TF-IDF 행렬을 사용하여 문서군집화를 수행할 수 있습니다. gensim.models 모듈에서 제공하는 여러 알고리즘들을 활용하여 성능 비교를 진행합니다.

성능 비교

선택한 알고리즘들을 사용하여 문서군집화를 수행한 후, 각 알고리즘의 성능을 평가합니다. 이를 위해 다음과 같은 지표들을 사용할 수 있습니다.

성능 평가를 위한 코드는 다음과 같습니다.

from sklearn.cluster import KMeans, AgglomerativeClustering
from sklearn.metrics import calinski_harabasz_score, silhouette_score

# K-means 알고리즘을 사용하여 군집화
kmeans_model = KMeans(n_clusters=10, random_state=42)
kmeans_clusters = kmeans_model.fit_predict(tfidf_matrix)

# Hierarchical 알고리즘을 사용하여 군집화
hierarchical_model = AgglomerativeClustering(n_clusters=10)
hierarchical_clusters = hierarchical_model.fit_predict(tfidf_matrix)

# 성능 평가 지표 계산
kmeans_ch_score = calinski_harabasz_score(tfidf_matrix, kmeans_clusters)
kmeans_silhouette_score = silhouette_score(tfidf_matrix, kmeans_clusters)
hierarchical_ch_score = calinski_harabasz_score(tfidf_matrix, hierarchical_clusters)
hierarchical_silhouette_score = silhouette_score(tfidf_matrix, hierarchical_clusters)

print("K-means - Calinski-Harabasz Score:", kmeans_ch_score)
print("K-means - Silhouette Score:", kmeans_silhouette_score)
print("Hierarchical - Calinski-Harabasz Score:", hierarchical_ch_score)
print("Hierarchical - Silhouette Score:", hierarchical_silhouette_score)

결론

이렇게 성능을 비교한 결과, K-means 알고리즘과 Hierarchical 알고리즘이 각각 어떤 데이터셋에 대해 더 나은 성능을 보이는지 확인할 수 있습니다. 각 알고리즘의 특성을 고려하여 문서군집화를 수행하고, 해당 결과를 적합한 성능 지표로 평가함으로써, Gensim을 효과적으로 활용하여 문서군집화의 성능을 비교할 수 있습니다.

참고 자료