Ottenere incorporamenti di testo

Questa pagina descrive come creare un incorporamento di testo utilizzando l'API Text Embedding.

Vertex AI supporta gli incorporamenti di testo in Google Distributed Cloud (GDC) air-gapped tramite l'API Text Embedding. Text Embedding utilizza rappresentazioni vettoriali.

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

Per saperne di più sui concetti chiave utilizzati dagli incorporamenti di testo, consulta la documentazione seguente:

Prima di iniziare

Prima di utilizzare l'incorporamento di testo in un progetto GDC, segui questi passaggi:

  1. Configura un progetto per Vertex AI.
  2. Scegli uno dei modelli disponibili per gli incorporamenti di testo, 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. Concedi a un utente o a un account di servizio l'accesso appropriato a Text Embedding o Text Embedding Multilingual. Per ulteriori informazioni, consulta la seguente documentazione:

  5. Installa le librerie client di Vertex AI.

  6. Ottenere un token di autenticazione.

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

Ottenere incorporamenti di testo per un frammento di testo

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

Gli esempi riportati di seguito 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 embedding di testo.

REST

Per ottenere gli incorporamenti di testo, invia una richiesta POST specificando l'endpoint del modello.

Per presentare una richiesta:

  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. Invia 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 e gli endpoint del servizio.
    • PROJECT: il nome del progetto.
    • MODEL: il modello che vuoi utilizzare. Di seguito sono riportati i valori disponibili:

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

Devi ottenere una risposta JSON simile alla 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

Per ottenere gli incorporamenti 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 all'esempio seguente:

    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:
      • endpoint-text-embedding per il modello Text Embedding.
      • endpoint-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. Hai bisogno di questo valore solo se ti trovi in un ambiente di sviluppo. In caso contrario, omettilo.
  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 e gli endpoint del servizio.
    • MODEL: il modello che vuoi utilizzare. Di seguito sono riportati i valori disponibili:

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

Devi ottenere una risposta JSON simile alla 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"}