Ottieni gli incorporamenti di testo Vertex AI

Un incorporamento di testo è una rappresentazione vettoriale di dati di testo e viene utilizzato trovare articoli simili in molti modi. Interagisci con loro ogni volta che completi una ricerca su Google o vedere consigli quando fanno acquisti online. Quando crei incorporamenti di testo, ottieni rappresentazioni vettoriali del testo naturale come array di numeri in virgola mobile. Ciò significa che tutti i tuoi input al testo viene assegnata una rappresentazione numerica. Confrontando la distanza numerica tra le rappresentazioni vettoriali di due parti di testo, un'applicazione può determinare la somiglianza tra il testo e gli oggetti rappresentati testo.

Con l'API text-embeddings di Vertex AI, puoi creare un l'incorporamento del testo con l'IA generativa. Utilizzo questo tutorial imparerai a generare incorporamenti di testo per i dati archiviati in I modelli di incorporamento di Spanner e Vertex AI come Modello textembedding-gecko.

Per scoprire di più sugli incorporamenti, consulta: Ottenere incorporamenti di testo.

Obiettivo

In questo tutorial imparerai a:

  • Registra il modello Vertex AI textembedding-gecko in in uno schema Spanner utilizzando istruzioni DDL.
  • Fai riferimento al modello registrato utilizzando le query SQL per generare incorporamenti da archiviati in Spanner.

Costi

Questo tutorial utilizza componenti fatturabili di Google Cloud, tra cui:

  • Spanner
  • Vertex AI

Per saperne di più sui costi di Spanner, consulta Pagina Prezzi di Spanner.

Per ulteriori informazioni sui costi di Vertex AI, consulta Prezzi di Vertex AI.

Genera e archivia incorporamenti di testo

A seconda del modello utilizzato, la generazione degli incorporamenti potrebbe richiedere del tempo. Per carichi di lavoro più sensibili alle prestazioni, la best practice è evitare di generare gli incorporamenti nelle transazioni di lettura/scrittura. Genera invece gli incorporamenti in un transazione di sola lettura utilizzando i seguenti esempi SQL.

GoogleSQL

Registrare un modello di incorporamenti di testo in Spanner

In GoogleSQL, devi registrare un modello prima di utilizzarlo con la funzione ML.PREDICT. Per registrare il modello textembedding-gecko in un Database Spanner, esegui il seguente DDL Dichiarazione:

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'
);

Sostituisci quanto segue:

  • MODEL_NAME: il nome del modello di incorporamento
  • PROJECT: il progetto che ospita l'endpoint Vertex AI
  • LOCATION: la posizione dell'endpoint Vertex AI
  • MODEL_VERSION: la versione del modello di incorporamento textembedding-gecko

Spanner concede automaticamente le autorizzazioni appropriate. Se non lo fa, rivedi il controllo dell'accesso agli endpoint del modello.

Il rilevamento e la convalida dello schema non sono disponibili per l'IA generativa di grandi dimensioni. Devi fornire le clausole INPUT e OUTPUT che corrispondano rispetto allo schema dei modelli. Per lo schema completo del modello Gecko, vedi Ottenere incorporamenti di testo.

Generare incorporamenti di testo

Per generare incorporamenti, passa una porzione di testo direttamente ML.PREDICT utilizzando il seguente SQL:

SELECT embeddings.values
FROM ML.PREDICT(
  MODEL MODEL_NAME,
  (SELECT "A product description" as content)
);

Per generare incorporamenti per i dati archiviati in una tabella, utilizza il seguente SQL:

SELECT id, embeddings.values
FROM ML.PREDICT(
  MODEL MODEL_NAME,
  (SELECT id, description as content FROM Products)
);

Archiviare gli incorporamenti del testo

Dopo aver generato gli incorporamenti in una transazione di sola lettura, archiviali Spanner per poterli gestire con i tuoi dati operativi. A per archiviare gli incorporamenti, usa una transazione di lettura/scrittura.

Per carichi di lavoro meno sensibili alle prestazioni, puoi generare e inserire incorporamenti con il seguente SQL in una transazione di lettura/scrittura:

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

Generare incorporamenti di testo

Per generare incorporamenti, passa una porzione di testo direttamente spanner.ML_PREDICT_ROW utilizzando il seguente 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';

Sostituisci quanto segue:

  • PROJECT: il progetto che ospita l'endpoint Vertex AI
  • LOCATION: la posizione dell'endpoint Vertex AI
  • MODEL_VERSION: la versione del modello di incorporamento textembedding-gecko

Per generare incorporamenti per i dati archiviati in una tabella, utilizza il seguente 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;

Sostituisci quanto segue:

  • PROJECT: il progetto che ospita l'endpoint Vertex AI
  • LOCATION: la posizione dell'endpoint Vertex AI
  • MODEL_VERSION: la versione del modello di incorporamento textembedding-gecko

Archiviare gli incorporamenti del testo

Dopo aver generato gli incorporamenti in una transazione di sola lettura, archiviali Spanner per poterli gestire con i tuoi dati operativi. A per archiviare gli incorporamenti, usa una transazione di lettura/scrittura.

Per carichi di lavoro meno sensibili alle prestazioni, puoi generare e inserire incorporamenti con il seguente SQL in una transazione di lettura/scrittura:

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'
));

Sostituisci quanto segue:

  • PROJECT: il progetto che ospita l'endpoint Vertex AI
  • LOCATION: la posizione dell'endpoint Vertex AI
  • MODEL_VERSION: la versione del modello di incorporamento textembedding-gecko

Aggiorna gli incorporamenti di testo

Per aggiornare gli incorporamenti o importare i dati in tempo reale, utilizza UPDATE (GoogleSQL e PostgreSQL). l'Informativa.

Per aggiornare la tabella Products nell'esempio precedente, utilizza il seguente SQL:

GoogleSQL

UPDATE Products
SET
  description = @description,
  embeddings = (SELECT embeddings.values
                  FROM ML.PREDICT(MODEL MODEL_NAME, (SELECT @description as content))
              )
WHERE id = @id;

Sostituisci quanto segue:

  • MODEL_NAME: il nome del modello di incorporamento

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;

Sostituisci quanto segue:

  • PROJECT: il progetto che ospita l'endpoint Vertex AI
  • LOCATION: la posizione dell'endpoint Vertex AI
  • MODEL_VERSION: la versione del modello di incorporamento textembedding-gecko

Passaggi successivi