벡터 유사도 측정법 비교: 코사인부터 레벤슈타인까지
코사인 유사도·유클리드 거리·자카드 유사도·피어슨 상관계수·레벤슈타인 거리를 수식과 예시로 비교하고, 데이터 특성별 선택 기준과 최신 동향을 정리한다.
2026-08-14 · 최초 발행 2025-05-23
두 데이터가 "비슷하다"는 판단은 생각보다 여러 갈래로 나뉜다. 벡터 유사도는 다차원 공간에서 객체 간 유사성을 정량적으로 측정하는 기술로, 검색 엔진, 추천 시스템, 자연어 처리 등 다양한 분야에서 핵심 기술로 활용된다. 데이터를 벡터로 표현하고 이들 간의 유사성을 수치화함으로써 기계가 '비슷함'을 이해할 수 있게 한다.
방향으로 재는 코사인 유사도
코사인 유사도는 벡터 간 각도의 코사인값을 이용하여 유사도를 측정하는 방법이다.
- 벡터의 크기보다 방향에 초점을 맞춘다
- 두 벡터가 가리키는 방향의 유사성을 측정한다
- 값의 범위: -1(완전 반대) ~ 1(완전 일치)
- 문서 유사도, 텍스트 분석에서 주로 사용된다
코사인 유사도는 다음과 같이 계산된다.
cos(θ) = (A·B)/(||A||·||B||)
여기서 A·B는 벡터 A와 B의 내적(dot product), ||A||와 ||B||는 각 벡터의 크기(magnitude)다.
텍스트 문서 A와 B가 있을 때, 각 단어의 출현 빈도를 벡터로 표현하면 다음과 같다.
- 문서 A: [2, 3, 1, 0, 2]
- 문서 B: [1, 2, 1, 1, 1]
코사인 유사도 = (2×1 + 3×2 + 1×1 + 0×1 + 2×1) / (√(2² + 3² + 1² + 0² + 2²) × √(1² + 2² + 1² + 1² + 1²)) = 11 / (√18 × √8) ≈ 0.917
이 결과는 두 문서가 상당히 유사함을 나타낸다.
절대 위치로 재는 유클리드 거리
유클리드 거리는 다차원 공간에서 두 점 사이의 직선 거리를 측정한다.
- 직관적인 거리 개념을 그대로 적용한다
- 벡터의 방향보다 절대적 위치에 중점을 둔다
- 거리가 작을수록 유사도가 높다
- 값 범위: 0(동일) ~ ∞
d(p,q) = √Σ(qi - pi)²
2차원에서는 피타고라스 정리와 동일하다.
d(p,q)² = (q₁-p₁)² + (q₂-p₂)²
두 데이터 포인트 p = [1, 2, 3], q = [4, 5, 6]가 있을 때, 유클리드 거리 = √((4-1)² + (5-2)² + (6-3)²) = √(9 + 9 + 9) = √27 ≈ 5.196이다.
집합의 교집합으로 재는 자카드 유사도
자카드 유사도는 집합 간의 유사성을 측정하는 방법으로, 집합의 합집합 대비 교집합의 비율로 계산된다.
- 이진 데이터나 범주형 데이터에 적합하다
- 집합의 크기가 아닌 요소의 공통성에 초점을 맞춘다
- 값 범위: 0(공통 요소 없음) ~ 1(완전 일치)
- 텍스트 분석, 유전체 비교 등에 활용된다
J(A,B) = |A∩B|/|A∪B| = |A∩B|/(|A|+|B|-|A∩B|)
두 집합 A = {사과, 바나나, 오렌지, 배}, B = {바나나, 오렌지, 키위, 망고}가 있을 때, 자카드 유사도 = |{바나나, 오렌지}| / |{사과, 바나나, 오렌지, 배, 키위, 망고}| = 2/6 = 0.333이다.
선형 관계로 재는 피어슨 상관계수
피어슨 상관계수는 두 변수 간의 선형 관계의 강도와 방향을 측정한다.
- 선형 관계에 특화되어 있다
- 값의 스케일에 영향을 받지 않는다
- 값 범위: -1(완전 음의 상관관계) ~ 1(완전 양의 상관관계)
- 추천 시스템, 데이터 분석에 활용된다
r = Σ[(X-μX)(Y-μY)] / (σX·σY)
여기서 μX, μY는 각 변수의 평균, σX, σY는 각 변수의 표준편차다.
사용자 A의 영화 평점이 [5, 4, 3, 2, 1], 사용자 B의 평점이 [4, 5, 3, 2, 2]일 때, 두 사용자의 영화 평점 선호도는 양의 상관관계를 보인다.
편집 횟수로 재는 레벤슈타인 거리
레벤슈타인 거리는 두 문자열을 동일하게 만들기 위한 최소 편집 횟수를 측정한다.
- 문자열 간 유사도 측정에 사용된다
- 삽입, 삭제, 대체 연산을 고려한다
- 값이 작을수록 문자열 간 유사도가 높다
- 오타 수정, 생물정보학에 활용된다
동적 프로그래밍 알고리즘으로 계산한다.
lev(a,b) = min(lev(a[:-1],b)+1, lev(a,b[:-1])+1, lev(a[:-1],b[:-1])+(a[-1]!=b[-1]))
문자열 A "kitten"과 문자열 B "sitting" 사이의 레벤슈타인 거리는 3이다(k→s, e→i, 마지막에 g 추가).
오타 정정으로 보는 기법별 차이
사용자가 "YUCOPIZZA"를 검색할 때, 실제 데이터베이스에는 "YUCOPIZZA", "YUCOPPIZA", "YOUCOPIZA" 등의 항목이 있다고 가정하면, 같은 오타를 두고도 측정법마다 접근이 갈린다.
- 유클리드 거리: 문자열을 벡터로 변환해 거리를 계산한다. "YUCOPIZZA"와 "YUCOPPIZA" 간 거리는 상대적으로 작아(유사) 나온다
- 코사인 유사도: 문자 빈도 벡터 간 방향 유사성을 비교한다. 대부분의 문자가 동일하므로 높은 유사도가 예상된다
- 피어슨 상관계수: 문자 출현 패턴의 상관관계를 분석한다. 문자 패턴이 유사하므로 높은 양의 상관관계가 예상된다
- 자카드 유사도: 공통 문자 비율을 계산한다. 공통 문자가 많아 높은 유사도가 예상된다
- 레벤슈타인 거리: 편집 거리를 계산한다. "YUCOPIZZA"와 "YUCOPPIZA" 간 거리는 2(P 추가, Z 삭제)로, 이 경우 가장 직관적인 오타 감지가 가능하다
어디에 어떤 유사도를 쓰는가
- 검색 엔진: 검색어와 문서 간 유사도로 관련성 순위를 결정하며, 코사인 유사도가 주로 사용된다
- 추천 시스템: 사용자-아이템 유사도를 기반으로 추천하며, 피어슨 상관계수와 코사인 유사도를 활용한다
- 자연어 처리: 단어·문서 임베딩 간 유사도를 계산하며, 코사인 유사도가 대표적이다
- 이미지 검색: 이미지 특징 벡터 간 유사도를 계산하며, 유클리드 거리와 코사인 유사도를 활용한다
- 생물정보학: DNA 서열 비교에는 레벤슈타인 거리를, 단백질 구조 비교에는 유클리드 거리를 쓴다
구현할 때 부딪히는 문제들
고차원에서는 모든 점들이 거의 같은 거리를 가지는 차원의 저주가 발생하는데, 코사인 유사도가 이런 문제에서 상대적으로 안정적이다. 대규모 데이터에서 모든 쌍의 유사도를 계산하면 O(n²) 복잡도가 나오므로 LSH·ANN 같은 근사 계산 알고리즘을 고려해야 한다.
데이터 특성에 따라 선택도 달라진다. 텍스트에는 코사인 유사도·자카드 유사도를, 수치 데이터에는 유클리드 거리·피어슨 상관계수를, 범주형 데이터에는 자카드 유사도를 주로 쓴다. 정규화·스케일링도 유사도 계산에 큰 영향을 미치는데, 유클리드 거리는 스케일에 민감한 반면 코사인 유사도는 덜 민감하다.
임베딩과 메트릭 러닝으로 향하는 흐름
워드 임베딩, 문서 임베딩 등 표현 학습 이후 유사도를 계산하는 방식이 늘고 있으며, BERT·GPT 등의 모델에서는 코사인 유사도가 널리 쓰인다. 메트릭 러닝(Metric Learning)은 유사도 함수 자체를 데이터로부터 학습해 복잡한 패턴을 포착하는 맞춤형 유사도 측정을 가능하게 한다. 노드 간 연결 패턴을 기반으로 한 그래프 기반 유사도는 소셜 네트워크 분석, 추천 시스템에 활용된다.