Receber embeddings de texto da Vertex AI

Um embedding de texto é uma representação vetorial de dados de texto, usado em muitas maneiras de encontrar itens semelhantes. Você interage com eles toda vez que completa pesquisar no Google ou ver 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:

  • Registrar 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 embeddings em transações de leitura/gravação. Em vez disso, gere os embeddings em um 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 embedding
  • 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 de textembedding-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 a IA generativa de modelos de machine learning. É necessário fornecer as cláusulas INPUT e OUTPUT que correspondam no esquema de modelos. Para acessar o esquema completo do modelo Gecko, Receber embeddings de texto.

Gerar embeddings de texto

Para gerar embeddings, transmita um texto diretamente para o Função ML.PREDICT com 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 texto diretamente para o Função spanner.ML_PREDICT_ROW com 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 de textembedding-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 de textembedding-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 de textembedding-gecko.

Atualizar embeddings de texto

Para atualizar seus embeddings ou ingerir dados em tempo real, use o UPDATE (GoogleSQL e PostgreSQL) .

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 de textembedding-gecko.

A seguir