앞의 예제를 테스트하다보니 벡터검색에서 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
)
수학적 용어가 나와서 어렵지만 글로 정리를 한번하니 그래도 머리속에 들어오는거같네요.
'Oracle > 운영' 카테고리의 다른 글
Lob Partition 의 partition과 lob partition의 default attributes 설정 변경하여 자동으로 추가되는 파티션 압축되게 하기 (2) | 2024.11.22 |
---|---|
[23ai] ai벡터검색 - ChatGPT를 이용하여 실시간 응답을 받기(RAG) (2) | 2024.11.15 |
[23ai] new feature 벡터 타입과 ai벡터검색 - pdf파일을 백터검색하기 (2) (0) | 2024.11.12 |
[23ai] new feature 벡터 타입과 ai벡터검색 - 유사성검색 (3) (0) | 2024.11.12 |
[23ai] new feature 벡터 타입과 ai벡터검색 (1) (5) | 2024.11.11 |
댓글