[23ai] ai벡터검색 - vector_distance
앞의 예제를 테스트하다보니 벡터검색에서 SQL 작성시 vector_distance를 사용하는 것을 확인하였고, 이 함수에 대한 내용을 읽고 정리하였습니다.
사용 구문
VECTOER_DISTANCE(VEC A,VEC B,metric);
두 벡터를 매개변수로 사용하여 거리를 계산합니다. metric부분에 사용가능한 메트릭을 지정하여 구할 수 있습니다. default는 코사인(Cosine)입니다. 입력벡터가 binary인 경우에 default는 헤밍(Hamming)입니다.
VEC A 와 VEC B는 형식과 차원 수가 같아야 합니다.
JACCARD_DISTANCE 또는 JACCARD 메트릭을 사용하는 경우 VEC A, VEC B는 이진 벡터로 평가해야 합니다.
VEC A or VEC B가 null인 경우 null을 반환합니다.
Metric
코사인(Cosine)은 두 벡터 사이의 코사인 거리를 계산합니다.
DOT은 두 벡터사이에 음수 도트 곱을 계산합니다.
INNER_PRODUCT함수도 이와같이 음수 도트 곱을 계산합니다.
L2_DISTINCE라고도 하는 유클리드(EUCLIDEAN)는 두 벡터사이의 유클리드 거리를 계산합니다.
L2_SQUARED라고도 하는 EUCLIDEAN_SQUARED는 제곱근을 취하지 않은 유클리드 거리입니다.
헤밍(Hamming)은 두 벡터간에 다른 수의 차원을 계산하여 두 벡터간의 헤밍거리를 계산합니다.
L1_DISTINCE 또는 taxicab 이라고도 하는 맨해튼(MANHATTAN)은 두 벡터사이의 맨해튼 거리를 계산합니다.
JACCARD는 jaccard 거리를 계산합니다.
거리계산을 위한 약칭 연산자
A <-> B
<->는 유클리드 거리연산자입니다.
L2_DISTINCE(A,B) or VECTOR_DISTINCE(A,B, EUCLIDEAN)와 동일합니다.
A <=> B
<=>는 코사인 거리연산자입니다.
COSINE_DISTINCE(A,B) or VECTOR_DISTINCE(A,B, COSINE)와 동일합니다.
A <#> B
<#>는 음수 도트 곱 연산자입니다.
INNER_PRODUCT(A,B) or VECTOR_DISTINCE(A,B, DOT)와 동일합니다.
약칭 사용예
'[1, 2]' <-> '[0,1]'
v1 <-> '[' || '1,2,3' || ']' is equivalent to v1 <-> '[1, 2, 3]'
v1 <-> '[1,2]' is equivalent to L2_DISTANCE(v1, '[1,2]')
v1 <=> v2 is equivalent to COSINE_DISTANCE(v1, v2)
v1 <#> v2 is equivalent to -1*INNER_PRODUCT(v1, v2)
실제 사용 예
VECTOR_distance(
chunk_embedding,
vector_embedding(ALL_MINILM_L12_V2 USING 'different methods of backup and recovery' AS data),
COSINE
)
수학적 용어가 나와서 어렵지만 글로 정리를 한번하니 그래도 머리속에 들어오는거같네요.