← 뒤로

벡터 유사도 측정 기준: L2, 코사인 및 내적

쿼리 지점을 드래그하고 측정 단위를 전환하여 가장 가까운 이웃이 어떻게 변하는지 확인하십시오.

가장 가까운 이웃 5개(낮을수록 더 가깝다)

#1P1842.1
#2P1074.0
#3P17111.6
#4P14122.8
#5P13126.9
유사도 측정 기준
L2
표시 값
유클리드 거리

L2 (유클리드 거리)

두 점 사이의 직선 거리를 측정합니다. 동심원은 등거리 구역을 나타내며, 같은 원 위에 있는 모든 점은 쿼리로부터 똑같이 “멀리” 떨어져 있습니다.

메트릭이란 무엇인가?

메트릭은 두 벡터를 입력으로 받아, 이 둘이 얼마나 유사한지(또는 다른지)를 나타내는 단일 숫자를 반환하는 함수일 뿐입니다. 벡터 검색의 핵심은 “내 쿼리에 대해 메트릭 점수가 가장 높은 K개의 벡터를 찾아라”는 것입니다. 그 외의 모든 것 — 인덱스, 클러스터, 그래프 — 는 데이터베이스 내의 모든 벡터에 대해 이 점수를 계산하는 수고를 덜기 위한 관리 작업에 불과합니다.

선택한 측정 기준에 따라 데이터에서 “유사함”의 의미가 정의됩니다. 두 임베딩은 한 측정 기준에서는 “가깝게” 보일 수 있지만, 다른 측정 기준에서는 “멀게” 보일 수 있습니다. 동일한 데이터라도 답이 달라질 수 있는 것입니다. 그렇기 때문에 인덱스를 구축하기 전에 이 선택을 해야 합니다.

실전에서 자주 접하게 될 세 가지

  • L2 (유클리드): 직선 거리. 수치가 낮을수록 좋습니다. 방향과 크기가 모두 중요한 경우(이미지 임베딩, 지리적 좌표, 원시 센서 측정값 등)에 사용합니다. 대부분의 컴퓨터 비전(CV) 모델에서 기본값으로 사용됩니다.
  • 코사인(Cosine): 길이는 무시하고 벡터 간의 각도를 나타냅니다. 수치가 높을수록 좋습니다. 방향만 중요한 경우 — 텍스트 임베딩(BERT, OpenAI 등), 벡터의 “인기”가 지배적이어서는 안 되는 추천 시스템 — 에 사용하십시오.
  • 내적(IP): 점곱(dot product)으로, 정렬도와 크기를 모두 평가합니다. 수치가 높을수록 좋습니다. 코사인 내적( IP,DPR, 많은 검색 모델)을 명시적으로 정규화하는 모델과 함께 사용하십시오. 벡터의 길이가 1일 때 수학적으로 코사인과 동일합니다.

두 가지 실용적인 규칙

  • 메트릭을 모델에 맞춰야 합니다. 임베딩 모델은 특정 메트릭을 염두에 두고 훈련됩니다. 검색 시 다른 메트릭을 사용하면 리콜이 눈에 띄지 않게 저하됩니다. 선택하기 전에 모델 카드를 확인하십시오.
  • 일관성을 유지하십시오. 컬렉션 내의 모든 벡터는 동일한 측정 기준을 사용해야 합니다. 단일 인덱스 내에서 측정 기준을 혼합할 수 없으며, 서로 다른 측정 기준 간의 점수를 의미 있게 비교할 수도 없습니다.

다음과 같이 시도해 보세요: 쿼리 점을 원점 근처로 드래그한 다음, 코사인(Cosine)과 벡터 거리( L2) 사이를 전환해 보세요. 코사인이 쿼리가 가리키는 ‘방향’만을 고려한다는 점을 확인해 보세요. 원점의 반대편에 있는 점들은 벡터 거리( L2 ) 기준으로는 ‘가까운’ 위치일 수 있지만, 코사인 기준으로는 ‘먼’ 위치일 수 있습니다. 이 시각적 효과가 바로 이 개념의 전부입니다.

메트릭 유형 설정 Milvus

Milvus 에서는 metric_type 를 통해 인덱스별로 메트릭이 설정됩니다 — L2, IP, 또는 COSINE (밀집 벡터의 경우)를 사용하여 인덱스를 생성할 때 설정됩니다. 이후 해당 컬렉션에 대한 모든 검색은 방금 위에서 테스트해 본 것과 동일한 함수를 사용합니다. 가장 신뢰할 수 있는 규칙은 단 하나입니다. 임베딩 모델이 훈련될 때 사용된 메트릭을 사용하십시오. 이 메트릭은 거의 모든 모델 카드에 기재되어 있습니다.

두 가지 유용한 지름길. 대부분의 최신 텍스트 임베딩 API(OpenAI, Cohere, Voyage 및 대부분의 문장 변환기)는 코사인 유사도를 위해 설계된 벡터를 생성합니다. 또한 벡터가 단위 길이로 정규화되어 있다면, 코사인 유사도와 내적은 동일한 순위를 반환하므로 IP 정규화된 벡터를 사용하는 것은 COSINE의 대체 방법으로 널리 사용되며, 연산 비용도 약간 더 저렴합니다.

자주 묻는 질문

OpenAI 나 기타 텍스트 임베딩에 어떤 유사도 측정 기준을 사용해야 할까요?

코사인 유사도(metric_type COSINE, Milvus 참조)를 사용하십시오. OpenAI 의 text-embedding-3 계열을 포함하여 거의 모든 최신 텍스트 임베딩 모델은 코사인 유사도를 기준으로 훈련됩니다. OpenAI 임베딩은 단위 길이로 정규화되어 있으므로, 내적(IP)은 동일한 순위를 제공하며 훌륭한 대안이 됩니다.

코사인 유사도와 내적의 차이점은 무엇인가요?

코사인 유사도는 두 벡터 간의 각도만을 측정하며, 길이는 무시합니다. 내적(dot product)은 정렬과 크기를 모두 고려하므로, 같은 방향을 가리키는 더 긴 벡터일수록 점수가 더 높습니다. 단위 정규화된 벡터에 대해서는 이 두 가지가 수학적으로 동등합니다.

Milvus 에서 인덱스를 생성한 후 측정 단위 유형을 변경할 수 있습니까?

아니요. 메트릭은 인덱스 생성 시점에 인덱스에 내장됩니다. 메트릭을 변경하려면 인덱스를 삭제하고 새로운 metric_type으로 다시 생성해야 합니다. 서로 다른 메트릭의 점수는 서로 비교할 수 없으므로, 결과 후처리 시 이를 혼합하지 마십시오.

측정 기준의 선택이 리콜이나 검색 속도에 영향을 미치나요?

속도는 본질적으로 동일합니다. 즉, L2, IP 및 cosine은 모두 벡터를 한 번 스캔하는 데 걸리는 비용이 동일합니다. 중요한 점은 리콜입니다. 임베딩 모델이 훈련된 것과 다른 메트릭으로 검색하면 결과 품질이 눈에 띄지 않게 저하되며, 종종 극적으로 나빠집니다.

더 자세히 알아보기: 이진 벡터용 해밍(Hamming) 및 자카드(Jaccard), 전체 텍스트 검색용 BM25를 포함하여 Milvus 가 지원하는 메트릭의 전체 목록은 Similarity Metrics 문서를 참조하십시오.

계속 탐색해 보세요