벡터 거리 함수 중에서 선택하여 벡터 임베딩 유사성 측정

이 페이지에서는 Spanner에서 제공하는 벡터 거리 함수 중에서 선택하여 벡터 임베딩 간의 유사성을 측정하는 방법을 설명합니다.

Spanner 데이터에서 임베딩을 생성한 후에는 벡터 거리 함수를 사용하여 유사성 검색을 수행할 수 있습니다. 다음 표에서는 Spanner의 벡터 거리 함수에 대해 설명합니다.

함수설명수식유사성 증가와의 관계
내적 해당 벡터 크기의 곱을 곱한 각도 \(\theta\) 의 코사인 값을 계산합니다. \(a_1b_1+a_2b_2+...+a_nb_n\) \(=|a||b|cos(\theta)\) 증가
코사인 거리 코사인 거리 함수는 1(cosine_distance() = 1 - cosine similarity)에서 코사인 유사성을 뺍니다. 코사인 유사성은 두 벡터 간 각도 \(\theta\) 의 코사인을 측정합니다. 1 - \(\frac{a^T b}{|a| \cdot |b|}\) 감소
유클리드 거리 두 벡터 간의 직선 거리를 측정합니다. \(\sqrt{(a_1-b_1)^2+(a_2-b_2)^2+...+(a_N-b_N)^2}\) 감소

유사성 측정 선택

모든 벡터 임베딩이 정규화되었는지 여부에 따라 유사성을 찾는 데 사용할 유사성 측정을 결정할 수 있습니다. 정규화된 벡터 임베딩의 크기(길이)는 정확히 1.0입니다.

또한 모델이 어떤 거리 함수로 학습되었는지 알고 있다면 해당 거리 함수를 사용하여 벡터 임베딩 간의 유사성을 측정할 수 있습니다.

정규화된 데이터

모든 벡터 임베딩이 정규화된 데이터 세트가 있다면, 세 함수 모두 동일한 시맨틱 검색 결과를 제공합니다. 기본적으로 각 함수는 서로 다른 값을 반환하지만 해당 값은 동일한 방식으로 정렬됩니다. 임베딩이 정규화될 때는 일반적으로 DOT_PRODUCT()가 가장 계산 효율적이지만 대부분의 경우 그 차이는 무시할 수 있을 정도입니다. 하지만 애플리케이션이 성능에 매우 민감한 경우 DOT_PRODUCT()가 성능 조정에 도움이 될 수 있습니다.

비정규화된 데이터

벡터 임베딩이 정규화되지 않은 데이터 세트가 있는 경우 함수로서 내적에서 거리를 측정하지 않기 때문에 DOT_PRODUCT()를 거리 함수로 사용하는 것은 수학적으로 올바르지 않습니다. 임베딩이 생성된 방법과 원하는 검색 유형에 따라 COSINE_DISTANCE() 또는 EUCLIDEAN_DISTANCE() 함수에서 다른 함수보다 주관적으로 더 나은 검색 결과를 생성할 수 있습니다. 사용 사례에 가장 적합한 방식을 결정하려면 COSINE_DISTANCE() 또는 EUCLIDEAN_DISTANCE()를 실험해야 할 수 있습니다.

데이터가 정규화되었는지 또는 비정규화되었는지 확실하지 않음

데이터가 정규화되었는지 여부가 확실하지 않고 DOT_PRODUCT()를 사용하려는 경우 대신 COSINE_DISTANCE()를 사용하는 것이 좋습니다. COSINE_DISTANCE()는 정규화가 내장된 DOT_PRODUCT()와 같습니다. COSINE_DISTANCE()를 사용하여 측정한 유사성의 범위는 -1~1입니다. 결과가 0에 가까우면 벡터가 매우 유사하다는 것을 나타냅니다.

다음 단계