다음을 통해 공유


Azure Database for PostgreSQL에서 pgvector 활성화 및 사용

pgvector 확장은 PostgreSQL에 오픈 소스 벡터 유사성 검색을 추가합니다.

이 문서에서는 pgvector에서 사용하도록 설정된 추가 기능을 소개합니다. 벡터 유사성 및 포함의 개념을 다루고 pgvector 확장을 사용하도록 설정하는 방법에 대한 지침을 제공합니다. 벡터를 만들고 저장하고 쿼리하는 방법에 대해 알아봅니다. 프로젝트의 공식 추가 정보도 참조할 수 있습니다.

확장 기능 활성화

Azure Database for PostgreSQL 유연한 서버 인스턴스에서 pgvector를 사용하도록 설정하려면 먼저 PostgreSQL 확장 사용 방법에 설명된 대로 이를 허용 목록에 추가하고 SHOW azure.extensions;를 실행하여 올바르게 추가되었는지 확인해야 합니다.

중요합니다

모든 PostgreSQL 커뮤니티는 이 확장자를 pgVector로 참조하는 경향이 있지만 이진 파일 이름과 확장자 자체는 단순히 vector입니다. 이 이름은 허용 목록에 추가하거나 CREATE EXTENSION 명령을 통해 데이터베이스에 만드는 데 사용해야 하는 이름이므로 이를 고려합니다.

그런 다음 대상 데이터베이스에 연결하고 CREATE EXTENSION 명령을 실행하여 확장을 설치할 수 있습니다. 확장 기능을 사용하려는 모든 데이터베이스에 대해 개별적으로 명령을 반복해야 합니다.

CREATE EXTENSION vector;

비고

현재 연결된 데이터베이스에서 확장을 제거하려면 DROP EXTENSION vector;를 사용합니다.

개념들

벡터 유사성

벡터 유사성은 일련의 숫자인 벡터로 표시하여 두 항목이 얼마나 비슷한지 측정하는 데 사용되는 메서드입니다. 벡터는 데이터 요소를 나타내는 데 자주 사용됩니다. 여기서 벡터의 각 요소는 데이터 요소의 기능 또는 특성을 나타냅니다.

벡터 유사성은 일반적으로 Euclidean distance 또는 cosine 유사성과 같은 거리 메트릭을 사용하여 계산됩니다. 유클리드 거리는 n차원 공간에서 두 벡터 간의 직선 거리를 측정하는 반면, 코사인 유사성은 두 벡터 사이의 각도의 코사인을 측정합니다. 유사성 메트릭의 값은 일반적으로 01 사이의 범위를 가지며 higher 값은 벡터 간의 유사성이 크다는 것을 나타냅니다.

벡터 유사성은 권장 사항 시스템, 텍스트 분류, 이미지 인식 및 클러스터링과 같은 다양한 애플리케이션에서 널리 사용됩니다. 예를 들어 권장 시스템에서 벡터 유사성을 사용하여 사용자의 기본 설정에 따라 유사한 항목을 식별할 수 있습니다. 텍스트 분류에서 벡터 유사성을 사용하여 벡터 표현을 기반으로 두 문서 또는 문장 간의 유사성을 확인할 수 있습니다.

포함

임베딩은 텍스트, 이미지, 비디오 또는 기타 유형의 정보의 "관련성"을 평가하는 기술입니다. 평가를 통해 기계 학습 모델이 데이터 간의 관계와 유사성을 효율적으로 식별할 수 있으므로 알고리즘이 패턴을 식별하고 정확한 예측을 할 수 있습니다. 예를 들어 감정 분석 작업에서 유사한 임베딩이 있는 단어에는 유사한 감정 점수가 있을 수 있습니다.

시작하기

3차원 벡터를 나타내는 tblvector 형식의 embedding 열을 사용하여 vector(3) 테이블을 만듭니다.

CREATE TABLE tblvector(
    id bigserial PRIMARY KEY,
    embedding vector(3)
    );

OpenAI API와 같은 서비스를 사용하여 임베딩을 생성하면 결과 벡터를 데이터베이스에 저장할 수 있습니다. 벡터를 vector(3)로 정의하면 3차원 평면에서 [x,y,z] coordinates를 지정합니다. 이 명령은 제공된 임베딩을 사용하여 5개의 새 행을 tblvector 테이블에 삽입합니다.

INSERT INTO tblvector (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]'), (3, '[5,4,6]'), (4, '[3,5,7]'), (5, '[7,8,9]');

INSERT INTO ... ON CONFLICT 문을 사용하여 조건과 일치하는 레코드 업데이트와 같은 대체 작업을 지정할 수 있습니다. 이를 통해 잠재적 충돌을 보다 효율적이고 효과적인 방식으로 처리할 수 있습니다.

INSERT INTO tblvector (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]')
ON CONFLICT (id) DO UPDATE SET embedding = EXCLUDED.embedding;

DELETE 명령은 WHERE 절에 지정된 조건에 따라 지정된 테이블에서 행을 제거합니다. WHERE 절이 없으면 테이블의 모든 행이 삭제됩니다.

DELETE FROM tblvector WHERE id = 1;

벡터를 검색하고 유사성을 계산하려면 SELECT 문 및 기본 제공 벡터 연산자를 사용합니다. 예를 들어 쿼리는 지정된 벡터와 tblvector 테이블에 저장된 벡터 사이의 유클리드 거리(L2 거리)를 계산하고, 계산된 거리를 기준으로 결과를 정렬하고, 가장 유사한 5개의 항목을 반환합니다.

SELECT * FROM tblvector 
ORDER BY embedding <-> '[3,1,2]' 
LIMIT 5;

쿼리는 다차원 공간에서 두 벡터 사이의 거리를 계산하는 데 사용되는 "distance 연산자"인 "<->" 연산자를 사용합니다. 쿼리는 벡터 [3,1,2]에서 거리가 6보다 작은 모든 행을 반환합니다.

SELECT * FROM tblvector WHERE embedding <-> '[3,1,2]' < 6;

이 명령은 "tblvector" 테이블에서 "embedding" 열의 평균 값을 검색합니다. 예를 들어 "embedding" 열에 언어 모델에 대한 단어 임베딩이 포함된 경우 이러한 임베딩의 평균 값을 사용하여 전체 문장이나 문서를 나타낼 수 있습니다.

SELECT AVG(embedding) FROM tblvector;

벡터 연산자

pgvector는 벡터에서 사용할 수 있는 새 연산자 6개를 도입합니다.

Operator Description
+ 요소별 더하기
- 요소별 빼기
* 요소별 곱하기
<-> 유클리드 거리
<#> 음의 내부 제품
<=> 코사인 거리

벡터 함수

cosine_distance

두 벡터 간 코사인 거리를 계산합니다.

cosine_distance(vector, vector)

Arguments

vector

첫 번째 vector.

vector

두 번째 vector.

반환 형식

double precision - 제공된 두 벡터 간 거리.

inner_product

두 벡터의 내적을 계산합니다.

inner_product(vector, vector)

Arguments

vector

첫 번째 vector.

vector

두 번째 vector

반환 형식

double precision - 두 벡터 간 내적.

l2_distance

두 벡터 간 유클리드 거리(L2)를 계산합니다.

l2_distance(vector, vector)

Arguments

vector

첫 번째 vector.

vector

두 번째 vector

반환 형식

double precision - 두 벡터 간 유클리드 거리.

l1_distance

두 벡터 간의 택시 거리(L1이라고도 함)를 계산합니다.

l1_distance(vector, vector)

Arguments

vector

첫 번째 vector.

vector

두 번째 vector

반환 형식

double precision - 두 벡터 간 택시 거리.

vector_dims(vector)

지정된 벡터의 차원을 반환합니다.

Arguments

vector

A vector.

반환 형식

지정된 벡터의 차원 수를 나타내는 integer.

vector_norms(vector)

지정된 벡터의 유클리드 노름을 계산합니다.

Arguments

vector

A vector.

반환 형식

지정된 벡터의 유클리드 노름을 나타내는 double precision.

벡터 집계

AVG

처리된 벡터의 평균을 계산합니다.

Arguments

vector

A vector.

반환 형식

처리된 벡터의 평균을 나타내는 vector.

SUM

Arguments

vector

A vector.

반환 형식

처리된 벡터의 합계를 나타내는 vector.