Um embedding de texto é uma representação vetorial de dados de texto, usado em muitas maneiras de 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
Neste tutorial, é possível gerar embeddings de texto para os dados armazenados em
modelos de embedding do Spanner e da Vertex AI, como o
textembedding-gecko
.
Para saber mais sobre embeddings, consulte Receber 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. - Referenciar o 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 gerar e embeddings em transações de leitura/gravação. Em vez disso, gere os embeddings em uma 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 DDL
declaração:
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 AI.LOCATION
: o local do endpoint da Vertex AI.MODEL_VERSION
: a versão do modelo de embedding detextembedding-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
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 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 embedding detextembedding-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 embedding detextembedding-gecko
.
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 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.