텍스트 임베딩은 텍스트 데이터의 벡터 표현이며 다양한 방식으로 비슷한 항목을 찾는 데 사용됩니다. Google 검색을 완료하거나 온라인 쇼핑을 하며 추천 항목을 확인할 때마다 상호작용합니다. 텍스트 임베딩을 만들면 자연어 텍스트의 벡터 표현을 부동 소수점 숫자 배열로 얻을 수 있습니다. 즉, 모든 입력 텍스트에 숫자 표현이 할당됩니다. 애플리케이션은 두 텍스트를 나타내는 벡터 표현 간의 숫자 거리를 비교하여 텍스트 또는 텍스트로 표현된 객체 간의 유사성을 확인할 수 있습니다.
Vertex AI 텍스트 임베딩 API를 사용하면 생성형 AI로 텍스트 임베딩을 만들 수 있습니다. 이 튜토리얼에서는 Spanner와 Vertex AI 임베딩 모델(예: textembedding-gecko
모델)에 저장된 데이터에 텍스트 임베딩을 생성할 수 있습니다.
임베딩에 대한 자세한 내용은 텍스트 임베딩 가져오기를 참조하세요.
목표
이 튜토리얼에서는 다음을 수행하는 방법을 알아봅니다.
- DDL 문을 사용하여 Spanner 스키마에 Vertex AI
textembedding-gecko
모델을 등록합니다. - SQL 쿼리를 사용하여 등록된 모델을 참조하여 Spanner에 저장된 데이터에서 임베딩을 생성합니다.
비용
이 튜토리얼에서는 다음과 같은 비용이 청구될 수 있는 Google Cloud 구성요소를 사용합니다.
- Spanner
- Vertex AI
Spanner 비용에 대한 자세한 내용은 Spanner 가격 책정 페이지를 참조하세요.
Vertex AI 비용에 대한 자세한 내용은 Vertex AI 가격 책정 페이지를 참조하세요.
텍스트 임베딩 생성 및 저장
사용하는 모델에 따라 임베딩을 생성하는 데 시간이 걸릴 수 있습니다. 보다 성능에 민감한 워크로드의 경우에는 읽기-쓰기 트랜잭션에서 임베딩을 생성하지 않는 것이 좋습니다. 대신 다음 SQL 예시를 사용해서 읽기 전용 트랜잭션에서 임베딩을 생성합니다.
GoogleSQL
Spanner에 텍스트 임베딩 모델 등록
GoogleSQL에서는 ML.PREDICT
함수와 함께 사용하기 전에 모델을 등록해야 합니다. Spanner 데이터베이스에 textembedding-gecko
모델을 등록하려면 다음 DDL 문을 실행합니다.
CREATE MODEL MODEL_NAME
INPUT(content STRING(MAX))
OUTPUT(
embeddings
STRUCT<
statistics STRUCT<truncated BOOL, token_count FLOAT64>,
values ARRAY<FLOAT64>>
)
REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/PROJECT/locations/LOCATION/publishers/google/models/textembedding-gecko$MODEL_VERSION'
);
다음을 바꿉니다.
MODEL_NAME
: 임베딩 모델의 이름입니다.PROJECT
: Vertex AI 엔드포인트를 호스팅하는 프로젝트입니다.LOCATION
: Vertex AI 엔드포인트 위치입니다.MODEL_VERSION
:textembedding-gecko
임베딩 모델의 버전입니다.
Spanner는 적절한 권한을 자동으로 부여합니다. 그렇지 않을 경우 모델 엔드포인트 액세스 제어를 검토하세요.
생성형 AI 모델에서는 스키마 검색 및 검증을 사용할 수 없습니다. 모델 스키마와 일치하는 INPUT
및 OUTPUT
절을 제공해야 합니다. Gecko 모델의 전체 스키마는 텍스트 임베딩 가져오기를 참조하세요.
텍스트 임베딩 생성
임베딩을 생성하려면 다음 SQL을 사용해서 ML.PREDICT
함수에 직접 텍스트 일부를 전달합니다.
SELECT embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT "A product description" as content)
);
테이블에 저장된 데이터에 대해 임베딩을 생성하려면 다음 SQL을 사용합니다.
SELECT id, embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT id, description as content FROM Products)
);
텍스트 임베딩 저장
읽기 전용 트랜잭션에서 임베딩을 생성한 후 운영 데이터로 관리할 수 있도록 Spanner에 저장합니다. 임베딩을 저장하려면 읽기-쓰기 트랜잭션을 사용합니다.
성능에 덜 민감한 워크로드의 경우 읽기-쓰기 트랜잭션에서 다음 SQL로 임베딩을 생성하고 삽입할 수 있습니다.
CREATE TABLE Products(
id INT64 NOT NULL,
description STRING(MAX),
embeddings ARRAY<FLOAT32>,
) PRIMARY KEY(id);
INSERT INTO Products (id, description, embeddings)
SELECT @Id, @Description, embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT @Description as content)
);
PostgreSQL
텍스트 임베딩 생성
임베딩을 생성하려면 다음 SQL을 사용해서 spanner.ML_PREDICT_ROW
함수에 직접 텍스트 일부를 전달합니다.
SELECT
spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/textembedding-gecko$MODEL_VERSION',
'{"instances": [{"content": "A product description"}]}'::jsonb
) ->'predictions'->0->'embeddings'->'values';
다음을 바꿉니다.
PROJECT
: Vertex AI 엔드포인트를 호스팅하는 프로젝트입니다.LOCATION
: Vertex AI 엔드포인트 위치입니다.MODEL_VERSION
:textembedding-gecko
임베딩 모델의 버전입니다.
테이블에 저장된 데이터에 대해 임베딩을 생성하려면 다음 SQL을 사용합니다.
SELECT id, spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/textembedding-gecko$MODEL_VERSION',
JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', description))))
) -> `predictions`->0->`embeddings`->`values``
FROM Products;
다음을 바꿉니다.
PROJECT
: Vertex AI 엔드포인트를 호스팅하는 프로젝트입니다.LOCATION
: Vertex AI 엔드포인트 위치입니다.MODEL_VERSION
:textembedding-gecko
임베딩 모델의 버전입니다.
텍스트 임베딩 저장
읽기 전용 트랜잭션에서 임베딩을 생성한 후 운영 데이터로 관리할 수 있도록 Spanner에 저장합니다. 임베딩을 저장하려면 읽기-쓰기 트랜잭션을 사용합니다.
성능에 덜 민감한 워크로드의 경우 읽기-쓰기 트랜잭션에서 다음 SQL로 임베딩을 생성하고 삽입할 수 있습니다.
CREATE TABLE Products (
id INT8 NOT NULL,
description TEXT,
embeddings REAL[],
PRIMARY KEY(id)
);
INSERT INTO Products (id, description, embeddings)
SELECT @Id, @Description, spanner.FLOAT32_ARRAY(spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/textembedding-gecko$MODEL_VERSION',
JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', @Description)))
) -> 'predictions'->0->'embeddings'->'values'
));
다음을 바꿉니다.
PROJECT
: Vertex AI 엔드포인트를 호스팅하는 프로젝트입니다.LOCATION
: Vertex AI 엔드포인트 위치입니다.MODEL_VERSION
:textembedding-gecko
임베딩 모델의 버전입니다.
텍스트 임베딩 업데이트
임베딩을 업데이트하거나 실시간으로 데이터를 수집하려면 UPDATE
(GoogleSQL 및 PostgreSQL) 문을 사용합니다.
이전 예시의 Products
테이블을 업데이트하려면 다음 SQL을 사용합니다.
GoogleSQL
UPDATE Products
SET
description = @description,
embeddings = (SELECT embeddings.values
FROM ML.PREDICT(MODEL MODEL_NAME, (SELECT @description as content))
)
WHERE id = @id;
다음을 바꿉니다.
MODEL_NAME
: 임베딩 모델의 이름
PostgreSQL
UPDATE
Products
SET
description = $1,
embeddings = spanner.FLOAT32_ARRAY(
spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/textembedding-gecko$MODEL_VERSION',
JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', $1)))
) -> 'predictions'->0->'embeddings'->'values')
WHERE
id = $2;
다음을 바꿉니다.
PROJECT
: Vertex AI 엔드포인트를 호스팅하는 프로젝트입니다.LOCATION
: Vertex AI 엔드포인트 위치입니다.MODEL_VERSION
:textembedding-gecko
임베딩 모델의 버전입니다.
다음 단계
- 의미적으로 비슷한 항목을 검색하도록 Vertex AI 벡터 검색을 사용하는 방법을 알아봅니다.
- 임베딩 단기집중과정에서 머신러닝 및 임베딩에 대해 알아봅니다.