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 de texte dans Google Distributed Cloud (GDC) air-gapped via l'API Text Embedding. L'embedding de texte utilise des représentations vectorielles.

Text Embedding convertit les données textuelles rédigées dans n'importe quelle langue acceptée 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'embeddings de texte 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-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 de texte, consultez la documentation suivante :

Avant de commencer

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

  1. Configurez un projet pour Vertex AI.
  2. Choisissez l'un des modèles d'embedding de texte disponibles, 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. Accorder à un utilisateur ou à un compte de service l'accès approprié à Text Embedding ou Text Embedding Multilingual. Pour en savoir plus, consultez la documentation suivante :

  5. Installez les bibliothèques clientes Vertex AI.

  6. Obtenez un jeton d'authentification.

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

Obtenir des embeddings textuels pour un extrait de texte

Après avoir rempli les conditions préalables, vous pouvez utiliser les modèles d'embedding de texte ou d'embedding de texte multilingue 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 Embedding pour le texte. Sinon, interagissez avec le modèle à partir d'un script Python pour obtenir un embedding textuel.

REST

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

Pour envoyer une demande :

  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 Text Embedding ou Text Embedding Multilingual 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.

Vous devez obtenir une réponse JSON semblable à celle-ci :

{"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 de texte à 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 :
      • endpoint-text-embedding pour le modèle d'embedding textuel.
      • endpoint-text-embedding-multilingual pour le modèle Text Embedding Multilingual.
    • CERT_NAME : nom du fichier de certificat de l'autorité de certification (AC), 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. Dans le cas contraire, omettez-le.
  5. Envoyez une demande :

    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 Text Embedding ou Text Embedding Multilingual 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 :

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

Vous devez obtenir une réponse JSON semblable à celle-ci :

{"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"}