Eine Texteinbettung ist eine Vektordarstellung von Textdaten. Sie werden auf viele Arten verwendet, um ähnliche Elemente zu finden. Sie interagieren jedes Mal mit ihnen, wenn Sie beim Online-Shopping eine Google-Suche durchführen oder Empfehlungen erhalten. 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 des numerischen Abstands zwischen den Vektordarstellungen von zwei Textelementen kann eine Anwendung die Ähnlichkeit zwischen dem Text oder den durch den Text dargestellten Objekten ermitteln.
Mit der Vertex AI Text-Embeddings API können Sie eine Texteinbettung mit generativer KI erstellen. Mit dieser Anleitung können Sie Texteinbettungen für die Daten generieren, die in Spanner- und Vertex AI-Einbettungsmodellen wie dem textembedding-gecko
-Modell gespeichert sind.
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-Modell
textembedding-gecko
mithilfe von DDL-Anweisungen in einem Spanner-Schema. - Referenzieren Sie das registrierte Modell mithilfe von SQL-Abfragen, um Einbettungen aus in Spanner gespeicherten Daten zu generieren.
Kosten
In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloud verwendet, darunter:
- Spanner
- Vertex AI
Weitere Informationen zu den Kosten für Spanner finden Sie auf der Seite Spanner-Preise.
Weitere Informationen zu den Kosten von Vertex AI finden Sie auf der Seite Vertex AI – Preise.
Texteinbettungen generieren und speichern
Je nach verwendetem Modell kann das Generieren der Einbettungen einige Zeit dauern. Bei leistungsempfindlichen Arbeitslasten empfiehlt es sich, keine Einbettungen in Lese-Schreib-Transaktionen zu generieren. Generieren Sie die Einbettungen stattdessen mithilfe der folgenden SQL-Beispiele in einer schreibgeschützten Transaktion.
GoogleSQL
Texteinbettungsmodell in Spanner registrieren
In GoogleSQL müssen Sie ein Modell registrieren, bevor Sie es mit der ML.PREDICT
-Funktion verwenden können. Zum Registrieren des textembedding-gecko
-Modells in einer Spanner-Datenbank execute 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
: der Name des EinbettungsmodellsPROJECT
: das Projekt, das den Vertex AI-Endpunkt hostetLOCATION
: der Standort des Vertex AI-EndpunktsMODEL_VERSION
: die Version des Einbettungsmodellstextembedding-gecko
Spanner gewährt die entsprechenden Berechtigungen automatisch. Wenn dies nicht der Fall ist, sehen Sie sich die Endpunkt-Zugriffssteuerung für Modelle an.
Schemaerkennung und -validierung ist für Generative AI-Modelle 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 folgendem SQL 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 den folgenden SQL-Code, um Einbettungen für Daten zu generieren, die in einer Tabelle gespeichert sind:
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.
Für Arbeitslasten, die weniger leistungsempfindlich sind, können Sie Einbettungen mit dem folgenden SQL-Code in einer Lese-Schreib-Transaktion 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 folgendem SQL 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, das den Vertex AI-Endpunkt hostetLOCATION
: der Standort des Vertex AI-EndpunktsMODEL_VERSION
: die Version des Einbettungsmodellstextembedding-gecko
Verwenden Sie den folgenden SQL-Code, um Einbettungen für Daten zu generieren, die in einer Tabelle gespeichert sind:
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, das den Vertex AI-Endpunkt hostetLOCATION
: der Standort des Vertex AI-EndpunktsMODEL_VERSION
: die Version des Einbettungsmodellstextembedding-gecko
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.
Für Arbeitslasten, die weniger leistungsempfindlich sind, können Sie Einbettungen mit dem folgenden SQL-Code in einer Lese-Schreib-Transaktion 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, das den Vertex AI-Endpunkt hostetLOCATION
: der Standort des Vertex AI-EndpunktsMODEL_VERSION
: die Version des Einbettungsmodellstextembedding-gecko
Texteinbettungen aktualisieren
Verwenden Sie die Anweisung UPDATE
(GoogleSQL und PostgreSQL), um Ihre Einbettungen zu aktualisieren oder Daten in Echtzeit aufzunehmen.
Verwenden Sie den folgenden SQL-Code, 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, das den Vertex AI-Endpunkt hostetLOCATION
: der Standort des Vertex AI-EndpunktsMODEL_VERSION
: die Version des Einbettungsmodellstextembedding-gecko
Nächste Schritte
- Mit Vertex AI Vektorsuche nach semantisch ähnlichen Elementen suchen
- In unserem Crashkurs zu Einbettungen erfahren Sie mehr über maschinelles Lernen und Einbettungen.