Obtener embeddings de texto

En este documento se describe cómo crear una incrustación de texto con la API Text embeddings de Vertex AI.

La API de inserciones de texto de Vertex AI usa representaciones de vectores densos. Por ejemplo, gemini-embedding-001 usa vectores de 3072 dimensiones. Los modelos de inserción de vectores densos usan métodos de aprendizaje profundo similares a los que usan los modelos de lenguaje extensos. A diferencia de los vectores dispersos, que suelen asignar palabras directamente a números, los vectores densos se han diseñado para representar mejor el significado de un fragmento de texto. La ventaja de usar incrustaciones de vectores densos en la IA generativa es que, en lugar de buscar coincidencias directas de palabras o sintaxis, puedes buscar mejor pasajes que se ajusten al significado de la consulta, aunque no utilicen el mismo lenguaje.

Los vectores se normalizan, por lo que puede usar la similitud del coseno, el producto escalar o la distancia euclídea para obtener las mismas clasificaciones de similitud.

Antes de empezar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Enable the Vertex AI API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Enable the Vertex AI API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  6. Elige un tipo de tarea para tu trabajo de inserciones.
  7. Modelos admitidos

    Puedes obtener inserciones de texto con los siguientes modelos:

    Nombre del modelo Descripción Dimensiones de salida Longitud máxima de la secuencia Idiomas de texto admitidos
    gemini-embedding-001 Rendimiento de última generación en tareas de inglés, multilingües y de código. Unifica los modelos especializados anteriores, como text-embedding-005 y text-multilingual-embedding-002, y consigue un mejor rendimiento en sus respectivos dominios. Consulta más información en nuestro informe técnico. hasta 3072 2048 tokens Idiomas de texto admitidos
    text-embedding-005 Especializada en tareas de inglés y código. hasta 768 2048 tokens Inglés
    text-multilingual-embedding-002 Especializada en tareas multilingües. hasta 768 2048 tokens Idiomas de texto admitidos

    Para obtener una calidad de inserción superior, gemini-embedding-001 es nuestro modelo grande diseñado para ofrecer el máximo rendimiento.

    Obtener representaciones de texto de un fragmento de texto

    Puedes obtener las inserciones de texto de un fragmento de texto mediante la API de Vertex AI o el SDK de Vertex AI para Python.

    Límites de la API

    En cada solicitud, puedes incluir un máximo de 250 textos de entrada. La API tiene un límite máximo de 20.000 tokens de entrada. Si se supera este límite, se produce un error 400. Cada texto de entrada individual tiene un límite de 2048 tokens. Si se supera, se trunca de forma silenciosa. También puedes inhabilitar el truncamiento silencioso definiendo autoTruncate como false.

    Para obtener más información, consulta Límites de inserción de texto.

    Elegir una dimensión de inserción

    Todos los modelos generan un vector de incrustación de longitud completa de forma predeterminada. En el caso de gemini-embedding-001, este vector tiene 3072 dimensiones, mientras que otros modelos generan vectores de 768 dimensiones. Sin embargo, con el parámetro output_dimensionality, los usuarios pueden controlar el tamaño del vector de inserción de salida. Si seleccionas una dimensionalidad de salida más pequeña, puedes ahorrar espacio de almacenamiento y aumentar la eficiencia computacional de las aplicaciones posteriores, sin sacrificar apenas calidad.

    En los siguientes ejemplos se usa el modelo gemini-embedding-001.

    Python

    Instalar

    pip install --upgrade google-genai

    Para obtener más información, consulta la documentación de referencia del SDK.

    Define variables de entorno para usar el SDK de IA generativa con Vertex AI:

    # Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
    # with appropriate values for your project.
    export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
    export GOOGLE_CLOUD_LOCATION=global
    export GOOGLE_GENAI_USE_VERTEXAI=True

    from google import genai
    from google.genai.types import EmbedContentConfig
    
    client = genai.Client()
    response = client.models.embed_content(
        model="gemini-embedding-001",
        contents=[
            "How do I get a driver's license/learner's permit?",
            "How long is my driver's license valid for?",
            "Driver's knowledge test study guide",
        ],
        config=EmbedContentConfig(
            task_type="RETRIEVAL_DOCUMENT",  # Optional
            output_dimensionality=3072,  # Optional
            title="Driver's License",  # Optional
        ),
    )
    print(response)
    # Example response:
    # embeddings=[ContentEmbedding(values=[-0.06302902102470398, 0.00928034819662571, 0.014716853387653828, -0.028747491538524628, ... ],
    # statistics=ContentEmbeddingStatistics(truncated=False, token_count=13.0))]
    # metadata=EmbedContentMetadata(billable_character_count=112)

    Go

    Consulta cómo instalar o actualizar Go.

    Para obtener más información, consulta la documentación de referencia del SDK.

    Define variables de entorno para usar el SDK de IA generativa con Vertex AI:

    # Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
    # with appropriate values for your project.
    export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
    export GOOGLE_CLOUD_LOCATION=global
    export GOOGLE_GENAI_USE_VERTEXAI=True

    import (
    	"context"
    	"fmt"
    	"io"
    
    	"google.golang.org/genai"
    )
    
    // generateEmbedContentWithText shows how to embed content with text.
    func generateEmbedContentWithText(w io.Writer) error {
    	ctx := context.Background()
    
    	client, err := genai.NewClient(ctx, &genai.ClientConfig{
    		HTTPOptions: genai.HTTPOptions{APIVersion: "v1"},
    	})
    	if err != nil {
    		return fmt.Errorf("failed to create genai client: %w", err)
    	}
    
    	outputDimensionality := int32(3072)
    	config := &genai.EmbedContentConfig{
    		TaskType:             "RETRIEVAL_DOCUMENT",  //optional
    		Title:                "Driver's License",    //optional
    		OutputDimensionality: &outputDimensionality, //optional
    	}
    
    	contents := []*genai.Content{
    		{
    			Parts: []*genai.Part{
    				{
    					Text: "How do I get a driver's license/learner's permit?",
    				},
    				{
    					Text: "How long is my driver's license valid for?",
    				},
    				{
    					Text: "Driver's knowledge test study guide",
    				},
    			},
    			Role: "user",
    		},
    	}
    
    	modelName := "gemini-embedding-001"
    	resp, err := client.Models.EmbedContent(ctx, modelName, contents, config)
    	if err != nil {
    		return fmt.Errorf("failed to generate content: %w", err)
    	}
    
    	fmt.Fprintln(w, resp)
    
    	// Example response:
    	// embeddings=[ContentEmbedding(values=[-0.06302902102470398, 0.00928034819662571, 0.014716853387653828, -0.028747491538524628, ... ],
    	// statistics=ContentEmbeddingStatistics(truncated=False, token_count=13.0))]
    	// metadata=EmbedContentMetadata(billable_character_count=112)
    
    	return nil
    }
    

    Añadir una inserción a una base de datos de vectores

    Una vez que hayas generado la inserción, puedes añadirla a una base de datos de vectores, como la búsqueda de vectores. Esto permite recuperar datos con baja latencia, lo cual es fundamental a medida que aumenta el tamaño de los datos.

    Para obtener más información sobre la búsqueda vectorial, consulta el resumen de la búsqueda vectorial.

    Siguientes pasos