Ottenere text embedding

Questa pagina descrive come creare un text embedding utilizzando l'API Text Embedding.

Vertex AI supporta i text embedding in Google Distributed Cloud (GDC) con air gap tramite l'API Text Embedding. Il text embedding utilizza rappresentazioni vettoriali.

Text Embedding converte i dati testuali scritti in qualsiasi lingua supportata in vettori numerici. Queste rappresentazioni vettoriali sono progettate per catturare il significato semantico e il contesto delle parole che rappresentano. I modelli di text embedding possono generare embedding ottimizzati per vari tipi di attività, come il recupero di documenti, domande e risposte, la classificazione e la verifica dei fatti per il testo.

Per saperne di più sui concetti chiave utilizzati dai text embedding, consulta la seguente documentazione:

Prima di iniziare

Per generare text embedding in un progetto GDC, richiedi le autorizzazioni necessarie all'amministratore.

Richiedi ruoli IAM

Contatta l'amministratore del progetto IAM per richiedere uno dei seguenti ruoli nello spazio dei nomi del progetto, a seconda del modello che vuoi utilizzare:

  • AI Text Embedding Developer (ai-text-embedding-developer): genera text embedding utilizzando il modello Text Embedding.
  • AI Text Embedding Multilingual Developer (ai-text-embedding-multilingual-developer): genera text embedding utilizzando il modello Text Embedding Multilingual.

Per saperne di più su questi ruoli, consulta Prepara le autorizzazioni IAM. Per informazioni sulle associazioni dei ruoli per i service account, consulta Configura i service account.

prepara l'ambiente

Prima di utilizzare Text Embedding in un progetto GDC, segui questi passaggi:

  1. Configura un progetto per Vertex AI.
  2. Scegli uno dei modelli disponibili per i text embedding, a seconda della lingua e del tipo di attività.
  3. Abilita l'API Text Embedding o Text Embedding Multilingual, a seconda del modello che vuoi utilizzare.
  4. Installa le librerie client di Vertex AI.

  5. Ottieni un token di autenticazione.

Devi utilizzare lo stesso progetto per le richieste del modello, il account di servizio e l'associazione del ruolo IAM.

Ottieni text embedding per uno snippet di testo

Dopo aver soddisfatto i prerequisiti, puoi utilizzare i modelli Text Embedding o Text Embedding Multilingual per ottenere text embedding per uno snippet di testo utilizzando l'API o l'SDK per Python.

Gli esempi seguenti utilizzano il modello text-embedding-004.

Effettua una richiesta REST all'API Text Embedding. In caso contrario, interagisci con il modello da uno script Python per ottenere un text embedding.

REST

Per ottenere i text embedding, invia una richiesta POST specificando l'endpoint del modello.

Per presentare una richiesta, segui questi passaggi:

  1. Salva i contenuti della richiesta in un file JSON denominato request.json. Il file deve essere simile al seguente esempio:

    {
      "instances": [
        {
          "content": "What is life?",
          "task_type": "",
          "title": ""
        }
      ]
    }
    
  2. Effettua la richiesta utilizzando lo strumento 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"
    

    Sostituisci quanto segue:

    • TOKEN: il token di autenticazione che hai ottenuto.
    • ENDPOINT: l'endpoint Text Embedding o Text Embedding Multilingual che utilizzi per la tua organizzazione. Per saperne di più, visualizza lo stato del servizio e gli endpoint.
    • PROJECT: il nome del progetto.
    • MODEL: il modello che vuoi utilizzare. Di seguito sono riportati i valori disponibili:

      • endpoint-text-embedding per il modello di text embedding.
      • endpoint-text-embedding-multilingual per il modello Text Embedding Multilingual.

L'output è simile al seguente:

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

Segui questi passaggi per ottenere gli embedding di testo da uno script Python:

  1. Installa la libreria client di Vertex AI Platform.

  2. Salva i contenuti della richiesta in un file JSON denominato request.json. Il file deve essere simile al seguente esempio:

    {
      "instances": [
        {
          "content": "What is life?",
          "task_type": "",
          "title": ""
        }
      ]
    }
    
  3. Installa le librerie Python richieste:

    pip install absl-py
    
  4. Crea un file Python denominato client.py. Il file deve essere simile al seguente esempio:

    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)
    

    Sostituisci quanto segue:

    • PROJECT: il nome del progetto.
    • MODEL: il modello che vuoi utilizzare. Di seguito sono riportati i valori disponibili:
      • text-embedding per il modello di text embedding.
      • text-embedding-multilingual per il modello Text Embedding Multilingual.
    • CERT_NAME: il nome del file del certificato dell'autorità di certificazione (CA), ad esempio org-1-trust-bundle-ca.cert. Questo valore è necessario solo se ti trovi in un ambiente di sviluppo. In caso contrario, ometterlo.
  5. Invia una richiesta:

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

    Sostituisci quanto segue:

    • TOKEN: il token di autenticazione che hai ottenuto.
    • ENDPOINT: l'endpoint Text Embedding o Text Embedding Multilingual che utilizzi per la tua organizzazione. Per saperne di più, visualizza lo stato del servizio e gli endpoint.
    • MODEL: il modello che vuoi utilizzare. Di seguito sono riportati i valori disponibili:

      • text-embedding per il modello di text embedding.
      • text-embedding-multilingual per il modello Text Embedding Multilingual.

L'output è simile al seguente:

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