Obtenir des représentations vectorielles continues de texte Vertex AI

Une représentation vectorielle continue de texte est une représentation vectorielle de données textuelles. Celles-ci sont utilisées de nombreuses façons pour trouver des éléments similaires. Vous interagissez avec eux chaque fois que vous effectuez une recherche Google ou que vous voyez des recommandations pour vos achats en ligne. Lorsque vous créez des représentations vectorielles continues de texte, vous obtenez des représentations vectorielles de texte naturel sous forme de tableaux de nombres à virgule flottante. Cela signifie que tout votre texte d'entrée se voit attribuer une représentation numérique. En comparant la distance numérique entre les représentations vectorielles de deux éléments de texte, une application peut déterminer la similarité entre le texte et les objets représentés par le texte.

L'API Vertex AI de représentations vectorielles continues de texte vous permet de créer une représentation vectorielle continue de texte à l'aide de l'IA générative. Ce tutoriel vous permet de générer des représentations vectorielles continues de texte pour les données stockées dans Spanner et Vertex AI, tels que le modèle textembedding-gecko.

Pour en savoir plus sur les représentations vectorielles continues, consultez Obtenir des représentations vectorielles continues de texte.

Objectifs

Dans ce tutoriel, vous allez apprendre à effectuer les opérations suivantes :

  • Enregistrez le modèle Vertex AI textembedding-gecko dans un schéma Spanner à l'aide d'instructions LDD.
  • référencer le modèle enregistré à l'aide de requêtes SQL pour générer des représentations vectorielles continues à partir de données stockées dans Spanner.

Coûts

Ce tutoriel utilise des composants facturables de Google Cloud, dont :

  • Spanner
  • Vertex AI

Pour en savoir plus sur le coût de Spanner, consultez la page Tarifs de Spanner.

Pour en savoir plus sur les coûts de Vertex AI, consultez la page Tarifs de Vertex AI.

Générer et stocker des représentations vectorielles continues de texte

En fonction du modèle que vous utilisez, la génération des représentations vectorielles continues peut prendre un certain temps. Pour les charges de travail plus sensibles aux performances, il est recommandé d'éviter de générer des représentations vectorielles continues dans les transactions en lecture-écriture. À la place, générez les représentations vectorielles continues dans une transaction en lecture seule à l'aide des exemples SQL suivants.

GoogleSQL

Enregistrer un modèle de représentations vectorielles continues de texte dans Spanner

Dans GoogleSQL, vous devez enregistrer un modèle avant de l'utiliser avec la fonction ML.PREDICT. Pour enregistrer le modèle textembedding-gecko dans une base de données Spanner, execute l'instruction LDD suivante:

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'
);

Remplacez les éléments suivants :

  • MODEL_NAME: nom du modèle de représentation vectorielle continue
  • PROJECT: projet hébergeant le point de terminaison Vertex AI
  • LOCATION: emplacement du point de terminaison Vertex AI
  • MODEL_VERSION: version du modèle de représentation vectorielle continue textembedding-gecko

Spanner accorde automatiquement les autorisations appropriées. Si ce n'est pas le cas, consultez la section Contrôle des accès au point de terminaison du modèle.

La découverte et la validation de schémas ne sont pas disponibles pour les modèles d'IA générative. Vous devez fournir des clauses INPUT et OUTPUT qui correspondent au schéma du modèle. Pour obtenir le schéma complet du modèle Gecko, consultez la section Obtenir des représentations vectorielles continues de texte.

Générer des représentations vectorielles continues de texte

Pour générer des représentations vectorielles continues, transmettez un texte directement à la fonction ML.PREDICT à l'aide du code SQL suivant:

SELECT embeddings.values
FROM ML.PREDICT(
  MODEL MODEL_NAME,
  (SELECT "A product description" as content)
);

Pour générer des représentations vectorielles continues pour les données stockées dans une table, utilisez le code SQL suivant:

SELECT id, embeddings.values
FROM ML.PREDICT(
  MODEL MODEL_NAME,
  (SELECT id, description as content FROM Products)
);

Stocker des représentations vectorielles continues de texte

Après avoir généré les représentations vectorielles continues dans une transaction en lecture seule, stockez-les dans Spanner afin qu'elles puissent être gérées avec vos données opérationnelles. Pour stocker les représentations vectorielles continues, utilisez une transaction en lecture/écriture.

Pour les charges de travail moins sensibles aux performances, vous pouvez générer et insérer des représentations vectorielles continues avec le code SQL suivant dans une transaction en lecture/écriture:

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

Générer des représentations vectorielles continues de texte

Pour générer des représentations vectorielles continues, transmettez un texte directement à la fonction spanner.ML_PREDICT_ROW à l'aide du code SQL suivant:

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';

Remplacez les éléments suivants :

  • PROJECT: projet hébergeant le point de terminaison Vertex AI
  • LOCATION: emplacement du point de terminaison Vertex AI
  • MODEL_VERSION: version du modèle de représentation vectorielle continue textembedding-gecko

Pour générer des représentations vectorielles continues pour les données stockées dans une table, utilisez le code SQL suivant:

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;

Remplacez les éléments suivants :

  • PROJECT: projet hébergeant le point de terminaison Vertex AI
  • LOCATION: emplacement du point de terminaison Vertex AI
  • MODEL_VERSION: version du modèle de représentation vectorielle continue textembedding-gecko

Stocker des représentations vectorielles continues de texte

Après avoir généré les représentations vectorielles continues dans une transaction en lecture seule, stockez-les dans Spanner afin qu'elles puissent être gérées avec vos données opérationnelles. Pour stocker les représentations vectorielles continues, utilisez une transaction en lecture/écriture.

Pour les charges de travail moins sensibles aux performances, vous pouvez générer et insérer des représentations vectorielles continues avec le code SQL suivant dans une transaction en lecture/écriture:

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'
));

Remplacez les éléments suivants :

  • PROJECT: projet hébergeant le point de terminaison Vertex AI
  • LOCATION: emplacement du point de terminaison Vertex AI
  • MODEL_VERSION: version du modèle de représentation vectorielle continue textembedding-gecko

Mettre à jour les représentations vectorielles continues de texte

Pour mettre à jour vos représentations vectorielles continues ou pour ingérer des données en temps réel, utilisez l'instruction UPDATE (GoogleSQL et PostgreSQL).

Pour mettre à jour la table Products de l'exemple précédent, utilisez le code SQL suivant:

GoogleSQL

UPDATE Products
SET
  description = @description,
  embeddings = (SELECT embeddings.values
                  FROM ML.PREDICT(MODEL MODEL_NAME, (SELECT @description as content))
              )
WHERE id = @id;

Remplacez les éléments suivants :

  • MODEL_NAME: nom du modèle de représentation vectorielle continue

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;

Remplacez les éléments suivants :

  • PROJECT: projet hébergeant le point de terminaison Vertex AI
  • LOCATION: emplacement du point de terminaison Vertex AI
  • MODEL_VERSION: version du modèle de représentation vectorielle continue textembedding-gecko

Étapes suivantes