
임베딩(Embedding)과 클러스터링(Clustering) 쉽게 이해하기
핵심 요약: 임베딩은 데이터를 기계가 이해할 수 있는 수치 벡터로 변환하는 기법이며, 클러스터링은 이러한 벡터를 유사도 기준으로 그룹으로 묶어 패턴을 발견하는 비지도 학습 방법입니다.
1. 임베딩(Embedding)
1.1 정의
임베딩은 텍스트·이미지·오디오 등 다양한 데이터를 고차원 벡터 공간으로 매핑하여, 유사한 데이터일수록 벡터 간 거리가 가깝도록 표현하는 기법입니다.
1.2 왜 사용하는가?
- 의미적 유사도 반영: “강아지”와 “고양이”는 서로 비슷하므로 벡터 공간에서도 가깝게 위치
- 연산 효율성: 희소한 원-핫 벡터 대신 밀집된 수백 차원 실수 벡터 사용
- 범용성: 학습된 임베딩을 분류·검색·추천 등 다양한 태스크에 재사용
1.3 작동 원리
- 임베딩 레이어: 신경망 내부의 가중치 행렬이 데이터 인덱스를 벡터로 변환
- 학습 목표: 주변 맥락 예측이나 문맥적 관계를 통해 벡터를 조정
- 유사도 측정: 코사인 유사도, 유클리드 거리 등을 이용
2. 클러스터링(Clustering)
2.1 정의
클러스터링은 레이블 없이 데이터 포인트를 유사도 기준으로 여러 개의 군집(cluster)으로 자동 분류하는 비지도 학습 기법입니다.
2.2 왜 사용하는가?
- 패턴 발견: 데이터의 자연스러운 그룹 구조 파악
- 데이터 요약: 대규모 데이터를 대표 군집 중심(centroid)으로 단순화
- 이상치 탐지: 군집과 멀리 떨어진 포인트를 이상치(outlier)로 식별
2.3 주요 알고리즘
- K-평균(K-Means): 미리 정한 K개의 중심점을 기준으로 반복적으로 군집 재조정
- 계층적 클러스터링(Hierarchical): 트리 구조 형태로 군집을 병합하거나 분할
- DBSCAN: 밀도 기반으로 군집 정의, 이상치 자동 분리
3. 임베딩과 클러스터링의 결합
- 데이터 준비:
- 원시 텍스트 → 토큰화 → 임베딩 모델 적용 → 벡터 획득
- 차원 축소(Optional):
- PCA·t-SNE로 2~3차원으로 축소해 시각화
- 클러스터링 적용:
- K-Means 등으로 벡터를 군집화
- 결과 활용:
- 고객 리뷰 군집 분석, 문서 토픽 분류, 이미지 유사도 그룹핑 등
4. 예시 워크플로우
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
from sentence_transformers import SentenceTransformer
# 1) 임베딩 생성
model = SentenceTransformer('all-MiniLM-L6-v2')
texts = ["강아지가 귀엽다", "고양이가 귀엽다", "비가 온다", "날씨가 흐리다"]
embeddings = model.encode(texts)
# 2) 클러스터링
kmeans = KMeans(n_clusters=2, random_state=0).fit(embeddings)
labels = kmeans.labels_ # [0, 0, 1, 1]
# 3) 차원 축소 및 시각화 (2D)
pca = PCA(n_components=2).fit_transform(embeddings)
# pca 결과를 산점도로 그리면 0번 군집(동물 문장)과 1번 군집(날씨 문장)로 구분
임베딩을 통해 얻은 벡터로 데이터 간 의미적 유사도를 수치화한 뒤, 클러스터링으로 유사한 데이터끼리 그룹화하면 데이터 구조 파악과 응용 과제가 모두 용이해집니다.