Obtenir des embeddings de texte

Cette page explique comment créer un embedding textuel à l'aide de l'API Text Embedding.

Vertex AI est compatible avec les embeddings textuels dans Google Distributed Cloud (GDC) avec isolation physique via l'API Text Embedding. L'embedding textuel utilise des représentations vectorielles.

L'embedding textuel convertit des données textuelles écrites dans n'importe quelle langue compatible en vecteurs numériques. Ces représentations vectorielles sont conçues pour capturer la signification sémantique et le contexte des mots qu'elles représentent. Les modèles d'embedding textuel peuvent générer des embeddings optimisés pour différents types de tâches, tels que la récupération de documents, les questions et réponses, la classification et la vérification des faits pour le texte.

Pour en savoir plus sur les concepts clés utilisés par les embeddings textuels, consultez la documentation suivante :

Avant de commencer

Pour générer des embeddings textuels dans un projet GDC, demandez les autorisations nécessaires à votre administrateur.

Demander des rôles IAM

Contactez l'administrateur de projet IAM pour demander l'un des rôles suivants dans l'espace de noms de votre projet, en fonction du modèle que vous souhaitez utiliser :

  • Développeur d'embeddings textuels d'IA (ai-text-embedding-developer) : génère des embeddings textuels à l'aide du modèle d'embedding textuel.
  • AI Text Embedding Multilingual Developer (ai-text-embedding-multilingual-developer) : génère des embeddings textuels à l'aide du modèle Text Embedding Multilingual.

Pour en savoir plus sur ces rôles, consultez Préparer les autorisations IAM. Pour en savoir plus sur les liaisons de rôles pour les comptes de service, consultez Configurer des comptes de service.

Préparer votre environnement

Avant d'utiliser l'embedding textuel dans un projet GDC, procédez comme suit :

  1. Configurez un projet pour Vertex AI.
  2. Choisissez l'un des modèles disponibles pour les embeddings textuels, en fonction de la langue et du type de tâche.
  3. Activez l'API Text Embedding ou Text Embedding Multilingual, selon le modèle que vous souhaitez utiliser.
  4. Installez les bibliothèques clientes Vertex AI.

  5. Obtenez un jeton d'authentification.

Vous devez utiliser le même projet pour vos requêtes de modèle, le compte de service et la liaison de rôle IAM.

Obtenir des embeddings textuels pour un extrait de texte

Une fois que vous avez rempli les conditions préalables, vous pouvez utiliser les modèles Text Embedding ou Text Embedding Multilingual pour obtenir des embeddings textuels pour un extrait de texte à l'aide de l'API ou du SDK pour Python.

Les exemples suivants utilisent le modèle text-embedding-004.

Envoyez une requête REST à l'API d'embedding textuel. Sinon, interagissez avec le modèle à partir d'un script Python pour obtenir un embedding textuel.

REST

Pour obtenir des embeddings textuels, envoyez une requête POST en spécifiant le point de terminaison du modèle.

Pour envoyer une demande, procédez comme suit :

  1. Enregistrez le contenu de votre requête dans un fichier JSON nommé request.json. Le fichier doit ressembler à l'exemple suivant :

    {
      "instances": [
        {
          "content": "What is life?",
          "task_type": "",
          "title": ""
        }
      ]
    }
    
  2. Envoyez la requête à l'aide de l'outil curl :

    curl -X POST \
    -H "Authorization: Bearer TOKEN"\
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://ENDPOINT:443/v1/projects/PROJECT/locations/PROJECT/endpoints/MODEL:predict"
    

    Remplacez les éléments suivants :

    • TOKEN : jeton d'authentification que vous avez obtenu.
    • ENDPOINT : point de terminaison d'embedding textuel ou d'embedding textuel multilingue que vous utilisez pour votre organisation. Pour en savoir plus, consultez l'état et les points de terminaison du service.
    • PROJECT : nom de votre projet.
    • MODEL : modèle que vous souhaitez utiliser. Voici les valeurs disponibles :

      • endpoint-text-embedding pour le modèle d'embedding textuel.
      • endpoint-text-embedding-multilingual pour le modèle Text Embedding Multilingual.

Le résultat ressemble à ce qui suit :

{"predictions":[[-0.00668720435,3.20804138e-05,-0.0281705819,-0.00954890903,-0.0818724185,0.0150693133,-0.00677698106,0.0167487375,-0.0534791686,0.00208711182,0.032938987,-0.01491543]],"deployedModelId":"text-embedding","model":"models/text-embedding/1","modelDisplayName":"text-embedding","modelVersionId":"1"}

Python

Pour obtenir des embeddings textuels à partir d'un script Python, procédez comme suit :

  1. Installez la bibliothèque cliente Vertex AI Platform.

  2. Enregistrez le contenu de votre requête dans un fichier JSON nommé request.json. Le fichier doit ressembler à l'exemple suivant :

    {
      "instances": [
        {
          "content": "What is life?",
          "task_type": "",
          "title": ""
        }
      ]
    }
    
  3. Installez les bibliothèques Python requises :

    pip install absl-py
    
  4. Créez un fichier Python nommé client.py. Le fichier doit se présenter comme suit :

    import json
    import os
    from typing import Sequence
    
    import grpc
    from absl import app
    from absl import flags
    
    from google.protobuf import json_format
    from google.protobuf.struct_pb2 import Value
    from google.cloud.aiplatform_v1.services import prediction_service
    
    _INPUT = flags.DEFINE_string("input", None, "input", required=True)
    _HOST = flags.DEFINE_string("host", None, "Prediction endpoint", required=True)
    _ENDPOINT_ID = flags.DEFINE_string("endpoint_id", None, "endpoint id", required=True)
    _TOKEN = flags.DEFINE_string("token", None, "STS token", required=True)
    
    # ENDPOINT_RESOURCE_NAME is a placeholder value that doesn't affect prediction behavior.
    ENDPOINT_RESOURCE_NAME="projects/PROJECT/locations/PROJECT/endpoints/MODEL"
    
    os.environ["GRPC_DEFAULT_SSL_ROOTS_FILE_PATH"] = CERT_NAME
    
    # predict_client_secure builds a client that requires TLS
    def predict_client_secure(host):
      with open(os.environ["GRPC_DEFAULT_SSL_ROOTS_FILE_PATH"], 'rb') as f:
          creds = grpc.ssl_channel_credentials(f.read())
    
      channel_opts = ()
      channel_opts += (('grpc.ssl_target_name_override', host),)
      client = prediction_service.PredictionServiceClient(
          transport=prediction_service.transports.grpc.PredictionServiceGrpcTransport(
              channel=grpc.secure_channel(target=host+":443", credentials=creds, options=channel_opts)))
      return client
    
    def predict_func(client, instances, token):
      resp = client.predict(
          endpoint=ENDPOINT_RESOURCE_NAME,
          instances=instances,
          metadata=[ ("x-vertex-ai-endpoint-id", _ENDPOINT_ID.value), ("authorization", "Bearer " + token),])
      print(resp)
    
    def main(argv: Sequence[str]):
      del argv  # Unused.
      with open(_INPUT.value) as json_file:
          data = json.load(json_file)
          instances = [json_format.ParseDict(s, Value()) for s in data["instances"]]
    
      client = predict_client_secure(_HOST.value,)
    
      predict_func(client=client, instances=instances, token=_TOKEN.value)
    
    if __name__=="__main__":
      app.run(main)
    

    Remplacez les éléments suivants :

    • PROJECT : nom de votre projet.
    • MODEL : modèle que vous souhaitez utiliser. Voici les valeurs disponibles :
      • text-embedding pour le modèle d'embedding textuel.
      • text-embedding-multilingual pour le modèle Text Embedding Multilingual.
    • CERT_NAME : nom du fichier de certificat (CA) de l'autorité de certification, tel que org-1-trust-bundle-ca.cert. Vous n'avez besoin de cette valeur que si vous vous trouvez dans un environnement de développement. Sinon, omettez-le.
  5. Envoyez une requête :

    python client.py --token=TOKEN --host=ENDPOINT --input=request.json --endpoint_id=MODEL
    

    Remplacez les éléments suivants :

    • TOKEN : jeton d'authentification que vous avez obtenu.
    • ENDPOINT : point de terminaison d'embedding textuel ou d'embedding textuel multilingue que vous utilisez pour votre organisation. Pour en savoir plus, consultez l'état et les points de terminaison du service.
    • MODEL : modèle que vous souhaitez utiliser. Voici les valeurs disponibles :

      • text-embedding pour le modèle d'embedding textuel.
      • text-embedding-multilingual pour le modèle Text Embedding Multilingual.

Le résultat ressemble à ce qui suit :

{"predictions":[[-0.00668720435,3.20804138e-05,-0.0281705819,-0.00954890903,-0.0818724185,0.0150693133,-0.00677698106,0.0167487375,-0.0534791686,0.00208711182,0.032938987,-0.01491543]],"deployedModelId":"text-embedding","model":"models/text-embedding/1","modelDisplayName":"text-embedding","modelVersionId":"1"}