본문 바로가기
Oracle/운영

[23ai] ai벡터검색 - vector_distance

by 취미툰 2024. 11. 13.
반응형

앞의 예제를 테스트하다보니 벡터검색에서 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
)

 

수학적 용어가 나와서 어렵지만 글로 정리를 한번하니 그래도 머리속에 들어오는거같네요.

 

 

출처 : https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/vector_distance.html#GUID-BA4BCFB2-D905-43DC-87B0-E53522CF07B7

반응형

댓글