유사도 similarity
- 두 텍스트(단어, 문서 등)가 내용, 의미, 형태 등에서 얼마나 '비슷한가'를 정량적으로 나타내는 척도
- 비슷할 수록 커짐(보통 0 - 1이나 -1 - +1 범위로 사용)
- 중요성:
- 텍스트 데이터 간의 관계 및 패턴 파악의 핵심
- 정보 검색, 추천, 분류, 군집화 등 다양한 텍스트 분석 작업의 기반 기술
- 유사도의 종류:
- 어휘적/표면적 유사성 (lexical similarity): 사용된 단어 자체가 얼마나 겹치는지 측정.
- 예시: "오늘 날씨 좋다" vs "오늘 날씨 맑다" (단어 '오늘', '날씨' 공유)
- 의미적 유사성 (semantic similarity): 단어의 의미나 문맥, 내포된 뜻이 얼마나 유사한지 측정.
- 예시: "차량 속도가 높다" vs "자동차가 빠르게 달린다" (단어는 다르지만 의미는 매우 유사)
유사도 측정의 응용
- 정보 검색 (Information Retrieval): 사용자의 검색어와 가장 유사한 문서를 웹/DB에서 찾아 제시
- 문서 군집화 (Document Clustering): 유사한 주제나 내용을 가진 문서들을 자동으로 그룹핑
- 추천 시스템 (Recommendation Systems): 사용자가 선호한 항목과 유사한 다른 항목을 추천
- 표절 탐지 (Plagiarism Detection): 제출된 문서와 기존 문서 간의 유사도를 계산하여 표절 판단
- 기계 번역 (Machine Translation) 평가: 생성된 번역문과 정답 번역문 간의 유사도 측정
거리 distance
- 거리 d(x,y): 두 사례 x,y의 차이 표현
- 거리는 다음의 성질을 만족해야 함
- d(x,y)≥0: 두 사례가 같으면 0, 이외에는 항상 양수
- d(x,y)=d(y,x): x에서 y의 거리는 y에서 x의 거리와 같음
- d(x,z)+d(z,y)≥d(x,y) : x에서 z를 거쳐 y로 가는 것은 바로 가는 것보다 길거나 같음
- 위의 성질을 만족하는 한, 다양한 방식으로 거리를 정의할 수 있음
- 유사도는 흔히 거리와 역의 관계로 정의
- 유사도 ↑ (증가) = 거리 ↓ (감소)
- Similarity = 1 / (1 + Distance)
- Similarity = max(Possible Distance) - Distance
민코우스키 거리 Minkowski distance
d(x,y)=(i∑∣xi−yi∣p)1/p
- n차원 공간에서 두 점(벡터)의 거리를 측정하는 일반적인 방법
- 벡터의 길이 개념인 Lp-norm을 거리에 적용한 것
- 종류:
- 유클리드(Euclidean) 거리: p = 2인 경우. L2 거리(흔히 생각하는 '직선 거리')
- 맨하탄(Manhattan) 거리: p = 1인 경우. L1 거리(격자 위에서 이동 거리)
- 체비셰프(Chebychev) 거리: p →∞인 경우. L∞ 거리. maxi∣xi−yi∣
- p별 단위원(unit circle: 원점에서 거리가 1인 점들의 집합):
L1 및 L2 거리
- j번째 단어의 단어 벡터와 다른 모든 단어 벡터의 거리를 L2 방식으로 구함
from sklearn.metrics.pairwise import pairwise_distances
dist = pairwise_distances(word_vectors[j], word_vectors, metric='l2').flatten()
- L1 거리: l1 (엘 원) 또는 manhattan
- L2 거리: l2 (엘 투) 또는 euclidean
비슷한 단어 찾기
import numpy as np
rank = np.argsort(dist)
[words[i] for i in rank[:10]]
비슷한 문서 찾기
- i번째 문서의 벡터와 다른 모든 문서 벡터의 거리를 L2 방식으로 구함
i = 0
dist = pairwise_distances(dtm[i], dtm, metric='l2').flatten()
rank = np.argsort(dist)
df.iloc[rank[:10]]