Vertex AI-Texteinbettungen abrufen

Eine Texteinbettung ist eine Vektordarstellung von Textdaten. Sie wird auf vielfältige Weise verwendet, um ä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 Gleitkommazahlen. Das bedeutet, dass Ihrem gesamten Eingabetext eine numerische Darstellung zugewiesen wird. Durch den Vergleich der numerischen Distanz 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. 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 Texteinbettungen abrufen.

Ziel

In dieser Anleitung erfahren Sie mehr über die folgenden Themen:

  • Vertex AI-Modell textembedding-gecko registrieren in ein Spanner-Schema mit DDL-Anweisungen.
  • 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 Cloud verwendet, darunter:

  • Spanner
  • Vertex AI

Weitere Informationen zu den Spanner-Kosten finden Sie in 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 der Einbettungen einige Zeit dauern. Für leistungsempfindliche Arbeitslasten vermeiden, sollten Sie am besten Einbettungen in Lese-Schreib-Transaktionen. 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 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 Einbettungsmodells
  • PROJECT: das Projekt, in dem der Vertex AI-Endpunkt gehostet wird
  • LOCATION: den Standort des Vertex AI-Endpunkts
  • MODEL_VERSION: die Version des textembedding-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 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 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. Bis sollten Sie eine Lese-Schreib-Transaktion verwenden.

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 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, in dem der Vertex AI-Endpunkt gehostet wird
  • LOCATION: den Standort des Vertex AI-Endpunkts
  • MODEL_VERSION: die Version des Einbettungsmodells textembedding-gecko

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 wird
  • LOCATION: den Standort des Vertex AI-Endpunkts
  • MODEL_VERSION: die Version des Einbettungsmodells textembedding-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, in dem der Vertex AI-Endpunkt gehostet wird
  • LOCATION: den Standort des Vertex AI-Endpunkts
  • MODEL_VERSION: die Version des Einbettungsmodells textembedding-gecko

Texteinbettungen aktualisieren

Verwenden Sie den Befehl UPDATE (GoogleSQL und PostgreSQL), um Ihre Einbettungen zu aktualisieren oder Daten in Echtzeit zu verarbeiten.

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 wird
  • LOCATION: den Standort des Vertex AI-Endpunkts
  • MODEL_VERSION: die Version des Einbettungsmodells textembedding-gecko

Nächste Schritte