코사인 유사도(Cosine Similarity) 완벽 이해하기
코사인 유사도(Cosine Similarity) 완벽 이해하기
벡터 기반 데이터 분석이나 자연어 처리(NLP)를 공부하다 보면 가장 먼저 마주치는 개념 중 하나가 바로 **코사인 유사도(Cosine Similarity)**입니다. 검색 시스템, 추천 시스템, 문서 분류, 임베딩 기반 RAG 등 다양한 분야에서 널리 사용되는 핵심 기술이죠.
이번 글에서는 코사인 유사도가 무엇이며, 왜 중요한지, 어떻게 계산되는지, 실제로 어디에 활용되는지까지 블로그 형식으로 쉽게 정리해 보겠습니다.
📌 코사인 유사도란 무엇인가?
코사인 유사도(Cosine Similarity)는 두 벡터의 방향이 얼마나 비슷한지를 측정하는 지표입니다.
핵심은 “거리”가 아니라 방향이라는 점입니다.
따라서 다음과 같은 상황에서 특히 유용합니다.
벡터의 **크기(Length)**가 중요한 게 아니라,
두 벡터가 같은 방향을 가리키는지가 더 중요한 경우
예를 들어, 두 문서가 길이가 얼마나 다르든 상관없이, 사용된 단어들이 비슷한 비율로 포함되어 있다면 높은 유사도를 갖게 됩니다.
📐 코사인 유사도 공식
코사인 유사도는 두 벡터 A, B 사이의 각도(angle)의 코사인 값을 계산합니다.
cosine_similarity(A,B)=A⋅B / ‖A‖‖B‖
각 항목을 해석해보면:
A ⋅ B (내적)
두 벡터의 방향이 얼마나 같은지를 나타내는 값
‖A‖, ‖B‖ (벡터의 크기)
벡터의 길이
즉, 두 벡터가 완전히 같은 방향이면 → 코사인 값은 1
서로 완전히 반대 방향이면 → -1
직각이면 → 0
값의 범위는 -1 ~ 1입니다.
하지만 일반적인 NLP 임베딩에서는 음수 방향이 의미가 크지 않기 때문에 0 ~ 1 사이에서 해석되는 경우가 많습니다.
🧠 왜 거리(Euclidean Distance) 대신 방향을 쓸까?
문서나 문장 임베딩과 같은 고차원 벡터에서는 크기(norm) 자체가 큰 의미를 갖지 않는 경우가 많습니다.
예를 들어:
문서가 길면 벡터 원소가 자연스럽게 커지고
짧은 문서는 벡터 크기도 작아지는 경향
이런 상황에서 유클리드 거리(Euclidean Distance)를 사용하면
문서 길이가 긴 것만으로도 ‘멀다’고 계산되어 버립니다.
하지만 코사인 유사도는 두 벡터를 모두 정규화한 뒤 “방향”만 비교하므로,
문서 길이에 잘 영향을 받지 않고 의미적 유사성을 비교하는 데 매우 적합합니다.
즉, 코사인 유사도는
✔ 문서의 길이와 상관없이
✔ 의미적으로 얼마나 비슷한지
를 판단할 수 있는 훌륭한 지표입니다.
No comments yet. Be the first to comment!