다음을 통해 공유


Azure Database for PostgreSQL - 유연한 서버에서 pgvector를 사용하도록 설정하고 사용하는 방법

적용 대상: Azure Database for PostgreSQL - 유연한 서버

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

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

확장 사용

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

Important

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

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

CREATE EXTENSION vector;

참고 항목

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

개념

벡터 유사성

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

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

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

포함

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

시작하기

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

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 설명
+ 요소별 더하기
- 요소별 빼기
* 요소별 곱하기
<-> 유클리드 거리
<#> 음의 내부 제품
<=> 코사인 거리

벡터 함수

cosine_distance

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

cosine_distance(vector, vector)

인수

vector

첫 번째 vector.

vector

두 번째 vector.

반환 형식

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

inner_product

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

inner_product(vector, vector)

인수

vector

첫 번째 vector.

vector

두 번째 vector

반환 형식

double precision - 두 벡터 간 내적.

l2_distance

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

l2_distance(vector, vector)

인수

vector

첫 번째 vector.

vector

두 번째 vector

반환 형식

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

l1_distance

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

l1_distance(vector, vector)

인수

vector

첫 번째 vector.

vector

두 번째 vector

반환 형식

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

vector_dims(vector)

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

인수

vector

vector.

반환 형식

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

vector_norms(vector)

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

인수

vector

vector.

반환 형식

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

벡터 집계

AVG

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

인수

vector

vector.

반환 형식

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

SUM

인수

vector

vector.

반환 형식

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

다음 단계

pgvector를 사용하여 성능, 인덱싱 및 제한 사항에 대해 자세히 알아봅니다.