벡터 유사도 측정 및 점수

L1 & L2 거리, 코사인 유사도, 도트 곱 유사도, 최대 내적 곱 유사도 등 Elasticsearch의 벡터 유사도 측정값과 점수를 살펴보세요.

벡터 검색부터 강력한 REST API에 이르기까지 Elasticsearch는 개발자에게 가장 광범위한 검색 툴킷을 제공합니다. Elasticsearch Labs 리포지토리의 샘플 노트북을 살펴보고 새로운 기능을 직접 체험해 보세요. 무료 체험을 시작하거나 지금 바로 Elasticsearch를 로컬에서 실행해 보세요.

자유 텍스트 검색이 필요하지만 Ctrl+F/Cmd+F로는 더 이상 검색이 되지 않을 때, 일반적으로 어휘 검색 엔진을 사용하는 것이 논리적으로 가장 좋은 선택입니다. 어휘 검색 엔진은 검색할 텍스트를 분석하고 검색 시 일치하는 용어로 토큰화하는 데는 탁월하지만, 색인 및 검색되는 텍스트의 진정한 의미를 이해하고 파악하는 데는 일반적으로 부족합니다.

바로 이 부분에서 벡터 검색 엔진이 빛을 발합니다. 동일한 텍스트를 색인화하여 그 텍스트가 나타내는 의미와 유사하거나 연관된 의미를 가진 다른 개념과의 관계를 기반으로 검색할 수 있습니다.

이 블로그에서는 벡터가 텍스트의 의미를 전달하는 데 얼마나 훌륭한 수학적 개념인지에 대해 간략하게 살펴보겠습니다. 그런 다음 이웃 벡터 검색, 즉 유사한 의미를 갖는 벡터를 검색할 때 Elasticsearch에서 지원하는 다양한 유사도 기술과 점수를 매기는 방법에 대해 자세히 알아보겠습니다.

벡터 임베딩이란 무엇인가요?

이 글에서는 벡터 임베딩의 복잡성에 대해 자세히 다루지 않습니다. 이 주제를 더 자세히 살펴보고 싶거나 계속하기 전에 입문서가 필요한 경우 다음 가이드를 확인하는 것이 좋습니다.

간단히 말해, 벡터 임베딩은 머신 러닝 프로세스를 통해 얻어집니다(예 딥러닝 신경망)을 사용하여 모든 종류의 비정형 입력 데이터(예: 원시 텍스트, 이미지, 동영상, 사운드 등)를 그 의미와 관계를 전달하는 수치 데이터로 변환합니다. "비정형 데이터의 종류에 따라 각 유형의 데이터를" 이해하도록 학습된 다양한 종류의 머신 러닝 모델이 필요합니다.

각 벡터는 다차원 공간에서 특정 데이터의 위치를 점으로 표시하며, 해당 위치는 모델이 데이터를 특성화하는 데 사용하는 특징 집합을 나타냅니다. 차원 수는 머신 러닝 모델에 따라 다르지만 일반적으로 수백 개에서 수천 개까지 다양합니다. 예를 들어 OpenAI 임베딩 모델은 1536개의 치수를 자랑하는 반면, Cohere 임베딩 모델은 382개에서 4096개의 치수를 지원합니다. 최신 릴리즈부터 Elasticsearch dense_vector 필드 유형은 최대 4096개의 차원을 지원합니다.

벡터 임베딩의 진정한 장점은 비슷한 의미를 공유하는 데이터 포인트가 공간에서 서로 가깝게 배치된다는 것입니다. 또 다른 흥미로운 측면은 벡터 임베딩이 데이터 요소 간의 관계를 포착하는 데 도움이 된다는 점입니다.

벡터는 어떻게 비교하나요?

비정형 데이터가 머신러닝 모델에 의해 여러 차원에 걸쳐 데이터의 유사성을 포착하는 벡터 임베딩으로 잘게 쪼개진다는 것을 알았으니, 이제 이러한 벡터의 매칭이 어떻게 작동하는지 이해해야 합니다. 그 답은 매우 간단합니다.

서로 가까운 벡터 임베딩은 의미적으로 유사한 데이터 조각을 나타냅니다. 따라서 벡터 데이터베이스를 쿼리할 때 먼저 모든 비정형 데이터 색인에 사용된 것과 동일한 머신 러닝 모델을 사용하여 검색 입력(이미지, 텍스트 등)을 벡터 임베딩으로 변환하고, 최종 목표는 해당 쿼리 벡터에 가장 가까운 이웃 벡터를 찾는 것입니다. 따라서 쿼리 벡터와 데이터베이스에 색인된 모든 기존 벡터 사이의 "거리" 또는 "유사성" 을 측정하는 방법만 알아내면 됩니다.

거리, 유사도 및 점수

다행히도 두 벡터 사이의 거리 또는 유사성을 측정하는 것은 벡터 산술 덕분에 쉽게 해결할 수 있는 문제입니다. 이제 Elasticsearch에서 지원하는 가장 인기 있는 거리 및 유사도 함수에 대해 살펴보겠습니다. 경고, 수학이 앞서갑니다!

자세히 알아보기 전에 득점에 대해 간단히 살펴보겠습니다. 실제로 Lucene은 양수 점수만 허용합니다. 곧 소개할 모든 거리 및 유사도 함수는 두 벡터가 얼마나 가깝거나 유사한지를 측정할 수 있지만, 이러한 원시 수치는 음수가 될 수 있으므로 점수로 사용하기에는 적합하지 않습니다. 따라서 최종 점수는 거리 또는 유사도 값에서 양수가 되고 점수가 클수록 더 높은 순위(즉, 더 가까운 벡터)에 해당하는 방식으로 도출되어야 합니다.

L1 거리

맨해튼 거리라고도 하는 두 벡터 A\vec{A}B\vec{B} 의 L1 거리는 모든 요소의 쌍별 절대 차이를 합산하여 측정합니다. L1델타_{L1}, 거리가 작을수록 두 벡터는 더 가까워집니다. L1 거리 공식(1)은 아래에서 볼 수 있듯이 매우 간단합니다:

δL1(A,B)=1inAiBi(1)\tag{1} \delta_{L1}(\vec{A}, \vec{B}) = \sum_{\mathclap{1\le i\le n}} \vert A_i-B_i \vert

시각적으로 L1 거리는 아래 이미지(빨간색)와 같이 표시할 수 있습니다:

다음 두 벡터 A=(12)\vec{A} = \binom{1}{2}및 B=(20.5)L1거리를계산하면\vec{B} = \binom{2}{0.5}의 L1 거리를 계산하면 12+20.5=2.5\vert 1-2 \vert + \vert 2-0.5 \vert = 2.5가산출됩니다.

중요: L1 거리 함수는 script_score DSL 쿼리를 사용한 정확한 벡터 검색 (일명 무차별 검색)에만 지원되며 knn 검색 knn 옵션 또는 DSL 쿼리를 사용한 대략적인 kNN 검색에는 지원되지 않는다는 점에 유의할 필요가 있습니다.

L2 거리

유클리드 거리라고도 하는 두 벡터 A\vec{A}B\vec{B} 의 L2 거리는 먼저 모든 요소의 쌍별 차이의 제곱을 합한 다음 그 결과의 제곱근을 구하여 측정합니다. 기본적으로 두 지점 사이의 최단 경로입니다. L1과 마찬가지로 δL2\delta_{L2}, 의 거리가 작을수록 두 벡터는 더 가까워집니다:

δL2(A,B)=1in(AiBi)2(2)\tag{2} \delta_{L2}(\vec{A},\vec{B}) = \sqrt{\sum_{\mathclap{1\le i\le n}} ( A_i-B_i )^2 }

아래 이미지에서 L2 거리는 빨간색으로 표시되어 있습니다:

L1델타_{L1} 거리에 사용한 것과 동일한 두 개의 샘플 벡터 A\vec{A}B\vec{B} 을 재사용하면 이제 δL2\delta_{L2} 거리를 (12)2+(20.5)2=3.251.803으로계산할\sqrt{(1-2)^2 + (2-0.5)^2} = \sqrt{3.25} \approxeq 1.803으로 계산할 수 있습니다.

점수는 두 벡터 사이의 거리가 작을수록 더 가까울수록(즉, 더 유사할수록) 점수가 높습니다. 따라서 점수를 도출하려면 거리 측정값을 반전시켜 가장 작은 거리가 가장 높은 점수를 얻도록 해야 합니다. L2 거리를 사용할 때 점수가 계산되는 방식은 아래 공식 (3)과 같습니다:

_scoreL2(A,B)=11+δL2(A,B)2(3)\tag{3} \_score_{L2}(\vec{A},\vec{B}) = \frac{1}{1 + \delta_{L2}(\vec{A}, \vec{B})^2}

이전 예제의 샘플 벡터를 다시 사용하면, 그 점수는 14.250.2352\frac{1}{4.25} \approxeq 0.2352가 됩니다. 서로 매우 가까운 두 벡터의 점수는 1에 가까워지고, 서로 매우 먼 두 벡터의 점수는 0에 가까워지는 경향이 있습니다.

L1과 L2 거리 함수에 대해 마무리하면서, 이를 비교하기 위한 좋은 비유는 뉴욕 맨해튼에 있는 두 개의 건물 A와 B를 생각하면 됩니다. A에서 B로 가는 택시는 L1 경로(거리와 도로)를 따라 주행해야 하지만, 새는 L2 경로(직선)를 이용할 수 있습니다.

코사인 유사도

L1 및 L2와 달리 코사인 유사도는 두 벡터 A\vec{A}B\vec{B} 사이의 거리를 측정하는 것이 아니라 상대 각도, 즉 둘이 거의 같은 방향을 가리키고 있는지 여부를 측정합니다. 유사도 scoss_{cos} 가 높을수록 두 벡터 사이의 각도 \알파가\알파가 작아지므로 "가까울수록" 더 가깝고 "비슷할수록" 전달되는 의미가 더 커집니다.

이를 설명하기 위해 야생에서 서로 다른 방향을 바라보고 있는 두 사람을 생각해 보겠습니다. 아래 그림에서 파란색의 사람은 벡터 A\vec{A} 로 표시된 방향을, 빨간색의 사람은 벡터 B\vec{B} 의 방향을 바라보고 있습니다. 시선이 같은 방향을 향할수록(즉, 벡터가 가까워질수록) 파란색과 빨간색 영역으로 상징되는 시야가 더 많이 겹칩니다. 시야가 얼마나 겹치는지를 코사인 유사도라고 합니다. 그러나 사람 B는 사람 A보다 더 멀리 보입니다(즉, 벡터 B\vec{B} 이 더 깁니다). 사람 B는 수평선 너머 멀리 있는 산을 바라보고 있을 수 있고, 사람 A는 가까운 나무를 바라보고 있을 수 있습니다. 코사인 유사도의 경우 각도에 관한 것이므로 아무런 역할을 하지 않습니다.

이제 코사인 유사도를 계산해 보겠습니다. 공식 (4)는 매우 간단한데, 분자는 두 벡터의 점 곱으로 구성되고 분모에는 크기(즉, 길이)의 곱이 포함됩니다:

scos(A,B)=ABA×B(4)\tag{4} s_{cos}(\vec{A}, \vec{B}) = \frac{\vec{A} \cdot \vec{B}}{\Vert \vec{A} \Vert \times \Vert \vec{B} \Vert}

vecAvec{A}B\vec{B} 사이의 코사인 유사도는 아래 이미지에 두 값 사이의 각도(빨간색)를 측정한 값으로 표시되어 있습니다:

이 코사인 유사도 값이 구체적으로 무엇을 의미하는지 설명하기 위해 잠시 우회해 보겠습니다. 코사인 함수를 묘사한 아래 이미지에서 볼 수 있듯이 값은 항상 [1,1][-1, 1] 간격으로 진동합니다.

두 벡터가 유사하다고 간주되려면 각도가 가능한 한 예각이어야 하며, 이상적으로는 0° 각도에 가까워야 하며, 이는 11의 완벽한 유사성으로 요약됩니다. 즉, 벡터가...

  1. ...서로가까워지면 각도의 코사인이 11에 가까워집니다(즉, 0°0°에 가까워짐).
  1. ...관련이 없는 경우 각도의 코사인이 00에 가까워집니다(즉, 90°90°에 가까워짐).
  1. ...반대로, 각도의 코사인은 1-1에 가까워집니다(즉, 180°180°에 가까워집니다).

이제 두 벡터 간의 코사인 유사도를 계산하는 방법을 알았고 결과 값을 해석하는 방법을 알았으므로, 동일한 샘플 벡터 A\vec{A}B\vec{B} 을 재사용하고 앞에서 본 공식 (4)를 사용하여 코사인 유사도를 계산할 수 있습니다.

scos(A,B)=(12)+(20.5)(12+22)×(22+0.52)34.6090.650791s_{cos}(\vec{A}, \vec{B}) = \frac{(1 \cdot 2) + (2 \cdot 0.5)}{\sqrt{(1^2 + 2^2)} \times \sqrt{(2^2 + 0.5^2)}} \approxeq \frac{3}{4.609} \approxeq 0.650791

0보다는0보다는 11에 가까운 0.6507910.650791의 코사인 유사도를 얻었는데, 이는 두 벡터가 어느 정도 유사하다는 의미, 즉 완벽하게 유사하지는 않지만 완전히 무관한 것도 아니며 반대되는 의미도 아니라는 것을 의미합니다.

코사인 유사도 값에서 양수 점수를 도출하려면 다음 공식(5)을 사용하여 [1,1][-1, 1] 구간 내에서 진동하는 코사인 유사도 값을 [0,1][0, 1] 구간의 점수로 변환해야 합니다:

_scorecos(A,B)=1+scos(A,B)2(5)\tag{5} \_score_{cos}(\vec{A},\vec{B}) = \frac{1 + s_{cos}(\vec{A}, \vec{B})}{2}

따라서 샘플 벡터 A\vec{A}B\vec{B} 의 점수는 다음과 같습니다: \ frac1+0.65079120.8253frac{1 + 0.650791}{2} \approxeq 0.8253.

도트 제품 유사성

코사인 유사도의 한 가지 단점은 두 벡터 사이의 각도만 고려하고 크기는 고려하지 않는다는 것입니다. 즉, 두 벡터가 대략 같은 방향을 가리키지만 한 벡터가 다른 벡터보다 훨씬 길면 둘 다 비슷한 것으로 간주됩니다. 스칼라 또는 내적 곱 유사도라고도 하는 도트 곱 유사도는 벡터의 각도와 크기를 모두 고려하여 보다 정확한 유사도 메트릭을 제공함으로써 이를 개선합니다. 벡터의 크기를 무관하게 만들기 위해 도트 곱 유사성은 벡터를 먼저 정규화해야 하므로 궁극적으로 단위 길이 1의 벡터만 비교하게 됩니다.

이전과 동일한 두 사람으로 다시 설명해 보겠습니다. 이번에는 두 사람의 시야 범위(즉, 방의 반경)가 정확히 같도록 원형 방 한가운데에 두 사람을 배치해 보겠습니다. 코사인 유사도와 마찬가지로, 같은 방향을 향해 더 많이 돌수록(즉, 벡터가 가까워질수록) 시야가 더 많이 겹칩니다. 그러나 코사인 유사성과는 반대로 두 벡터의 길이가 같고 두 영역의 표면이 같기 때문에 두 사람이 같은 거리에 위치한 똑같은 그림을 보고 있다는 뜻입니다. 이 두 영역이 얼마나 잘 겹치는지는 도트 제품의 유사성을 나타냅니다.

도트 곱 유사도 공식을 소개하기 전에 벡터를 어떻게 정규화할 수 있는지 간단히 살펴보겠습니다. 매우 간단하며 두 가지 간단한 단계로 완료할 수 있습니다:

  1. 벡터의 크기를 계산합니다.
  2. 각 구성 요소를 1에서 얻은 크기로 나눕니다.

벡터 A=(12)를예로들어보겠습니다.\vec{A} = \binom{1}{2}를 예로 들어 보겠습니다. 앞서 코사인 유사성을 검토할 때 보았던 것처럼 그 크기 A\Vert \vec{A} \Vert 를 계산할 수 있습니다(즉, 12+22=5\sqrt{1^2 + 2^2} = \sqrt{5}). 그런 다음 벡터의 각 구성 요소를 그 크기로 나누면 다음과 같은 정규화된 벡터 C\vec{C} 를 구할 수 있습니다:

Anorm=C=(1525)(0.440.89)\vec{A_{norm}} = \vec{C} = \dbinom{\frac{1}{\sqrt{5}}}{\frac{2}{\sqrt{5}}} \approxeq \dbinom{0.44}{0.89}

두 번째 벡터 B=(20.5)에대해동일한프로세스를수행하면다음과같은정규화된벡터\vec{B} = \binom{2}{0.5}에 대해 동일한 프로세스를 수행하면 다음과 같은 정규화된 벡터 D\vec{D} 가 생성됩니다:

Bnorm=D=(24.250.54.25)(0.970.24)\vec{B_{norm}} = \vec{D} = \dbinom{\frac{2}{\sqrt{4.25}}}{\frac{0.5}{\sqrt{4.25}}} \approxeq \dbinom{0.97}{0.24}

도트 곱 유사도 공식을 도출하기 위해 아래와 같이 공식 (4)를 사용하여 정규화된 벡터 C\vec{C}D\vec{D} 간의 코사인 유사도를 계산할 수 있습니다:

scos(C,D)=CD1×1s_{cos}(\vec{C}, \vec{D}) = \frac{\vec{C} \cdot \vec{D}}{1 \times 1}

이제 두 정규화된 벡터의 크기가 모두 1이므로1이므로, 도트 곱 유사도 공식(6)은 간단히 두 정규화된 벡터의 도트 곱이 됩니다:

sdot(C,D)=CD(6)\tag{6} s_{dot}(\vec{C}, \vec{D}) = \vec{C} \cdot \vec{D}

아래 이미지에서 정규화된 벡터 C\vec{C}D\vec{D} 을 보면 한 벡터를 다른 벡터에 투영한 도트 곱의 유사성을 빨간색으로 표시할 수 있습니다.

새로운 공식 (6)을 사용하면 정규화된 두 벡터의 도트 곱 유사도를 계산할 수 있으며, 당연히 코사인과 정확히 동일한 유사도 값을 산출할 수 있습니다:

sdot(C,D)=(1524.25)+(250.54.25)0.650791s_{dot}(\vec{C}, \vec{D}) = \Big(\frac{1}{\sqrt{5}} \cdot \frac{2}{\sqrt{4.25}}\Big) + \Big(\frac{2}{\sqrt{5}} \cdot \frac{0.5}{\sqrt{4.25}}\Big) \approxeq 0.650791

도트 곱 유사성을 활용할 때 벡터에 플로트 값이 포함되어 있는지 바이트 값이 포함되어 있는지에 따라 점수가 다르게 계산됩니다. 전자의 경우 아래 공식 (7)을 사용하여 코사인 유사도와 동일한 방식으로 점수를 계산합니다:

_scoredotfloat(C,D)=1+sdot(C,D)2(7)\tag{7} \_score_{dot-float}(\vec{C},\vec{D}) = \frac{1 + s_{dot}(\vec{C}, \vec{D})}{2}

그러나 벡터가 바이트 값으로 구성된 경우에는 아래 공식 (8)과 같이 점수가 약간 다르게 계산되며, 여기서 딤은딤은 벡터의 차원 수입니다:

_scoredotbyte(C,D)=0.5+sdot(C,D)32768×dims(8)\tag{8} \_score_{dot-byte}(\vec{C},\vec{D}) = \frac{0.5 + s_{dot}(\vec{C}, \vec{D})}{32768 \times dims}

또한 정확한 점수를 산출하기 위한 한 가지 제약 조건은 쿼리 벡터를 포함한 모든 벡터의 길이가 같아야 하지만 반드시 1은 아니어야 한다는 것입니다.

내부 제품 유사성 극대화

릴리스 8.11부터 벡터를 정규화할 필요가 없다는 점에서 도트 곱 유사도보다 제약이 덜한 새로운 유사도 함수가 추가되었습니다. 그 주된 이유는 다음 글에서 자세히 설명하지만, 간단히 요약하자면 특정 데이터 세트는 벡터를 정규화하는 데 적합하지 않으며(예: Cohere 임베딩), 그렇게 하면 연관성 문제가 발생할 수 있습니다.

최대 내적 곱 유사도를 계산하는 공식은 점 곱 1(6)과 정확히 동일합니다. 아래 공식 (9)와 같이 유사성이 양수인지 음수인지에 따라 수식이 달라지는 조각별 함수를 사용하여 최대 내적 곱 유사성을 스케일링하여 점수를 계산하는 방식이 변경됩니다:

_scoremip(A,B)={11sdot(A,B)if sdot<01+sdot(A,B)if sdot0(9)\tag{9} \_score_{mip}(\vec{A},\vec{B}) = \begin{cases} \Large \frac{1}{1 - s_{dot}(\vec{A}, \vec{B})} &\text{if } s_{dot} < 0 1 + s_{dot}(\vec{A}, \vec{B}) &\text{if } s_{dot} \geqslant 0 \end{cases}

이 조각 함수는 [0,1[[0, 1[ 구간에서 음의 최대 내적 유사도 값을 모두 스케일링하고 [1,[[1, \infty[ 구간에서 양의 값을 모두 스케일링하는 기능을 수행합니다.

요약

수학적으로 말하자면 꽤나 어려운 과정이었지만, 여기 몇 가지 유용한 팁이 있습니다.

어떤 유사도 함수를 사용할 수 있는지는 궁극적으로 벡터 임베딩의 정규화 여부에 따라 달라집니다. 벡터가 이미 정규화되어 있거나 데이터 세트가 벡터 정규화와 무관한 경우(즉, 관련성이 저하되지 않는 경우) 벡터를 정규화하고 도트 곱 유사성을 사용하면 각 벡터의 길이를 계산할 필요가 없으므로 코사인보다 훨씬 빠르게 계산할 수 있습니다. 수백만 개의 벡터를 비교할 때 이러한 계산은 상당히 많이 합산될 수 있습니다.

벡터가 정규화되지 않은 경우 두 가지 옵션이 있습니다:

  1. 벡터를 정규화할 수 없는 경우 코사인 유사도를 사용합니다.
  2. 벡터의 크기가 의미를 지니고 있어 점수에 기여하도록 하려면 새로운 최대 내적 곱 유사성을 사용합니다(예: Cohere 임베딩).

이 시점에서 벡터 임베딩 간의 거리 또는 유사성을 계산하고 점수를 도출하는 방법을 이해하면 이해가 쉬울 것입니다. 이 글이 도움이 되었기를 바랍니다.

자주 묻는 질문

코사인 유사도는 무엇을 측정하나요?

코사인 유사도는 두 벡터 사이의 상대적 각도, 즉 두 벡터가 거의 같은 방향을 가리키고 있는지 여부를 측정합니다.

L1 거리는 어떻게 측정하나요?

L1 거리는 모든 요소의 쌍별 절대 차이를 합산하여 측정합니다.

L2 거리는 어떻게 측정하나요?

유클리드 거리라고도 하는 두 벡터의 L2 거리는 먼저 모든 요소의 쌍별 차이의 제곱을 합한 다음 그 결과의 제곱근을 구하여 측정합니다.

L1과 L2 거리의 차이점은 무엇인가요?

L1과 L2 거리의 차이는 두 벡터를 측정하는 방법에 따라 달라집니다. L1 거리는 모든 요소의 쌍별 절대 차이를 합산하여 측정합니다. 반면에 L2 거리는 먼저 모든 요소의 쌍별 차이의 제곱을 합한 다음 그 결과의 제곱근을 구하여 측정합니다.

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

코사인 유사도는 두 벡터의 상대적 각도, 즉 두 벡터가 거의 같은 방향을 가리키고 있는지 여부를 측정합니다. 반면 코사인 거리는 방향이 얼마나 다른지를 측정합니다.

도트 곱과 코사인 유사도의 차이점은 무엇인가요?

도트 곱은 벡터의 길이와 정렬을 모두 측정하는 반면, 코사인 유사도는 길이를 무시하고 방향이 얼마나 정렬되어 있는지만 측정합니다.

도트 곱과 코사인 유사도는 언제 사용해야 하나요?

벡터가 정규화된 경우(또는 관련성에 영향을 주지 않고 정규화할 수 있는 경우) 도트 곱 유사도를 사용하면 벡터 길이를 계산할 필요가 없으므로 더 빠릅니다. 벡터가 정규화되지 않은 경우 방향만 신경 쓸 때는 코사인 유사도를 사용하고, 벡터 크기가 의미를 지니고 점수에 영향을 주어야 하는 경우에는 도트 곱을 사용합니다.

벡터 검색에 적합한 거리 메트릭은 어떻게 선택하나요?

벡터와 검색에 중요한 요소에 따라 거리 지표를 선택합니다. 절대 차이를 측정하려면 L1 또는 L2를, 방향만 중요한 경우 코사인 유사도를, 방향과 크기가 모두 중요하고 벡터가 정규화된 경우 도트 곱을, 벡터는 정규화되지 않았지만 크기가 관련성에 영향을 미치는 경우 최대 내적 곱을 사용하세요.

관련 콘텐츠

최첨단 검색 환경을 구축할 준비가 되셨나요?

충분히 고급화된 검색은 한 사람의 노력만으로는 달성할 수 없습니다. Elasticsearch는 여러분과 마찬가지로 검색에 대한 열정을 가진 데이터 과학자, ML 운영팀, 엔지니어 등 많은 사람들이 지원합니다. 서로 연결하고 협력하여 원하는 결과를 얻을 수 있는 마법 같은 검색 환경을 구축해 보세요.

직접 사용해 보세요