Um embedding de texto é uma representação vetorial de dados de texto e é usado de várias maneiras para encontrar itens semelhantes. Você interage com eles sempre que faz uma pesquisa no Google ou recebe recomendações ao fazer compras on-line. Ao criar embeddings de texto, você recebe representações vetoriais de texto natural como matrizes de números de ponto flutuante. Isso significa que todas as entradas recebe uma representação numérica. Comparando a distância numérica entre as representações vetoriais de dois textos, um aplicativo pode determinar a semelhança entre o texto ou os objetos representados pelo em textos.
Com a API Text-embeddings da Vertex AI, é possível criar
a incorporação de texto com a IA generativa. Usando
este tutorial, você pode gerar embeddings de texto para os dados armazenados nos
modelos de embeddings da Spanner e da Vertex AI, como o
textembedding-gecko
.
Para saber mais sobre embeddings, consulte Usar embeddings de texto.
Objetivo
Neste tutorial, você aprenderá a realizar as seguintes tarefas:
- Registre o modelo
textembedding-gecko
da Vertex AI em um esquema do Spanner usando instruções DDL. - Faça referência ao modelo registrado usando consultas SQL para gerar embeddings de dados armazenados no Spanner.
Custos
Neste tutorial, há componentes faturáveis do Google Cloud, entre eles:
- Spanner
- Vertex AI
Para mais informações sobre os custos do Spanner, consulte a Preços do Spanner.
Para mais informações sobre os custos da Vertex AI, consulte a página de preços da Vertex AI.
Gerar e armazenar embeddings de texto
Dependendo do modelo usado, a geração de embeddings pode levar algum tempo. Para cargas de trabalho mais sensíveis ao desempenho, a prática recomendada é evitar a geração de incorporações em transações de leitura e gravação. Em vez disso, gere os embeddings transação somente leitura usando os exemplos de SQL a seguir.
GoogleSQL
Registrar um modelo de embedding de texto no Spanner
No GoogleSQL, você precisa registrar um modelo antes de usá-lo com
a função ML.PREDICT
. Para registrar o modelo textembedding-gecko
em um banco de dados do Spanner, execute a seguinte instrução do 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'
);
Substitua:
MODEL_NAME
: o nome do modelo de embeddingPROJECT
: o projeto que hospeda o endpoint da Vertex AILOCATION
: o local do endpoint da Vertex AI.MODEL_VERSION
: a versão do modelo de embeddingtextembedding-gecko
O Spanner concede as permissões adequadas automaticamente. Se caso contrário, analise o controle de acesso de endpoint do modelo.
A descoberta e a validação de esquemas não estão disponíveis para modelos de IA generativa. É necessário fornecer cláusulas INPUT
e OUTPUT
que correspondam
ao esquema dos modelos. Para acessar o esquema completo do modelo Gecko,
Receber embeddings de texto.
Gerar embeddings de texto
Para gerar embeddings, transmita um trecho de texto diretamente para a função ML.PREDICT
usando o seguinte SQL:
SELECT embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT "A product description" as content)
);
Para gerar embeddings para dados armazenados em uma tabela, use o seguinte SQL:
SELECT id, embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT id, description as content FROM Products)
);
Armazenar embeddings de texto
Depois de gerar as embeddings em uma transação somente leitura, armazene-as no Spanner para que possam ser gerenciadas com seus dados operacionais. Para armazenar as representações, use uma transação de leitura/gravação.
Para cargas de trabalho menos sensíveis à performance, é possível gerar e inserir incorporações com o seguinte SQL em uma transação de leitura e gravação:
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
Gerar embeddings de texto
Para gerar embeddings, transmita um trecho de texto diretamente para a função spanner.ML_PREDICT_ROW
usando o seguinte SQL:
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';
Substitua:
PROJECT
: o projeto que hospeda o endpoint da Vertex AI.LOCATION
: o local do endpoint da Vertex AI.MODEL_VERSION
: a versão do modelo de embeddingtextembedding-gecko
Para gerar embeddings para dados armazenados em uma tabela, use o seguinte 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;
Substitua:
PROJECT
: o projeto que hospeda o endpoint da Vertex AI.LOCATION
: o local do endpoint da Vertex AI.MODEL_VERSION
: a versão do modelo de embeddingtextembedding-gecko
Armazenar embeddings de texto
Após gerar os embeddings em uma transação somente leitura, armazene-os em Spanner para que possam ser gerenciadas com seus dados operacionais. Para armazenar os embeddings, usando uma transação de leitura/gravação.
Para cargas de trabalho menos sensíveis ao desempenho, é possível gerar e inserir com o seguinte SQL em uma transação de leitura/gravação:
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'
));
Substitua:
PROJECT
: o projeto que hospeda o endpoint da Vertex AI.LOCATION
: o local do endpoint da Vertex AI.MODEL_VERSION
: a versão do modelo de embedding detextembedding-gecko
.
Atualizar embeddings de texto
Para atualizar seus embeddings ou ingerir dados em tempo real, use o UPDATE
(GoogleSQL
e PostgreSQL)
instrução.
Para atualizar a tabela Products
no exemplo anterior, use o seguinte SQL:
GoogleSQL
UPDATE Products
SET
description = @description,
embeddings = (SELECT embeddings.values
FROM ML.PREDICT(MODEL MODEL_NAME, (SELECT @description as content))
)
WHERE id = @id;
Substitua:
MODEL_NAME
: o nome do modelo de embedding
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;
Substitua:
PROJECT
: o projeto que hospeda o endpoint da Vertex AI.LOCATION
: o local do endpoint da Vertex AI.MODEL_VERSION
: a versão do modelo de embedding detextembedding-gecko
.
A seguir
- Saiba como usar a Pesquisa de vetores da Vertex AI para pesquisar itens semanticamente parecidos.
- Saiba mais sobre machine learning e embeddings na nossa curso intensivo sobre embeddings.