Un'incorporamento di testo è una rappresentazione vettoriale di dati di testo e vengono utilizzati in molti modi per trovare elementi simili. Ci interagisci ogni volta che completi una ricerca su Google o vedi consigli quando fai acquisti online. Quando crei incorporamenti di testo, ottieni rappresentazioni vettoriali del testo naturale sotto forma di array di numeri in virgola mobile. Ciò significa che a tutto il testo di input 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 o gli oggetti rappresentati dal testo.
Con l'API Vertex AI text-embeddings, puoi creare un
incorporamento del testo con l'IA generativa. Utilizzando questo tutorial, puoi generare incorporamenti di testo per i dati archiviati nei modelli di incorporamento di Spanner e Vertex AI come il modello textembedding-gecko
.
Per scoprire di più sugli incorporamenti, consulta Ottenere gli incorporamenti di testo.
Scopo
In questo tutorial imparerai a:
- Registra il modello Vertex AI
textembedding-gecko
in uno schema Spanner utilizzando le istruzioni DDL. - Fai riferimento al modello registrato utilizzando le query SQL per generare incorporamenti 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 relativa ai prezzi di Vertex AI.
Generare e archiviare 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 incorporamenti nelle transazioni di lettura e scrittura. Puoi invece generare gli incorporamenti in una 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, execute 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@002'
);
Sostituisci quanto segue:
MODEL_NAME
: il nome del modello di incorporamentoPROJECT
: il progetto che ospita l'endpoint Vertex AILOCATION
: la posizione dell'endpoint Vertex AI
Spanner concede automaticamente le autorizzazioni appropriate. In caso contrario, rivedi il controllo dell'accesso agli endpoint del modello.
Il rilevamento e la convalida dello schema non sono disponibili per i modelli di IA generativa. Devi fornire le clausole INPUT
e OUTPUT
che corrispondono
allo schema dei modelli. Per lo schema completo del modello Gecko, consulta
Ottenere incorporamenti di testo.
Generare incorporamenti di testo
Per generare incorporamenti, passa una porzione di testo direttamente alla funzione ML.PREDICT
utilizzando questo 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 di testo
Dopo aver generato gli incorporamenti in una transazione di sola lettura, archiviali in Spanner in modo da poterli gestire con i tuoi dati operativi. Per archiviare gli incorporamenti, utilizza una transazione di lettura-scrittura.
Per i carichi di lavoro meno sensibili alle prestazioni, puoi generare e inserire incorporamenti con il seguente SQL in una transazione di lettura-scrittura:
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 alla funzione spanner.ML_PREDICT_ROW
utilizzando questo SQL:
SELECT
spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/textembedding-gecko@002'::text,
'{"instances": [{"content": "A product description"}]}'::jsonb
) ->'predictions'->0->'embeddings'->'values';
Sostituisci quanto segue:
PROJECT
: l'ID progettoLOCATION
: la regione in cui utilizzi Vertex AI
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@002'::text, JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', description))))
) -> `predictions`->0->`embeddings`->`values``
FROM Products;
Sostituisci quanto segue:
PROJECT
: l'ID progettoLOCATION
: la regione in cui utilizzi Vertex AI
Archiviare gli incorporamenti di testo
Dopo aver generato gli incorporamenti in una transazione di sola lettura, archiviali in Spanner in modo da poterli gestire con i tuoi dati operativi. Per archiviare gli incorporamenti, utilizza una transazione di lettura-scrittura.
Per i carichi di lavoro meno sensibili alle prestazioni, puoi generare e inserire incorporamenti con il seguente SQL in una transazione di lettura-scrittura:
INSERT INTO Products (id, description, embeddings)
SELECT @Id, @Description, spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/textembedding-gecko@002'::text,
JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', @Description)))) -> 'predictions'->0->'embeddings'->'values'
)
Sostituisci quanto segue:
PROJECT
: l'ID progettoLOCATION
: la regione in cui utilizzi Vertex AI
Aggiorna gli incorporamenti di testo
Per aggiornare gli incorporamenti 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 incorporamento
PostgreSQL
UPDATE
Products
SET
description = $1,
embeddings = ARRAY(
SELECT
UNNEST::real
FROM
UNNEST((
SELECT
spanner.JSONB_QUERY_ARRAY(spanner.ML_PREDICT_ROW('projects/PROJECT/locations/LOCATION/publishers/google/models/textembedding-gecko',
JSONB_BUILD_OBJECT('instances',
JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content',
$1)))) -> 'predictions'->0->'embeddings'->'values'))))
WHERE
id = $2;
Sostituisci quanto segue:
PROJECT
: l'ID progettoLOCATION
: la regione in cui utilizzi Vertex AI
Passaggi successivi
- Scopri come utilizzare Vertex AI Vector Search per cercare elementi semanticamente simili.
- Scopri di più su machine learning e incorporamenti nel nostro corso sugli arresti anomali sugli incorporamenti.