Questa pagina descrive come utilizzare l'API Vertex AI per gli embedding di testo per generare, memorizzare e aggiornare gli embedding di testo per i dati archiviati in Spanner per i database in dialetto GoogleSQL e PostgreSQL.
Un'espressione incorporata di testo è una rappresentazione vettoriale dei dati di testo e viene utilizzata in molti modi per trovare elementi simili. Interagisci con loro ogni volta che effettui una ricerca su Google o visualizzi consigli quando fai acquisti online. Quando crei embedding di testo, ottieni rappresentazioni vettoriali del testo naturale come array di numeri in virgola mobile. Ciò significa che a tutto il testo inserito viene assegnata una rappresentazione numerica. Confrontando la distanza numerica tra le rappresentazioni vettoriali di due testi, un'applicazione può determinare la somiglianza tra il testo o gli oggetti rappresentati dal testo.
Con l'API Vertex AI per gli embedding di testo, puoi creare un embedding di testo con l'IA generativa. Con questo tutorial puoi generare incorporamenti di testo per i dati archiviati nei modelli di embedding di Spanner e Vertex AI, come il modello textembedding-gecko
.
Per scoprire di più sugli embedding, consulta Ottenere embedding di testo.
Obiettivo
In questo tutorial imparerai a:
- Registra il modello
textembedding-gecko
di Vertex AI in un schema Spanner utilizzando istruzioni DDL. - Fai riferimento al modello registrato utilizzando query SQL per generare embedding dai dati archiviati in Spanner.
Costi
Questo tutorial utilizza i componenti fatturabili di Google Cloud, tra cui:
- Spanner
- Vertex AI
Per ulteriori informazioni sui costi di Spanner, consulta la pagina Prezzi di Spanner.
Per ulteriori informazioni sui costi di Vertex AI, consulta la pagina Prezzi di Vertex AI.
Genera e memorizza gli incorporamenti di testo
A seconda del modello utilizzato, la generazione di embedding potrebbe richiedere del tempo. Per carichi di lavoro più sensibili alle prestazioni, la best practice è evitare di generare embedding nelle transazioni di lettura/scrittura. Genera invece gli embedding in una transazione di sola lettura utilizzando i seguenti esempi SQL.
GoogleSQL
Registrare un modello di incorporamento 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 la seguente istruzione 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'
);
Sostituisci quanto segue:
MODEL_NAME
: il nome del modello di embeddingPROJECT
: il progetto che ospita l'endpoint Vertex AILOCATION
: la posizione dell'endpoint Vertex AIMODEL_VERSION
: la versione del modello di embeddingtextembedding-gecko
Spanner concede automaticamente le autorizzazioni appropriate. In caso contrario, esamina il controllo dell'accesso agli endpoint del modello.
La scoperta e la convalida dello schema non sono disponibili per i modelli di IA generativa. Devi fornire clausole INPUT
e OUTPUT
che corrispondano allo schema dei modelli. Per lo schema completo del modello Gecko, consulta
Ottenere gli embedding di testo.
Generare incorporamenti di testo
Per generare gli embedding, passa un testo direttamente alla funzione
ML.PREDICT
utilizzando il seguente SQL:
SELECT embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT "A product description" as content)
);
Per generare embedding per i dati archiviati in una tabella, utilizza il seguente codice SQL:
SELECT id, embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT id, description as content FROM Products)
);
Memorizzare gli incorporamenti di testo
Dopo aver generato gli embedding in una transazione di sola lettura, memorizzali in Spanner in modo che possano essere gestiti con i tuoi dati operativi. Per memorizzare gli embedding, utilizza una transazione di lettura/scrittura.
Per i workload meno sensibili alle prestazioni, puoi generare e inserire gli embedding 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 gli embedding, passa un testo direttamente alla funzione
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 AILOCATION
: la posizione dell'endpoint Vertex AIMODEL_VERSION
: la versione del modello di embeddingtextembedding-gecko
Per generare embedding per i dati archiviati in una tabella, utilizza il seguente codice 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 AILOCATION
: la posizione dell'endpoint Vertex AIMODEL_VERSION
: la versione del modello di embeddingtextembedding-gecko
Memorizzare gli incorporamenti di testo
Dopo aver generato gli embedding in una transazione di sola lettura, memorizzali in Spanner in modo che possano essere gestiti con i tuoi dati operativi. Per memorizzare gli embedding, utilizza una transazione di lettura/scrittura.
Per i workload meno sensibili alle prestazioni, puoi generare e inserire gli embedding 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 AILOCATION
: la posizione dell'endpoint Vertex AIMODEL_VERSION
: la versione del modello di embeddingtextembedding-gecko
Aggiornare gli incorporamenti di testo
Per aggiornare gli embedding o per importare i dati in tempo reale, utilizza l'istruzione UPDATE
(GoogleSQL
e PostgreSQL).
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 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;
Sostituisci quanto segue:
PROJECT
: il progetto che ospita l'endpoint Vertex AILOCATION
: la posizione dell'endpoint Vertex AIMODEL_VERSION
: la versione del modello di embeddingtextembedding-gecko
Passaggi successivi
- Scopri come utilizzare Vertex AI Vector Search per cercare elementi semanticamente simili.
- Scopri di più sul machine learning e sugli embedding nel nostro corso introduttivo sugli embedding.