Eine Texteinbettung ist eine Vektordarstellung von Textdaten. Sie werden in ähnliche Elemente zu finden. Sie interagieren jedes Mal mit ihnen, wenn Sie eine Google-Suche durchführen oder beim Online-Shopping Empfehlungen erhalten. Wenn Sie Texteinbettungen erstellen, erhalten Sie Vektordarstellungen von natürlichem Text. als Arrays von Gleitkommazahlenwerten. Das bedeutet, dass alle Ihre Eingaben wird Text eine numerische Darstellung zugewiesen. Durch den Vergleich der numerischen Entfernung zwischen den Vektordarstellungen von zwei Textelementen, kann eine Anwendung die Ähnlichkeit zwischen dem Text oder den Objekten zu bestimmen, die durch das Text.
Mit der Vertex AI Text-Embeddings API können Sie
Texteinbettung mit generativer KI. Mit
können Sie Texteinbettungen für die Daten generieren,
Spanner und Vertex AI Einbettungsmodelle wie das
Modell textembedding-gecko
.
Weitere Informationen zu Einbettungen finden Sie unter Rufen Sie Texteinbettungen ab.
Ziel
In dieser Anleitung erfahren Sie mehr über die folgenden Themen:
- Vertex AI-Modell
textembedding-gecko
registrieren in ein Spanner-Schema mit DDL-Anweisungen. - Mithilfe von SQL-Abfragen auf das registrierte Modell verweisen, um Einbettungen aus Daten, die in Spanner gespeichert sind.
Kosten
In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloud verwendet, darunter:
- Spanner
- Vertex AI
Weitere Informationen zu den Spanner-Kosten finden Sie in der Seite Spanner-Preise.
Weitere Informationen zu den Kosten von Vertex AI finden Sie in den Seite Vertex AI – Preise.
Texteinbettungen generieren und speichern
Je nach verwendetem Modell kann das Generieren der Einbettungen einige Zeit dauern. Für leistungsempfindliche Arbeitslasten vermeiden, sollten Sie am besten Einbettungen in Lese-Schreib-Transaktionen. Generieren Sie die Einbettungen stattdessen in einer schreibgeschützte Transaktion unter Verwendung der folgenden SQL-Beispiele.
GoogleSQL
Texteinbettungsmodell in Spanner registrieren
In GoogleSQL müssen Sie ein Modell registrieren, bevor Sie es mit
die Funktion ML.PREDICT
. So registrieren Sie das textembedding-gecko
-Modell in einem
Spanner-Datenbank, ausführen Sie die folgende DDL
Anweisung:
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 es nicht finden, sehen Sie sich die Endpunkt-Zugriffssteuerung für Modelle an.
Schemaerkennung und -validierung ist für Generative AI nicht verfügbar
Modelle. Sie müssen die Klauseln INPUT
und OUTPUT
angeben, die übereinstimmen.
mit dem Modellschema vergleichen. Das vollständige Schema des Gecko-Modells finden Sie unter
Rufen Sie Texteinbettungen ab.
Texteinbettungen generieren
Um Einbettungen zu generieren, übergeben Sie einen Text direkt an die
ML.PREDICT
mit folgendem SQL-Code:
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. Bis sollten Sie eine Lese-Schreib-Transaktion verwenden.
Für Arbeitslasten, die weniger leistungsempfindlich sind, können Sie Einbettungen mit dem folgenden SQL-Code in einer Lese-Schreib-Transaktion ausführen:
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 einen Text direkt an die
spanner.ML_PREDICT_ROW
mit folgendem SQL-Code:
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. Bis sollten Sie eine Lese-Schreib-Transaktion verwenden.
Für Arbeitslasten, die weniger leistungsempfindlich sind, können Sie Einbettungen mit dem folgenden SQL-Code in einer Lese-Schreib-Transaktion ausführen:
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
Wenn Sie Ihre Einbettungen aktualisieren oder Daten in Echtzeit aufnehmen möchten, verwenden Sie die UPDATE
(GoogleSQL
und PostgreSQL)
.
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
- Weitere Informationen zur Verwendung der Vertex AI-Vektorsuche nach semantisch ähnlichen Elementen zu suchen.
- Weitere Informationen zu maschinellem Lernen und Einbettungen finden Sie in unserem Crash-Kurs zu Einbettungen.