Cosine Similarity
코사인 유사도가 AI에서 벡터 유사도를 측정하는 방법을 배우십시오. Ultralytics YOLO26로 시각적 임베딩을 계산하고 Ultralytics Platform으로 확장하십시오.
코사인 유사도는 머신러닝(ML) 및 인공지능(AI)에서 두 다차원 배열 또는 벡터의 크기나 규모와 관계없이 이들이 얼마나 유사한지를 측정하기 위해 사용하는 기본적인 수학적 지표입니다. 벡터 공간 내 두 지점 사이의 각도를 계산함으로써 두 벡터가 대략 같은 방향을 가리키는지 확인합니다. 이러한 각도 기반 접근 방식은 전체 길이보다 방향이 더 중요한 데이터를 처리할 때 매우 중요하며, 임베딩과 같은 추상적인 데이터 표현을 비교하는 데 매우 효과적입니다.
Link to this section지표의 수학적 원리 이해하기#
이 지표를 계산하려면 두 벡터의 내적을 구한 다음, 각 벡터의 크기(길이)의 곱으로 나눕니다. 결과 점수는 항상 -1에서 1 사이의 고정된 범위 내에 위치합니다.
- 점수가 1이면 벡터가 정확히 같은 방향을 가리키고 있음을 의미하며, 이는 최대 유사도를 나타냅니다.
- 점수가 0이면 벡터가 완전히 직교(90도 각도)함을 의미하며, 이는 방향적 유사성이 없음을 뜻합니다.
- 점수가 -1이면 벡터가 정확히 반대 방향을 가리키고 있음을 의미합니다.
컴퓨터 비전(CV)를 위해 설계된 많은 현대 딥러닝 프레임워크에서는 PyTorch의 functional 모듈이나 TensorFlow 메트릭과 같이 이 수학적 연산을 위한 최적화된 함수를 쉽게 사용할 수 있습니다.
Link to this section관련 개념 구별하기#
코사인 유사도를 언제 사용해야 하는지 이해하기 위해 자주 사용되는 다른 데이터 분석 측정값과 구별하는 것이 도움이 됩니다.
- 코사인 거리: 밀접한 관련이 있지만 이 두 용어는 반비례 관계입니다. 코사인 거리는 단순히 1에서 코사인 유사도를 뺀 값으로 계산됩니다. 따라서 거리가 작을수록 벡터 간의 유사도가 높음을 의미합니다.
- 유클리드 거리: 이 지표는 두 지점 사이의 직선 거리를 측정하며, 벡터의 전체 크기나 규모에 매우 민감합니다. 반면 코사인 유사도는 오직 각도에만 집중합니다. 예를 들어, 텍스트 분석에서 긴 문서와 짧은 문장은 유클리드 거리가 클 수 있지만, 주제가 같다면 코사인 유사도는 높게 유지됩니다.
Link to this sectionAI의 실제 응용 사례#
코사인 유사도는 원시 데이터와 인간의 의도 사이의 간극을 메우며 수많은 현대 소프트웨어 제품의 핵심 엔진 역할을 합니다.
- 벡터 검색 및 RAG: 챗봇과 같은 자연어 처리(NLP) 애플리케이션에서 사용자 쿼리와 내부 문서는 밀집 임베딩으로 변환됩니다. 시스템은 코사인 유사도를 신속하게 계산하여 벡터 데이터베이스에서 맥락상 가장 관련성 높은 문서를 검색하는데, 이는 검색 증강 생성(RAG)의 핵심 단계입니다.
- 추천 시스템: 전자상거래 및 스트리밍 서비스는 Scikit-learn 및 SciPy와 같은 도구를 사용하여 사용자 선호도와 카탈로그 항목을 벡터로 표현합니다. 시스템은 쇼핑객의 프로필과 다양한 상품 간의 유사도 점수를 측정하여 시각적으로나 테마적으로 관련된 상품을 정확하게 추천할 수 있습니다.
Link to this sectionUltralytics를 사용하여 시각적 유사도 측정하기#
You can extract high-dimensional feature vectors directly from visual data using state-of-the-art vision models. The following Python code demonstrates how to load an Ultralytics YOLO26 model for image classification, generate embeddings for two images, and perform a cosine similarity calculation to measure their visual resemblance.
import torch
import torch.nn.functional as F
from ultralytics import YOLO
# Load a pre-trained YOLO26 classification model
model = YOLO("yolo26n-cls.pt")
# Generate embedding vectors for two separate images
results = model.embed(["bus.jpg", "car.jpg"])
# Calculate the cosine similarity between the two visual embeddings
similarity = F.cosine_similarity(torch.tensor(results[0]), torch.tensor(results[1]), dim=0)
print(f"Visual Similarity Score: {similarity.item():.4f}")이러한 시맨틱 검색 기능을 확장하려는 개발자에게는 매우 정확한 베이스 모델을 학습시키는 것이 무엇보다 중요합니다. Ultralytics Platform은 데이터 라벨링, 확장 가능한 클라우드 학습, 원활한 모델 배포를 위한 강력한 도구를 제공하여 파이프라인을 간소화하고, 기본 임베딩이 최대한 정확하고 의미 있게 유지되도록 보장합니다.






