코사인 유사도(Cosine Similarity)란? 쉽게 배우는 개념과 예제

Bean·2025년 5월 18일
0

인공지능

목록 보기
33/123

1. 코사인 유사도란?

코사인 유사도(Cosine Similarity)는 두 벡터의 방향 유사도를 측정하는 방법입니다.

  • 값의 범위: -1 ~ 1

    • 1: 두 벡터가 완전히 같은 방향
    • 0: 서로 직각 (관련 없음)
    • -1: 완전히 반대 방향

2. 수식으로 이해하기

cosine_similarity(A,B)=ABAB\text{cosine\_similarity}(A, B) = \frac{A \cdot B}{\|A\| \cdot \|B\|}
  • ABA \cdot B: 두 벡터의 내적 (dot product)
  • A|A|, B|B|: 각각 A, B의 크기 (L2 노름)
  • 벡터의 방향만 비교하므로, 크기(스케일)의 영향은 제거됩니다.

3. 파이썬 예제

3.1. 방향이 같은 경우

import numpy as np

A = np.array([1, 2])
B = np.array([2, 4])

cos_sim = np.dot(A, B) / (np.linalg.norm(A) * np.linalg.norm(B))
print("Cosine Similarity:", cos_sim)  # 1.0
  • 벡터 B는 A의 2배 → 방향 동일 → 유사도 = 1.0

3.2. 방향이 직각인 경우

A = np.array([1, 0])
B = np.array([0, 1])

cos_sim = np.dot(A, B) / (np.linalg.norm(A) * np.linalg.norm(B))
print("Cosine Similarity:", cos_sim)  # 0.0
  • 두 벡터는 서로 직각연관 없음유사도 = 0.0

4. PyTorch로 코사인 유사도 계산

import torch
import torch.nn.functional as F

a = torch.tensor([[1.0, 2.0]])
b = torch.tensor([[2.0, 4.0]])

cos_sim = F.cosine_similarity(a, b)
print(cos_sim.item())  # 1.0
  • torch.nn.functional.cosine_similarity() 함수 사용
  • 벡터 간 유사도 계산을 쉽게 수행 가능

5. 코사인 유사도 활용 사례

분야사용 목적
얼굴 인식얼굴 임베딩 벡터 간 유사도 측정
자연어 처리문장 간 의미 유사도 계산 (예: BERT 임베딩 비교)
추천 시스템사용자와 아이템 벡터 간 유사도 기반 추천
클러스터링/군집 분석유사한 방향을 가진 벡터끼리 그룹화

6. 더 알아보기

  • 코사인 유사도는 거리(metric)가 아닌 유사도(similarity)입니다.

  • L2 거리(Euclidean distance)와 비교하면, 벡터의 크기에 민감한지 여부가 중요한 차이입니다.

    • 같은 방향이라도 크기가 다르면 L2 거리는 커지지만, 코사인 유사도는 1로 유지됩니다.

profile
AI developer

0개의 댓글