Elige un tipo de tarea de inserciones

Los modelos de incrustaciones de Vertex AI pueden generar incrustaciones optimizadas para varios tipos de tareas, como la recuperación de documentos, las preguntas y respuestas, y la verificación de datos. Los tipos de tareas son etiquetas que optimizan las inserciones que genera el modelo en función de tu caso práctico. En este documento se describe cómo elegir el tipo de tarea óptimo para tus inserciones.

Modelos admitidos

Los tipos de tareas son compatibles con los siguientes modelos:

  • text-embedding-005
  • text-multilingual-embedding-002
  • gemini-embedding-001

Ventajas de los tipos de tareas

Los tipos de tarea pueden mejorar la calidad de las inserciones generadas por un modelo de inserciones.

Las preguntas y sus respuestas no son similares semánticamente
Imagen 1. Las preguntas y sus respuestas no son semánticamente similares, lo que significa que las inserciones no mostrarán automáticamente su relación.

Por ejemplo, al crear sistemas de generación aumentada por recuperación (RAG), un diseño habitual es usar incrustaciones de texto y Búsqueda vectorial para realizar una búsqueda de similitud. En algunos casos, esto puede provocar una calidad de búsqueda inferior, ya que las preguntas y sus respuestas no son similares semánticamente. Por ejemplo, una pregunta como "¿Por qué el cielo es azul?" y su respuesta "La dispersión de la luz solar provoca el color azul" tienen significados claramente diferentes como afirmaciones, lo que significa que un sistema RAG no reconocerá automáticamente su relación, como se muestra en la figura 1. Sin los tipos de tareas, un desarrollador de RAG tendría que entrenar su modelo para que aprenda la relación entre las consultas y las respuestas, lo que requiere conocimientos y experiencia avanzados en ciencia de datos, o usar expansión de consultas basada en LLMs o HyDE, lo que puede provocar una latencia y unos costes elevados.

El tipo de tarea coloca las preguntas y las respuestas más cerca en el espacio de los embeddings
Imagen 2. Los tipos de tareas optimizan las inserciones para tareas específicas. En este caso, las preguntas y las respuestas se acercan en el espacio de los embeddings.

Los tipos de tareas te permiten generar embeddings optimizados para tareas específicas, lo que te ahorra el tiempo y el coste que supondría desarrollar tus propios embeddings específicos para cada tarea. La inserción generada para la consulta "¿Por qué el cielo es azul?" y su respuesta "La dispersión de la luz solar provoca el color azul" se encontrarían en el espacio de inserción compartido que representa la relación entre ellas, como se muestra en la figura 2. En este ejemplo de RAG, las inserciones optimizadas darían lugar a búsquedas de similitud mejoradas.

Además de las consultas y las respuestas, los tipos de tareas también proporcionan un espacio de inserciones optimizado para tareas como la clasificación, la agrupación en clústeres y la verificación de datos.

Tipos de tareas admitidos

Los modelos de embeddings que usan tipos de tareas admiten los siguientes tipos de tareas:

Tipo de tarea Descripción
CLASSIFICATION Se usa para generar inserciones optimizadas para clasificar textos según etiquetas predefinidas.
CLUSTERING Se usa para generar embeddings optimizados para agrupar textos en función de sus similitudes.
RETRIEVAL_DOCUMENT, RETRIEVAL_QUERY, QUESTION_ANSWERING y FACT_VERIFICATION Se usa para generar inserciones optimizadas para la búsqueda de documentos o la recuperación de información.
CODE_RETRIEVAL_QUERY Se usa para obtener un bloque de código basado en una consulta en lenguaje natural, como ordenar una matriz o invertir una lista enlazada. Las inserciones de los bloques de código se calculan mediante RETRIEVAL_DOCUMENT.
SEMANTIC_SIMILARITY Se usa para generar inserciones optimizadas para evaluar la similitud de texto. No está diseñado para casos prácticos de recuperación.

El mejor tipo de tarea para tu trabajo de inserciones depende del caso práctico que tengas para tus inserciones. Antes de seleccionar un tipo de tarea, determina el caso de uso de las inserciones.

Determinar tu caso práctico de inserciones

Los casos prácticos de los embeddings suelen encajar en una de estas cuatro categorías: evaluar la similitud de textos, clasificar textos, agrupar textos en clústeres o recuperar información de textos. Si tu caso práctico no se incluye en ninguna de las categorías anteriores, usa el tipo de tarea RETRIEVAL_QUERY de forma predeterminada.

Hay dos tipos de formato de instrucciones de tareas: asimétrico y simétrico. Tendrás que usar el que corresponda en función de tu caso práctico.

Casos prácticos de recuperación
(formato asimétrico)
Tipo de tarea de consulta Tipo de tarea de documento
Consulta de búsqueda RETRIEVAL_QUERY RETRIEVAL_DOCUMENT
Búsqueda de respuestas QUESTION_ANSWERING
Verificación de datos FACT_VERIFICATION
Recuperación de código CODE_RETRIEVAL_QUERY



Casos prácticos de una sola entrada
(formato simétrico)
Tipo de tarea de entrada
Clasificación CLASIFICACIÓN
Agrupamiento en clústeres CLUSTERING
Similitud semántica
(No se debe usar en casos prácticos de recuperación;
pensado para STS)
SEMANTIC_SIMILARITY

Clasificar textos

Si quieres usar embeddings para clasificar textos según etiquetas predefinidas, usa el tipo de tarea CLASSIFICATION. Este tipo de tarea genera inserciones en un espacio de inserciones optimizado para la clasificación.

Por ejemplo, supongamos que quieres generar embeddings de publicaciones en redes sociales que puedas usar para clasificar su sentimiento como positivo, negativo o neutro. Cuando se clasifican las inserciones de una publicación en redes sociales que dice "No me gusta viajar en avión", el sentimiento se clasificaría como negativo.

Textos de clústeres

Si quieres usar los embeddings para agrupar textos en función de sus similitudes, usa el tipo de tarea CLUSTERING. Este tipo de tarea genera inserciones optimizadas para agruparse en función de sus similitudes.

Por ejemplo, supongamos que quieres generar embeddings de artículos de noticias para poder mostrar a los usuarios artículos relacionados temáticamente con los que han leído anteriormente. Una vez que se hayan generado y agrupado los embeddings, puedes sugerir artículos adicionales relacionados con el deporte a los usuarios que lean mucho sobre deportes.

Estos son otros casos prácticos de agrupamiento en clústeres:

  • Segmentación de clientes: agrupa a los clientes con inserciones similares generadas a partir de sus perfiles o actividades para ofrecerles experiencias personalizadas y marketing segmentado.
  • Segmentación de productos: agrupar las representaciones de productos en función de su título y descripción, imágenes o reseñas de clientes puede ayudar a las empresas a analizar sus productos por segmentos.
  • Investigación de mercado: la agrupación de respuestas de encuestas de consumidores o de datos de redes sociales mediante embeddings puede revelar patrones y tendencias ocultos en las opiniones, las preferencias y los comportamientos de los consumidores, lo que ayuda a las investigaciones de mercado y a las estrategias de desarrollo de productos.
  • Sanidad: la agrupación en clústeres de las representaciones de pacientes derivadas de datos médicos puede ayudar a identificar grupos con afecciones o respuestas a tratamientos similares, lo que lleva a planes de atención sanitaria más personalizados y terapias específicas.
  • Tendencias de los comentarios de los clientes: agrupar los comentarios de los clientes de varios canales (encuestas, redes sociales, incidencias) puede ayudar a identificar los problemas habituales, las solicitudes de funciones y las áreas de mejora de los productos.

Recuperar información de textos

Cuando creas un sistema de búsqueda o recuperación, trabajas con dos tipos de texto:

  • Corpus: la colección de documentos en la que quieres buscar.
  • Consulta: el texto que proporciona un usuario para buscar información en el corpus.

Para obtener el mejor rendimiento, debes usar diferentes tipos de tareas para generar inserciones de tu corpus y tus consultas.

Primero, genera las inserciones de toda tu colección de documentos. Este es el contenido que se recuperará mediante las consultas de los usuarios. Cuando insertes estos documentos, usa el tipo de tarea RETRIEVAL_DOCUMENT. Normalmente, este paso se realiza una vez para indexar todo el corpus y, a continuación, se almacenan las inserciones resultantes en una base de datos de vectores.

A continuación, cuando un usuario envía una búsqueda, generas una inserción para el texto de su consulta en tiempo real. Para ello, debes usar un tipo de tarea que se ajuste a la intención del usuario. Tu sistema usará esta inserción de consulta para encontrar las inserciones de documentos más similares en tu base de datos de vectores.

Los siguientes tipos de tareas se usan para las consultas:

  • RETRIEVAL_QUERY: úsala para hacer una consulta de búsqueda estándar con la que quieras encontrar documentos relevantes. El modelo busca incrustaciones de documentos que sean semánticamente similares a la incrustación de la consulta.
  • QUESTION_ANSWERING: úsalo cuando todas las consultas sean preguntas adecuadas, como "¿Por qué el cielo es azul?" o "¿Cómo me ato los cordones?".
  • FACT_VERIFICATION: úsalo cuando quieras recuperar un documento de tu corpus que pruebe o refute una afirmación. Por ejemplo, la consulta "las manzanas crecen bajo tierra" podría devolver un artículo sobre manzanas que, en última instancia, refutaría la afirmación.

Veamos la siguiente situación real en la que las consultas de recuperación serían útiles:

  • En el caso de una plataforma de comercio electrónico, puedes usar las inserciones para permitir que los usuarios busquen productos mediante consultas de texto e imágenes, lo que les proporcionará una experiencia de compra más intuitiva y atractiva.
  • En el caso de una plataforma educativa, puedes crear un sistema de respuesta a preguntas que pueda responder a las preguntas de los alumnos basándose en el contenido de los libros de texto o en recursos educativos, lo que les proporcionará experiencias de aprendizaje personalizadas y les ayudará a comprender conceptos complejos.

Recuperación de código

text-embedding-005 admite un nuevo tipo de tarea CODE_RETRIEVAL_QUERY, que se puede usar para recuperar bloques de código relevantes mediante consultas de texto sin formato. Para usar esta función, los bloques de código deben insertarse con el tipo de tarea RETRIEVAL_DOCUMENT, mientras que las consultas de texto deben insertarse con CODE_RETRIEVAL_QUERY.

Para ver todos los tipos de tareas, consulta la referencia del modelo.

A continuación se muestra un ejemplo:

REST

PROJECT_ID=PROJECT_ID

curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/text-embedding-005:predict -d \
$'{
  "instances": [
    {
      "task_type": "CODE_RETRIEVAL_QUERY",
      "content": "Function to add two numbers"
    }
  ],
}'

Evaluar la similitud de textos

Si quieres usar los embeddings para evaluar la similitud entre textos, usa el tipo de tarea SEMANTIC_SIMILARITY. Este tipo de tarea genera inserciones optimizadas para generar puntuaciones de similitud.

Por ejemplo, supongamos que quiere generar embeddings para comparar la similitud de los siguientes textos:

  • El gato está durmiendo
  • El felino está echando una siesta

Cuando se usan las inserciones para crear una puntuación de similitud, esta es alta porque ambos textos tienen prácticamente el mismo significado.

Veamos los siguientes casos prácticos en los que sería útil evaluar la similitud de las entradas:

  • En un sistema de recomendaciones, el objetivo es identificar los elementos (por ejemplo, productos, artículos o películas) que son semánticamente similares a los elementos preferidos de un usuario para ofrecerle recomendaciones personalizadas y mejorar su satisfacción.

Python

Para saber cómo instalar o actualizar el SDK de Vertex AI para Python, consulta Instalar el SDK de Vertex AI para Python. Para obtener más información, consulta la documentación de referencia de la API Python.

from vertexai.language_models import TextEmbeddingInput, TextEmbeddingModel

MODEL_NAME = "gemini-embedding-001"
DIMENSIONALITY = 3072


def embed_text(
    texts: list[str] = ["Retrieve a function that adds two numbers"],
    task: str = "CODE_RETRIEVAL_QUERY",
    model_name: str = "gemini-embedding-001",
    dimensionality: int | None = 3072,
) -> list[list[float]]:
    """Embeds texts with a pre-trained, foundational model."""
    model = TextEmbeddingModel.from_pretrained(model_name)
    kwargs = dict(output_dimensionality=dimensionality) if dimensionality else {}

    embeddings = []
    # gemini-embedding-001 takes one input at a time
    for text in texts:
        text_input = TextEmbeddingInput(text, task)
        embedding = model.get_embeddings([text_input], **kwargs)
        print(embedding)
        # Example response:
        # [[0.006135190837085247, -0.01462465338408947, 0.004978656303137541, ...]]
        embeddings.append(embedding[0].values)

    return embeddings


if __name__ == "__main__":
    # Embeds code block with a pre-trained, foundational model.
    # Using this function to calculate the embedding for corpus.
    texts = ["Retrieve a function that adds two numbers"]
    task = "CODE_RETRIEVAL_QUERY"
    code_block_embeddings = embed_text(
        texts=texts, task=task, model_name=MODEL_NAME, dimensionality=DIMENSIONALITY
    )

    # Embeds code retrieval with a pre-trained, foundational model.
    # Using this function to calculate the embedding for query.
    texts = [
        "def func(a, b): return a + b",
        "def func(a, b): return a - b",
        "def func(a, b): return (a ** 2 + b ** 2) ** 0.5",
    ]
    task = "RETRIEVAL_DOCUMENT"
    code_query_embeddings = embed_text(
        texts=texts, task=task, model_name=MODEL_NAME, dimensionality=DIMENSIONALITY
    )

Se aplican las siguientes limitaciones al usar estos modelos:

  • No utilices estos modelos de vista previa en sistemas de producción o de misión crítica.
  • Estos modelos solo están disponibles en us-central1.
  • No se admiten las predicciones por lotes.
  • No se admite la personalización.

Siguientes pasos