Eine Texteinbettung ist eine Vektordarstellung von Textdaten. Sie wird auf vielfältige Weise verwendet, um ähnliche Elemente zu finden. Sie interagieren mit ihnen jedes Mal, wenn Sie eine Google Suche durchführen oder Empfehlungen beim Online-Shopping sehen. Wenn Sie Texteinbettungen erstellen, erhalten Sie Vektordarstellungen von natürlichem Text als Arrays von Gleitkommazahlen. Das bedeutet, dass Ihrem gesamten Eingabetext eine numerische Darstellung zugewiesen wird. Durch den Vergleich der numerischen Entfernung zwischen den Vektordarstellungen zweier Textelemente kann eine Anwendung die Ähnlichkeit zwischen dem Text oder den durch den Text dargestellten Objekten bestimmen.
Mit der Vertex AI Texteinbettungs-API können Sie eine Texteinbettung mit Generative AI erstellen. In dieser Anleitung erfahren Sie, wie Sie Texteinbettungen für die in Spanner gespeicherten Daten und Vertex AI-Einbettungsmodelle wie das textembedding-gecko
-Modell generieren.
Weitere Informationen zu Einbettungen finden Sie unter Texteinbettungen abrufen.
Ziel
In dieser Anleitung erfahren Sie mehr über die folgenden Themen:
- Registrieren Sie das Vertex AI-
textembedding-gecko
-Modell mithilfe von DDL-Anweisungen in einem Spanner-Schema. - Verweisen Sie mithilfe von SQL-Abfragen auf das registrierte Modell, um Einbettungen aus in Spanner gespeicherten Daten zu generieren.
Kosten
In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloudverwendet, darunter:
- Spanner
- Vertex AI
Weitere Informationen zu den Spanner-Kosten finden Sie auf der Seite Spanner-Preise.
Weitere Informationen zu den Kosten für Vertex AI finden Sie auf der Seite Vertex AI-Preise.
Texteinbettungen generieren und speichern
Je nach verwendetem Modell kann das Generieren von Einbettungen einige Zeit in Anspruch nehmen. Bei leistungssensibleren Arbeitslasten sollten Sie das Generieren von Einbettungen in Lese-Schreib-Transaktionen vermeiden. Generieren Sie die Einbettungen stattdessen mit den folgenden SQL-Beispielen in einer schreibgeschützten Transaktion.
GoogleSQL
Texteinbettungsmodell in Spanner registrieren
In GoogleSQL müssen Sie ein Modell registrieren, bevor Sie es mit der Funktion ML.PREDICT
verwenden können. Wenn Sie das Modell textembedding-gecko
in einer Spanner-Datenbank registrieren möchten, führen Sie die folgende DDL-Anweisung aus:
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'
);
Ersetzen Sie Folgendes:
MODEL_NAME
: Name des EinbettungsmodellsPROJECT
: das Projekt, in dem der Vertex AI-Endpunkt gehostet wirdLOCATION
: den Standort des Vertex AI-EndpunktsMODEL_VERSION
: die Version destextembedding-gecko
-Embedding-Modells
Spanner gewährt die entsprechenden Berechtigungen automatisch. Andernfalls prüfen Sie die Zugriffssteuerung für den Modellendpunkt.
Die Schemaerkennung und -validierung ist für Modelle mit generativer KI nicht verfügbar. Sie müssen INPUT
- und OUTPUT
-Klauseln angeben, die mit dem Modellschema übereinstimmen. Das vollständige Schema des Gecko-Modells finden Sie unter Texteinbettungen abrufen.
Texteinbettungen generieren
Um Einbettungen zu generieren, übergeben Sie mit der folgenden SQL-Anweisung einen Text direkt an die Funktion ML.PREDICT
:
SELECT embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT "A product description" as content)
);
Verwenden Sie die folgende SQL-Abfrage, um Einbettungen für in einer Tabelle gespeicherte Daten zu generieren:
SELECT id, embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT id, description as content FROM Products)
);
Texteinbettungen speichern
Nachdem Sie die Einbettungen in einer schreibgeschützten Transaktion generiert haben, speichern Sie sie in Spanner, damit sie mit Ihren Betriebsdaten verwaltet werden können. Verwenden Sie zum Speichern der Einbettungen eine Lese-Schreib-Transaktion.
Bei Arbeitslasten, die weniger leistungssensibel sind, können Sie mit der folgenden SQL-Anweisung Einbettungsdaten in einer Lese-/Schreibtransaktion generieren und einfügen:
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
Texteinbettungen generieren
Um Einbettungen zu generieren, übergeben Sie mit der folgenden SQL-Anweisung einen Text direkt an die Funktion spanner.ML_PREDICT_ROW
:
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';
Ersetzen Sie Folgendes:
PROJECT
: das Projekt, in dem der Vertex AI-Endpunkt gehostet wirdLOCATION
: den Standort des Vertex AI-EndpunktsMODEL_VERSION
: die Version destextembedding-gecko
-Embedding-Modells
Verwenden Sie die folgende SQL-Abfrage, um Einbettungen für in einer Tabelle gespeicherte Daten zu generieren:
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;
Ersetzen Sie Folgendes:
PROJECT
: das Projekt, in dem der Vertex AI-Endpunkt gehostet wirdLOCATION
: den Standort des Vertex AI-EndpunktsMODEL_VERSION
: die Version destextembedding-gecko
-Embedding-Modells
Texteinbettungen speichern
Nachdem Sie die Einbettungen in einer schreibgeschützten Transaktion generiert haben, speichern Sie sie in Spanner, damit sie mit Ihren Betriebsdaten verwaltet werden können. Verwenden Sie zum Speichern der Einbettungen eine Lese-Schreib-Transaktion.
Bei Arbeitslasten, die weniger leistungssensibel sind, können Sie mit der folgenden SQL-Anweisung Einbettungsdaten in einer Lese-/Schreibtransaktion generieren und einfügen:
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'
));
Ersetzen Sie Folgendes:
PROJECT
: das Projekt, in dem der Vertex AI-Endpunkt gehostet wirdLOCATION
: den Standort des Vertex AI-EndpunktsMODEL_VERSION
: die Version destextembedding-gecko
-Embedding-Modells
Texteinbettungen aktualisieren
Verwenden Sie den Befehl UPDATE
(GoogleSQL und PostgreSQL), um Ihre Einbettungen zu aktualisieren oder Daten in Echtzeit aufzunehmen.
Verwenden Sie die folgende SQL-Anweisung, um die Tabelle Products
im vorherigen Beispiel zu aktualisieren:
GoogleSQL
UPDATE Products
SET
description = @description,
embeddings = (SELECT embeddings.values
FROM ML.PREDICT(MODEL MODEL_NAME, (SELECT @description as content))
)
WHERE id = @id;
Ersetzen Sie Folgendes:
MODEL_NAME
: der Name des Einbettungsmodells
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;
Ersetzen Sie Folgendes:
PROJECT
: das Projekt, in dem der Vertex AI-Endpunkt gehostet wirdLOCATION
: den Standort des Vertex AI-EndpunktsMODEL_VERSION
: die Version destextembedding-gecko
-Embedding-Modells
Nächste Schritte
- Informationen zur Verwendung der Vertex AI Vector Search
- Weitere Informationen zu maschinellem Lernen und Einbettungen finden Sie in unserem Crashkurs zu Einbettungen.