En esta página se describe cómo crear una incrustación de texto con la API Text Embedding.
Vertex AI admite incrustaciones de texto en Google Distributed Cloud (GDC) air-gapped a través de la API Text Embedding. Text Embedding usa representaciones vectoriales.
Text Embedding convierte datos textuales escritos en cualquier idioma admitido en vectores numéricos. Estas representaciones vectoriales están diseñadas para captar el significado semántico y el contexto de las palabras que representan. Los modelos de incrustación de texto pueden generar incrustaciones optimizadas para varios tipos de tareas, como la recuperación de documentos, las preguntas y respuestas, la clasificación y la verificación de hechos en textos.
Para obtener más información sobre los conceptos clave que usan las incrustaciones de texto, consulta la siguiente documentación:
- Para obtener más información sobre las incrustaciones, consulta el artículo sobre las incrustaciones de texto.
- Para obtener información sobre los modelos de incrustación de texto, consulta el artículo sobre los modelos de incrustación.
- Para saber cómo los tipos de tareas generan incrustaciones optimizadas, consulta el artículo sobre cómo elegir un tipo de tarea de incrustación.
- Para obtener información sobre los idiomas que admite cada modelo de incrustación, consulta el artículo sobre los idiomas admitidos en las incrustaciones de texto.
Antes de empezar
Antes de usar Text Embedding en un proyecto de GDC, sigue estos pasos:
- Configura un proyecto para Vertex AI.
- Elige uno de los modelos disponibles para las incrustaciones de texto, en función del idioma y del tipo de tarea.
- Habilita la API Text Embedding o Text Embedding Multilingual, en función del modelo que quieras usar.
Concede a un usuario o a una cuenta de servicio el acceso adecuado a Text Embedding o Text Embedding Multilingual. Para obtener más información, consulta la siguiente documentación:
Debes usar el mismo proyecto para las solicitudes de modelo, la cuenta de servicio y la vinculación de roles de IAM.
Obtener incrustaciones de texto para un fragmento de texto
Una vez que hayas cumplido los requisitos previos, puedes usar los modelos Text Embedding o Text Embedding Multilingual para obtener incrustaciones de texto de un fragmento de texto mediante la API o el SDK de Python.
En los siguientes ejemplos se usa el modelo text-embedding-004.
Envía una solicitud REST a la API Text Embedding. De lo contrario, interactúa con el modelo desde un script de Python para obtener una incrustación de texto.
REST
Para obtener incrustaciones de texto, envía una solicitud POST especificando el endpoint del modelo.
Sigue estos pasos para enviar una solicitud:
Guarda el contenido de la solicitud en un archivo JSON llamado
request.json. El archivo debe tener el siguiente aspecto:{ "instances": [ { "content": "What is life?", "task_type": "", "title": "" } ] }Envía la solicitud con la herramienta
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"Haz los cambios siguientes:
TOKEN: el token de autenticación que has obtenido.ENDPOINT: el endpoint de Text Embedding o Text Embedding Multilingual que usa tu organización. Para obtener más información, consulta el estado y los endpoints de los servicios.PROJECT: el nombre de tu proyecto.MODEL: el modelo que quieres usar. Los valores disponibles son los siguientes:endpoint-text-embeddingpara el modelo Text Embedding.endpoint-text-embedding-multilingualpara el modelo Text Embedding Multilingual.
Debes obtener una respuesta JSON similar a la siguiente:
{"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
Sigue estos pasos para obtener incrustaciones de texto desde un script de Python:
Guarda el contenido de la solicitud en un archivo JSON llamado
request.json. El archivo debe tener el siguiente aspecto:{ "instances": [ { "content": "What is life?", "task_type": "", "title": "" } ] }Instala las bibliotecas de Python necesarias:
pip install absl-pyCrea un archivo de Python llamado
client.py. El archivo debe tener el siguiente aspecto: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)Haz los cambios siguientes:
PROJECT: el nombre de tu proyecto.MODEL: el modelo que quieres usar. Los valores disponibles son los siguientes:text-embeddingpara el modelo Text Embedding.text-embedding-multilingualpara el modelo Text Embedding Multilingual.
CERT_NAME: el nombre del archivo de certificado de la autoridad de certificación (CA), comoorg-1-trust-bundle-ca.cert. Solo necesitas este valor si estás en un entorno de desarrollo. De lo contrario, omítelo.
Envía una solicitud:
python client.py --token=TOKEN --host=ENDPOINT --input=request.json --endpoint_id=MODELHaz los cambios siguientes:
TOKEN: el token de autenticación que has obtenido.ENDPOINT: el endpoint de Text Embedding o Text Embedding Multilingual que usa tu organización. Para obtener más información, consulta el estado y los endpoints de los servicios.MODEL: el modelo que quieres usar. Los valores disponibles son los siguientes:text-embeddingpara el modelo Text Embedding.text-embedding-multilingualpara el modelo Text Embedding Multilingual.
Debes obtener una respuesta JSON similar a la siguiente:
{"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"}