Azure Cosmos DB for PostgreSQL에 pgvector
를 사용하도록 설정하고 사용하는 방법
적용 대상: Azure Cosmos DB for PostgreSQL(PostgreSQL에 대한 Citus 데이터베이스 확장 기반)
pgvector
확장은 PostgreSQL에 오픈 소스 벡터 유사성 검색을 추가합니다.
이 문서에서는 pgvector
에서 사용하도록 설정된 추가 기능을 소개합니다. 벡터 유사성 및 포함의 개념을 다루고 pgvector
확장을 사용하도록 설정하는 방법에 대한 지침을 제공합니다. 벡터를 만들고 저장하고 쿼리하는 방법에 대해 알아봅니다.
프로젝트의 공식 추가 정보도 참조할 수 있습니다.
확장 사용
PostgreSQL 확장을 사용하려면 먼저 데이터베이스에서 사용하도록 설정해야 합니다. 확장을 사용하도록 설정하려면 psql 도구에서 명령을 실행하여 패키지된 개체를 데이터베이스에 로드합니다.
SELECT CREATE_EXTENSION('vector');
참고 항목
확장을 사용하지 않도록 설정하려면 drop_extension()
을 사용합니다.
개념
벡터 유사성
벡터 유사성은 일련의 숫자인 벡터로 표시하여 두 항목이 얼마나 비슷한지 측정하는 데 사용되는 메서드입니다. 벡터는 데이터 요소를 나타내는 데 자주 사용됩니다. 여기서 벡터의 각 요소는 데이터 요소의 기능 또는 특성을 나타냅니다.
벡터 유사성은 일반적으로 Euclidean distance
또는 cosine
유사성과 같은 거리 메트릭을 사용하여 계산됩니다. 유클리드 거리는 n차원 공간에서 두 벡터 간의 직선 거리를 측정하는 반면, 코사인 유사성은 두 벡터 사이의 각도의 코사인을 측정합니다. 유사성 메트릭의 값은 일반적으로 0
과 1
사이의 범위를 가지며 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
를 사용하여 성능, 인덱싱 및 제한 사항에 대해 자세히 알아봅니다.