Cosine Similarity
코사인 유사도가 AI에서 벡터 유사도를 측정하는 방법을 배우십시오. Ultralytics YOLO26로 시각적 임베딩을 계산하고 Ultralytics Platform으로 확장하십시오.
코사인 유사도는 machine learning (ML) 및 artificial intelligence (AI)에서 크기나 규모에 관계없이 두 multi-dimensional arrays 또는 벡터가 얼마나 유사한지 측정하는 데 사용되는 기본적인 수학적 지표입니다. vector space 내 두 점 사이의 각도를 계산하여 대략적으로 같은 방향을 가리키고 있는지 판별합니다. 이러한 각도 기반 접근 방식은 전체 길이보다 방향이 더 중요한 데이터를 처리하는 데 매우 중요하며, embeddings과 같은 추상적 데이터 표현을 비교하는 데 매우 효과적입니다.
지표의 수학적 원리 이해하기#
이 지표를 계산하려면 두 벡터의 dot product를 구한 뒤 각각의 magnitudes(길이)의 곱으로 나눕니다. 결과 점수는 항상 -1에서 1 사이의 고정된 범위 내에 속합니다:
- 점수가 1이면 벡터가 정확히 같은 방향을 가리키고 있음을 의미하며, 이는 최대 유사도를 나타냅니다.
- 점수가 0이라는 것은 벡터가 완전히 orthogonal하다는(90도 각도라는) 뜻이며, 방향성 유사성이 전혀 없음을 의미합니다.
- 점수가 -1이면 벡터가 정확히 반대 방향을 가리키고 있음을 의미합니다.
computer vision (CV)을 위해 설계된 많은 최신 딥러닝 프레임워크에서는 PyTorch's functional module이나 TensorFlow metrics와 같이 이 수학적 연산을 위한 최적화된 함수를 손쉽게 사용할 수 있습니다.
관련 개념 구별하기#
언제 코사인 유사도를 사용해야 하는지 이해하기 위해 자주 사용되는 다른 data analytics 측정값들과 구분해 두면 유용합니다:
- Cosine Distance: 밀접한 관련이 있지만, 이 두 개념은 반비례 관계에 있습니다. 코사인 거리는 단순히 코사인 유사도를 1에서 뺀 값으로 계산됩니다. 따라서 거리가 작을수록 벡터 간의 유사도가 더 높음을 나타냅니다.
- 유클리드 거리: 이 지표는 두 지점 사이의 직선 거리를 측정하며, 벡터의 전체 크기나 규모에 매우 민감합니다. 반면 코사인 유사도는 오직 각도에만 집중합니다. 예를 들어, 텍스트 분석에서 긴 문서와 짧은 문장은 유클리드 거리가 클 수 있지만, 주제가 같다면 코사인 유사도는 높게 유지됩니다.
AI의 실제 응용 사례#
코사인 유사도는 원시 데이터와 인간의 의도 사이의 간극을 메우며 수많은 현대 소프트웨어 제품의 핵심 엔진 역할을 합니다.
- Vector Search and RAG: 챗봇과 같은 Natural Language Processing (NLP) 응용 프로그램에서는 사용자 쿼리와 내부 문서가 고밀도 임베딩으로 변환됩니다. 시스템은 vector database에서 문맥상 가장 관련성이 높은 문서를 검색하기 위해 코사인 유사도를 신속하게 계산하며, 이는 검색증강생성(RAG)에서 매우 중요한 단계입니다.
- Recommendation Systems: 전자상거래 및 스트리밍 서비스는 Scikit-learn and SciPy와 같은 도구를 활용하여 사용자 선호도와 카탈로그 아이템을 벡터로 표현합니다. 쇼퍼의 프로필과 다양한 상품 간의 유사도 점수를 측정함으로써 시스템은 시각적으로나 테마별로 관련된 아이템을 정확하게 추천할 수 있습니다.
Ultralytics를 사용하여 시각적 유사도 측정하기#
최첨단 비전 모델을 사용하면 시각 데이터에서 고차원 피처 벡터를 직접 추출할 수 있습니다. 다음 Python 코드는 image classification을 위해 Ultralytics YOLO26 모델을 로드하고, 두 이미지의 임베딩을 생성한 후, 시각적 유사성을 측정하기 위해 코사인 유사도 계산을 수행하는 방법을 보여줍니다.
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}")이러한 semantic search 기능을 확장하려는 개발자에게는 고도로 정확한 베이스 모델을 학습시키는 것이 무엇보다 중요합니다. Ultralytics Platform은 data annotation, 확장 가능한 클라우드 학습, 원활한 model deployment를 위한 강력한 도구를 제공하여 파이프라인을 간소화하며, 기저 임베딩이 가능한 한 정확하고 의미 있도록 보장합니다.






