이 문서에서는 pgvector 확장 프로그램을 사용하여 PostgreSQL용 AlloyDB에서 벡터 유사성 검색을 실행하는 방법을 설명합니다. 벡터 유사성 검색(최근접 이웃 검색이라고도 함)을 사용하면 데이터에서 지정된 쿼리 벡터와 가장 유사한 데이터 포인트를 찾을 수 있습니다.
임베딩을 저장하고 색인을 생성한 후 AlloyDB 데이터베이스에서 의미상 유사한 벡터를 쿼리할 수 있습니다. pgvector 쿼리 기능을 사용하여 임베딩 벡터의 최근접 이웃을 찾습니다.
벡터 임베딩 저장 및 색인 생성에 대한 자세한 내용은 각각 벡터 임베딩 저장 및 색인 생성을 참조하세요.
벡터 입력으로 유사성 검색 실행
유사성 검색을 실행하려면 테이블, 임베딩 열, 거리 함수, 대상 임베딩, 반환할 행 수를 지정합니다. embedding() 함수를 사용하여 텍스트를 벡터로 변환한 다음 pgvector 연산자를 사용하여 벡터를 저장된 임베딩과 비교할 수도 있습니다.
임베딩 벡터의 의미론적 최근접 이웃을 찾으려면 색인 생성 중에 사용한 것과 동일한 거리 함수를 설정하는 다음 예시 쿼리를 실행하면 됩니다.
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN DISTANCE_FUNCTION_QUERY ['EMBEDDING']
LIMIT ROW_COUNT
다음을 바꿉니다.
TABLE: 텍스트를 비교할 임베딩이 포함된 테이블EMBEDDING_COLUMN: 저장된 임베딩이 포함된 열DISTANCE_FUNCTION_QUERY: 이 쿼리와 함께 사용할 거리 함수. 색인을 만들 때 사용한 거리 함수에 따라 다음 중 하나를 선택합니다.L2 거리:
<->내적:
<#>코사인 거리:
<=>
EMBEDDING: 의미론적으로 최근접으로 저장된 이웃을 찾으려는 임베딩 벡터ROW_COUNT: 반환할 행의 개수.가장 일치하는 값 하나만 원하면
1을 지정합니다.
다른 쿼리 예시에 대한 자세한 내용은 쿼리를 참조하세요.
텍스트 입력으로 pgvector를 사용하여 유사성 검색 실행
embedding() 함수를 사용하여 텍스트를 벡터로 변환하고 의미상 가장 유사한 임베딩이 있는 데이터베이스 행을 찾을 수도 있습니다. 스톡 pgvector PostgreSQL 확장 프로그램은 AlloyDB에 맞게 맞춤설정되어 있으며 vector라고 합니다. 이 벡터를 pgvector 최근접 이웃 연산자 중 하나에 적용합니다(예: 코사인 거리의 경우 <=>).
embedding()에서 real 배열을 반환하므로 pgvector 연산자와 함께 이러한 값을 사용하려면 embedding() 호출을 명시적으로 vector로 변환해야 합니다.
CREATE EXTENSION IF NOT EXISTS vector;
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN::vector
<=> google_ml.embedding('MODEL_IDVERSION_TAG', 'TEXT')
LIMIT ROW_COUNT
다음을 바꿉니다.
MODEL_ID: 쿼리할 모델의 ID입니다.Vertex AI Model Garden을 사용하는 경우
text-embedding-005를 모델 ID로 지정합니다. 이는 AlloyDB가 텍스트 임베딩에 사용할 수 있는 클라우드 기반 모델입니다. 자세한 내용은 텍스트 임베딩을 참고하세요.(선택사항)
VERSION_TAG: 쿼리할 모델의 버전 태그. 태그 앞에@를 추가합니다.Vertex AI에
text-embedding-005영어 모델 중 하나를 사용하는 경우 예를 들어text-embedding-005와 같은 버전 태그를 지정하세요. 버전 태그는 모델 버전에 나와 있습니다.버전 태그를 지정하는 것이 좋습니다. 버전 태그를 지정하지 않으면 AlloyDB는 최신 모델 버전을 사용하게 되며, 이로 인해 예기치 않은 결과가 발생할 수 있습니다.
TEXT: 벡터 임베딩으로 변환할 텍스트입니다.
필터링된 KNN 검색을 가속화하려면 AlloyDB 열 기반 엔진을 사용하면 됩니다. 자세한 내용은 필터링된 벡터 검색 가속화(프리뷰) 및 열 기반 엔진 구성을 참조하세요.