ML

문서 군집화

hyerimir 2022. 12. 1. 22:32

 

문서 군집화(Documnet Clustering)

: 비슷한 텍스트 구성의 문서를 군집화(clustering)하는 것

 

문서 군집화는 동일한 군집에 속하는 문서를 같은 카테고리 소속으로 분류할 수 있으며 텍스트 분류 기반 문서 분류와 유사

하지만 텍스트 분류 기반 문서 분류는 사전에 결정 카테고리 값을 가진 학습 데이터 세트가 필요한 데 반해, 문서 군집화는 학습 데이터 세트가 필요 없는 비지도학습 기반으로 동작

 

Opinion Review 데이터 세트를 이용한 문서 군집화 수행하기

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vect = TfidfVectorizer(tokenizer=LemNormalize, stop_words='enlgish', ngram_range=(1,2), min_df = 0.05, max_df = 0.85)4

feature_vect = tfidf_vect.fit_transform(documnet_df['opinion_text'])

 

군집화 기법은 K-평균 적용

from sklearn.cluster import KMeans

#5개 집합으로 군집화 수행. 예제를 위해 동일한 클러스터링 결과 도출용 random_state=0
km_cluster = KMeans(n_cluster=5, max_iter=1000, random_state=0)
km_cluster.fit(feature_vect)
cluster_label = km_cluster.labels_
cluster_centers = km_cluster.cluster_centers_

documnet_df['cluster_label'] = cluster_label
document_df.head()

 

document_df[documnet_df['cluster_label']==0].sort_values(by='filename')
document_df[documnet_df['cluster_label']==1].sort_values(by='filename')

 

 

군집별 핵심 단어 추출하기

KMeans 객체는 각 군집을 구성하는 단어 피처가 군집의 중심(Centroid)을 기준으로 얼마나 가깝게 위치해 있는지 clusters_center_ 라는 속성으로 제공

clusters_center_는 배열 값으로 제공되며, 행은 개별 군집을, 열은 개별 피처를 의미

각 배열 내의 값은 개별 군집 내에서 상대 위치를 숫자 값으로 표현한 일종의 좌표 값

 

cluster_centers = km_cluster.cluster_centers_
print(cluster_centers.shape)
print(cluster_centers)

cluster_centers_는 (3, 4611) 배열임을 확인할 수 있음

 

이는 군집이 3개, word 피처가 4611개로 구성되었음을 의미

각 행의 배열 값은 각 군집 내의 4611개 피처의 위치가 개별 중심과 얼마나 가까운가를 상대 값으로 나타낸 것

0에서 1까지의 값을 가질 수 있으며 1에 가까울수록 중심과 가까운 값을 의미

 

 

cluster_centers_ 속성 값을 이용해 각 군집별 핵심 단어 찾기

cluster_centers_ 배열 내에서 가장 값이 큰 데이터의 위치 인덱스를 추출한 뒤, 해당 인덱스를 이용해 핵심 단어 이름과 그 때의 상대 위치 값을 추출해 cluster_details라는 dict 객체 변수에 기록하고 반환하는 것이 get_cluster_details()함수의 주요 로직