Gensim은 Python으로 작성된 자연어 처리 라이브러리로, 토픽 모델링, 문서 유사성 분석, 텍스트 어셈벨리 등의 작업에 주로 사용됩니다. 특히, Gensim을 사용하여 문서군집화를 수행할 때, 다양한 알고리즘과 파라미터를 적용하여 성능을 비교해볼 수 있습니다.
이번 포스트에서는 Gensim을 사용하여 문서군집화를 수행하는 과정에서 주로 사용되는 알고리즘과 그 성능을 비교해보고자 합니다.
목표
- K-means 알고리즘과 Hierarchical 알고리즘을 사용하여 문서군집화를 수행합니다.
- 성능 평가를 위해 각 알고리즘의 군집화 결과를 비교합니다.
데이터셋 준비
분석에 사용할 데이터셋은 캐글 등의 오픈 데이터셋이나 실제 엔터프라이즈 데이터 등을 활용할 수 있습니다. 이 예시에서는 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을 효과적으로 활용하여 문서군집화의 성능을 비교할 수 있습니다.