Genera incorporaciones de texto con la función ML.GENERATE_OPTIMIDING

En este documento, se muestra cómo crear un modelo remoto de BigQuery ML que hace referencia a un modelo de incorporación. Luego, usa ese modelo con la función ML.GENERATE_EMBEDDING para crear incorporaciones de texto con los datos de una tabla estándar de BigQuery.

Se admiten los siguientes tipos de modelos remotos:

Roles requeridos

Para crear un modelo remoto y usar la función ML.GENERATE_EMBEDDING, necesitas los siguientes roles de Identity and Access Management (IAM):

  • Crear y usar conjuntos de datos, tablas y modelos de BigQuery: Editor de datos de BigQuery (roles/bigquery.dataEditor) en tu proyecto
  • Crea, delega y usa conexiones de BigQuery: Administrador de conexiones de BigQuery (roles/bigquery.connectionsAdmin) en tu proyecto.

    Si no tienes configurada una conexión predeterminada, puedes crear y establecer una como parte de la ejecución de la instrucción CREATE MODEL. Para ello, debes tener el rol de administrador de BigQuery (roles/bigquery.admin) en tu proyecto. Para obtener más información, consulta Cómo configurar la conexión predeterminada.

  • Otorga permisos a la cuenta de servicio de la conexión: Administrador de IAM del proyecto (roles/resourcemanager.projectIamAdmin) en el proyecto que contiene el extremo de Vertex AI. Este es el proyecto actual para los modelos remotos que creas especificando el nombre del modelo como un extremo. Este es el proyecto identificado en la URL de los modelos remotos que creas especificando una URL como extremo.

  • Crear trabajos de BigQuery: Usuario de trabajo de BigQuery (roles/bigquery.jobUser) en tu proyecto

Estos roles predefinidos contienen los permisos necesarios para realizar las tareas de este documento. Para ver los permisos exactos que son necesarios, expande la sección Permisos necesarios:

Permisos necesarios

  • Crea un conjunto de datos: bigquery.datasets.create
  • Crea, delega y usa una conexión: bigquery.connections.*
  • Configura los permisos de la cuenta de servicio: resourcemanager.projects.getIamPolicy y resourcemanager.projects.setIamPolicy
  • Crea un modelo y ejecuta la inferencia:
    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata
  • Consultar datos de tablas: bigquery.tables.getData

También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.

Antes de comenzar

  1. 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

  2. Verify that billing is enabled for your Google Cloud project.

  3. Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.

    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 APIs

Crea un conjunto de datos

Crea un conjunto de datos de BigQuery para que contenga tus recursos:

Console

  1. En la consola de Google Cloud , ve a la página BigQuery.

    Ir a BigQuery

  2. En el panel de la izquierda, haz clic en Explorar:

    Botón destacado del panel Explorador.

    Si no ves el panel izquierdo, haz clic en Expandir panel izquierdo para abrirlo.

  3. En el panel Explorador, haz clic en el nombre de tu proyecto.

  4. Haz clic en Ver acciones > Crear conjunto de datos.

  5. En la página Crear conjunto de datos, haz lo siguiente:

    1. En ID de conjunto de datos, escribe un nombre para el conjunto de datos.

    2. En Tipo de ubicación, selecciona Región o Multirregión.

      • Si seleccionaste Región, selecciona una ubicación de la lista Región.
      • Si seleccionaste Multirregión, selecciona EE.UU. o Europa en la lista Multirregión.
    3. Haz clic en Crear conjunto de datos.

bq

  1. Para crear un conjunto de datos nuevo, usa el comando bq mk con la marca --location:

    bq --location=LOCATION mk -d DATASET_ID

    Reemplaza lo siguiente:

    • LOCATION: la ubicación del conjunto de datos.
    • DATASET_ID es el ID del conjunto de datos que crearás.
  2. Confirma que se haya creado el conjunto de datos:

    bq ls

Crear una conexión

Puedes omitir este paso si tienes configurada una conexión predeterminada o si tienes el rol de administrador de BigQuery.

Crea una conexión de recurso de Cloud para que la use el modelo remoto y obtén la cuenta de servicio de la conexión. Crea la conexión en la misma ubicación que el conjunto de datos que creaste en el paso anterior.

Selecciona una de las siguientes opciones:

Console

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el panel Explorador, haz clic en Agregar datos:

    Elemento de la IU Agregar datos.

    Se abrirá el diálogo Agregar datos.

  3. En el panel Filtrar por, en la sección Tipo de fuente de datos, selecciona Aplicaciones empresariales.

    También puedes ingresar Vertex AI en el campo Buscar fuentes de datos.

  4. En la sección Fuentes de datos destacadas, haz clic en Vertex AI.

  5. Haz clic en la tarjeta de solución Vertex AI Models: BigQuery Federation.

  6. En la lista Tipo de conexión, selecciona Modelos remotos de Vertex AI, funciones remotas, BigLake y Spanner (Cloud Resource).

  7. En el campo ID de conexión, ingresa un nombre para tu conexión.

  8. Haz clic en Crear conexión (Create connection).

  9. Haz clic en Ir a la conexión.

  10. En el panel Información de conexión, copia el ID de la cuenta de servicio para usarlo en un paso posterior.

bq

  1. En un entorno de línea de comandos, crea una conexión:

    bq mk --connection --location=REGION --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE CONNECTION_ID

    El parámetro --project_id anula el proyecto predeterminado.

    Reemplaza lo siguiente:

    • REGION: tu región de conexión
    • PROJECT_ID: El ID de tu proyecto de Google Cloud
    • CONNECTION_ID: Es un ID para tu conexión.

    Cuando creas un recurso de conexión, BigQuery crea una cuenta de servicio del sistema única y la asocia con la conexión.

    Solución de problemas: Si recibes el siguiente error de conexión, actualiza el SDK de Google Cloud:

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. Recupera y copia el ID de cuenta de servicio para usarlo en un paso posterior:

    bq show --connection PROJECT_ID.REGION.CONNECTION_ID

    El resultado es similar a este:

    name                          properties
    1234.REGION.CONNECTION_ID     {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
    

Terraform

Usa el recurso google_bigquery_connection.

.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

En el siguiente ejemplo, se crea una conexión de recursos de Cloud llamada my_cloud_resource_connection en la región US:


# This queries the provider for project information.
data "google_project" "default" {}

# This creates a cloud resource connection in the US region named my_cloud_resource_connection.
# Note: The cloud resource nested object has only one output field - serviceAccountId.
resource "google_bigquery_connection" "default" {
  connection_id = "my_cloud_resource_connection"
  project       = data.google_project.default.project_id
  location      = "US"
  cloud_resource {}
}

Para aplicar tu configuración de Terraform en un proyecto Google Cloud , completa los pasos de las siguientes secciones.

Prepara Cloud Shell

  1. Inicia Cloud Shell
  2. Establece el proyecto Google Cloud predeterminado en el que deseas aplicar tus configuraciones de Terraform.

    Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Las variables de entorno se anulan si configuras valores explícitos en el archivo de configuración de Terraform.

Prepara el directorio

Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).

  1. En Cloud Shell, crea un directorio y un archivo nuevo dentro de ese directorio. El nombre del archivo debe tener la extensión .tf, por ejemplo, main.tf. En este instructivo, el archivo se denomina main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si sigues un instructivo, puedes copiar el código de muestra en cada sección o paso.

    Copia el código de muestra en el main.tf recién creado.

    De manera opcional, copia el código de GitHub. Esto se recomienda cuando el fragmento de Terraform es parte de una solución de extremo a extremo.

  3. Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
  4. Guarda los cambios.
  5. Inicializa Terraform. Solo debes hacerlo una vez por directorio.
    terraform init

    De manera opcional, incluye la opción -upgrade para usar la última versión del proveedor de Google:

    terraform init -upgrade

Aplica los cambios

  1. Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:
    terraform plan

    Corrige la configuración según sea necesario.

  2. Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, escribe yes cuando se te solicite:
    terraform apply

    Espera hasta que Terraform muestre el mensaje “¡Aplicación completa!”.

  3. Abre tu proyecto Google Cloud para ver los resultados. En la consola de Google Cloud , navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.

Otorga un rol a la cuenta de servicio de la conexión del modelo remoto

Debes otorgar a la cuenta de servicio de la conexión el rol de usuario de Vertex AI.

Si planeas especificar el extremo como una URL cuando crees el modelo remoto, por ejemplo, endpoint = 'https://us-central1-aiplatform.googleapis.com/v1/projects/myproject/locations/us-central1/publishers/google/models/text-embedding-005', otorga este rol en el mismo proyecto que especifiques en la URL.

Si planeas especificar el extremo con el nombre del modelo cuando crees el modelo remoto, por ejemplo, endpoint = 'text-embedding-005', otorga este rol en el mismo proyecto en el que planeas crear el modelo remoto.

Si otorgas el rol en un proyecto diferente, se produce el error bqcx-1234567890-wxyz@gcp-sa-bigquery-condel.iam.gserviceaccount.com does not have the permission to access resource.

Para otorgar el rol, sigue estos pasos:

Console

  1. Ir a la página IAM y administración

    Ir a IAM y administración

  2. Haz clic en Otorgar acceso.

    Se abre el cuadro de diálogo Agregar principales.

  3. En el campo Principales nuevas (New principals), ingresa el ID de la cuenta de servicio que copiaste antes.

  4. En el campo Selecciona un rol, selecciona Vertex AI y, luego, Usuario de Vertex AI.

  5. Haz clic en Guardar.

gcloud

Usa el comando gcloud projects add-iam-policy-binding:

gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/aiplatform.user' --condition=None

Reemplaza lo siguiente:

  • PROJECT_NUMBER: Es el número de tu proyecto.
  • MEMBER: el ID de la cuenta de servicio que copiaste antes

Elige un método de implementación de modelos abiertos

Si creas un modelo remoto sobre un modelo abierto compatible, puedes implementar automáticamente el modelo abierto al mismo tiempo que creas el modelo remoto. Para ello, especifica el ID del modelo de Vertex AI Model Garden o de Hugging Face en la instrucción CREATE MODEL. Como alternativa, primero puedes implementar el modelo abierto de forma manual y, luego, usarlo con el modelo remoto especificando el extremo del modelo en la instrucción CREATE MODEL. Para obtener más información, consulta Implementa modelos abiertos.

Crea un modelo remoto de BigQuery ML

Crea un modelo remoto:

Nuevos modelos abiertos

  1. En la consola de Google Cloud , ve a la página BigQuery.

    Ir a BigQuery

  2. Crea un modelo remoto con el editor de SQL:

    CREATE OR REPLACE MODEL
    `PROJECT_ID.DATASET_ID.MODEL_NAME`
    REMOTE WITH CONNECTION {DEFAULT | `PROJECT_ID.REGION.CONNECTION_ID`}
    OPTIONS (
      {HUGGING_FACE_MODEL_ID = 'HUGGING_FACE_MODEL_ID' |
         MODEL_GARDEN_MODEL_NAME = 'MODEL_GARDEN_MODEL_NAME'}
      [, HUGGING_FACE_TOKEN = 'HUGGING_FACE_TOKEN' ]
      [, MACHINE_TYPE = 'MACHINE_TYPE' ]
      [, MIN_REPLICA_COUNT = MIN_REPLICA_COUNT ]
      [, MAX_REPLICA_COUNT = MAX_REPLICA_COUNT ]
      [, RESERVATION_AFFINITY_TYPE = {'NO_RESERVATION' | 'ANY_RESERVATION' | 'SPECIFIC_RESERVATION'} ]
      [, RESERVATION_AFFINITY_KEY = 'compute.googleapis.com/reservation-name' ]
      [, RESERVATION_AFFINITY_VALUES = RESERVATION_AFFINITY_VALUES ]
      [, ENDPOINT_IDLE_TTL = ENDPOINT_IDLE_TTL ]
    );

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto
    • DATASET_ID: El ID del conjunto de datos que contendrá el modelo. Este conjunto de datos debe estar en la misma ubicación que la conexión que usas.
    • MODEL_NAME: el nombre del modelo
    • REGION: Es la región que usa la conexión.
    • CONNECTION_ID por el ID de la conexión de BigQuery.

      Puedes obtener este valor viendo los detalles de conexión en la consola de Google Cloud y copiando el valor en la última sección del ID de conexión completamente calificado que se muestra en ID de conexión. Por ejemplo: projects/myproject/locations/connection_location/connections/myconnection.

    • HUGGING_FACE_MODEL_ID: Un valor STRING que especifica el ID del modelo para un modelo compatible de Hugging Face, en el formato provider_name/model_name. Por ejemplo, deepseek-ai/DeepSeek-R1. Para obtener el ID del modelo, haz clic en el nombre del modelo en Hugging Face Model Hub y, luego, copia el ID del modelo de la parte superior de la tarjeta del modelo.
    • MODEL_GARDEN_MODEL_NAME: Es un valor STRING que especifica el ID y la versión de un modelo compatible de Model Garden de Vertex AI, en el formato publishers/publisher/models/model_name@model_version. Por ejemplo, publishers/openai/models/gpt-oss@gpt-oss-120b. Para obtener el ID del modelo, haz clic en la tarjeta del modelo en Model Garden de Vertex AI y, luego, copia el ID del modelo del campo ID del modelo. Puedes obtener la versión predeterminada del modelo copiándola del campo Versión en la tarjeta del modelo. Para ver otras versiones del modelo que puedes usar, haz clic en Implementar modelo y, luego, en el campo ID de recurso.
    • HUGGING_FACE_TOKEN: Un valor STRING que especifica el token de acceso de usuario de Hugging Face que se usará. Solo puedes especificar un valor para esta opción si también especificas un valor para la opción HUGGING_FACE_MODEL_ID.

      El token debe tener, como mínimo, el rol de read, pero también se aceptan tokens con un alcance más amplio. Esta opción es obligatoria cuando el modelo identificado por el valor HUGGING_FACE_MODEL_ID es un modelo restringido o privado de Hugging Face.

      Algunos modelos restringidos requieren la aceptación explícita de sus condiciones del servicio antes de otorgar el acceso. Para aceptar estas condiciones, sigue estos pasos:

      1. Navega a la página del modelo en el sitio web de Hugging Face.
      2. Ubica y revisa las condiciones del servicio del modelo. Por lo general, en la tarjeta del modelo se incluye un vínculo al acuerdo de servicio.
      3. Acepta las condiciones cuando se te solicite en la página.
    • MACHINE_TYPE: Es un valor STRING que especifica el tipo de máquina que se usará cuando se implemente el modelo en Vertex AI. Para obtener información sobre los tipos de máquinas compatibles, consulta Tipos de máquinas. Si no especificas un valor para la opción MACHINE_TYPE, se usará el tipo de máquina predeterminado de Vertex AI Model Garden para el modelo.
    • MIN_REPLICA_COUNT: Es un valor INT64 que especifica la cantidad mínima de réplicas de máquinas que se usan cuando se implementa el modelo en un extremo de Vertex AI. El servicio aumenta o disminuye el recuento de réplicas según lo requiera la carga de inferencia en el extremo. La cantidad de réplicas que se usa nunca es inferior al valor MIN_REPLICA_COUNT ni superior al valor MAX_REPLICA_COUNT. El valor MIN_REPLICA_COUNT debe estar en el rango [1, 4096]. El valor predeterminado es 1.
    • MAX_REPLICA_COUNT: Es un valor INT64 que especifica la cantidad máxima de réplicas de máquinas que se usan cuando se implementa el modelo en un extremo de Vertex AI. El servicio aumenta o disminuye el recuento de réplicas según lo requiera la carga de inferencia en el extremo. La cantidad de réplicas que se usa nunca es inferior al valor MIN_REPLICA_COUNT ni superior al valor MAX_REPLICA_COUNT. El valor MAX_REPLICA_COUNT debe estar en el rango [1, 4096]. El valor predeterminado es el valor de MIN_REPLICA_COUNT.
    • RESERVATION_AFFINITY_TYPE: Determina si el modelo implementado usa reservas de Compute Engine para proporcionar disponibilidad garantizada de máquina virtual (VM) cuando se entregan predicciones y especifica si el modelo usa VMs de todas las reservas disponibles o solo de una reserva específica. Para obtener más información, consulta Afinidad de reservas de Compute Engine.

      Solo puedes usar las reservas de Compute Engine que se comparten con Vertex AI. Para obtener más información, consulta Cómo permitir que se consuma una reserva.

      Los valores admitidos son los siguientes:

      • NO_RESERVATION: No se consume ninguna reserva cuando tu modelo se implementa en un extremo de Vertex AI. Especificar NO_RESERVATION tiene el mismo efecto que no especificar una afinidad de reserva.
      • ANY_RESERVATION: La implementación del modelo de Vertex AI consume máquinas virtuales (VMs) de las reservas de Compute Engine que se encuentran en el proyecto actual o que se comparten con el proyecto, y que están configuradas para el consumo automático. Solo se usan las VMs que cumplen con los siguientes requisitos:
        • Usan el tipo de máquina especificado por el valor MACHINE_TYPE.
        • Si el conjunto de datos de BigQuery en el que creas el modelo remoto es de una sola región, la reserva debe estar en la misma región. Si el conjunto de datos está en la multirregión US, la reserva debe estar en la región us-central1. Si el conjunto de datos está en la multirregión EU, la reserva debe estar en la región europe-west4.

        Si no hay suficiente capacidad en las reservas disponibles o no se encuentran reservas adecuadas, el sistema aprovisiona VMs de Compute Engine según demanda para satisfacer los requisitos de recursos.

      • SPECIFIC_RESERVATION: La implementación del modelo de Vertex AI consume VMs solo de la reserva que especificas en el valor RESERVATION_AFFINITY_VALUES. Esta reserva debe estar configurada para un consumo con una orientación específica. Deployment falla si la reserva especificada no tiene capacidad suficiente.
    • RESERVATION_AFFINITY_KEY: La cadena compute.googleapis.com/reservation-name. Debes especificar esta opción cuando el valor de RESERVATION_AFFINITY_TYPE sea SPECIFIC_RESERVATION.
    • RESERVATION_AFFINITY_VALUES: Un valor ARRAY<STRING> que especifica el nombre completo del recurso de la reserva de Compute Engine, en el siguiente formato:

      projects/myproject/zones/reservation_zone/reservations/reservation_name

      Por ejemplo, RESERVATION_AFFINITY_values = ['projects/myProject/zones/us-central1-a/reservations/myReservationName'].

      Puedes obtener el nombre y la zona de la reserva en la página Reservas de la consola de Google Cloud . Para obtener más información, consulta Cómo ver las reservas.

      Debes especificar esta opción cuando el valor de RESERVATION_AFFINITY_TYPE sea SPECIFIC_RESERVATION.

    • ENDPOINT_IDLE_TTL: Un valor INTERVAL que especifica la duración de la inactividad después de la cual el modelo abierto se deja de implementar automáticamente desde el extremo de Vertex AI.

      Para habilitar la anulación automática de la implementación, especifica un valor de literal de intervalo entre 390 minutos (6.5 horas) y 7 días. Por ejemplo, especifica INTERVAL 8 HOUR para que el modelo deje de implementarse después de 8 horas de inactividad. El valor predeterminado es de 390 minutos (6.5 horas).

      La inactividad del modelo se define como la cantidad de tiempo que transcurrió desde que se realizó alguna de las siguientes operaciones en el modelo:

      Cada una de estas operaciones restablece el temporizador de inactividad a cero. El restablecimiento se activa al inicio del trabajo de BigQuery que realiza la operación.

      Después de que se anula la implementación del modelo, las solicitudes de inferencia que se envían a este muestran un error. El objeto del modelo de BigQuery permanece sin cambios, incluidos los metadatos del modelo. Para volver a usar el modelo para la inferencia, debes volver a implementarlo ejecutando la sentencia ALTER MODEL en el modelo y configurando la opción DEPLOY_MODEL en TRUE.

Modelos abiertos implementados

  1. En la consola de Google Cloud , ve a la página BigQuery.

    Ir a BigQuery

  2. Crea un modelo remoto con el editor de SQL:

    CREATE OR REPLACE MODEL
    `PROJECT_ID.DATASET_ID.MODEL_NAME`
    REMOTE WITH CONNECTION {DEFAULT | `PROJECT_ID.REGION.CONNECTION_ID`}
    OPTIONS (
      ENDPOINT = 'https://ENDPOINT_REGION-aiplatform.googleapis.com/v1/projects/ENDPOINT_PROJECT_ID/locations/ENDPOINT_REGION/endpoints/ENDPOINT_ID'
    );

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto
    • DATASET_ID: El ID del conjunto de datos que contendrá el modelo. Este conjunto de datos debe estar en la misma ubicación que la conexión que usas.
    • MODEL_NAME: el nombre del modelo
    • REGION: Es la región que usa la conexión.
    • CONNECTION_ID por el ID de la conexión de BigQuery.

      Puedes obtener este valor viendo los detalles de conexión en la consola de Google Cloud y copiando el valor en la última sección del ID de conexión completamente calificado que se muestra en ID de conexión. Por ejemplo: projects/myproject/locations/connection_location/connections/myconnection.

    • ENDPOINT_REGION: Es la región en la que se implementa el modelo abierto.
    • ENDPOINT_PROJECT_ID: Es el proyecto en el que se implementa el modelo abierto.
    • ENDPOINT_ID: Es el ID del extremo HTTPS que usa el modelo abierto. Puedes obtener el ID del extremo. Para ello, ubica el modelo abierto en la página Predicción en línea y copia el valor del campo ID.

Todos los demás modelos

  1. En la consola de Google Cloud , ve a la página BigQuery.

    Ir a BigQuery

  2. Crea un modelo remoto con el editor de SQL:

    CREATE OR REPLACE MODEL
    `PROJECT_ID.DATASET_ID.MODEL_NAME`
    REMOTE WITH CONNECTION {DEFAULT | `PROJECT_ID.REGION.CONNECTION_ID`}
    OPTIONS (ENDPOINT = 'ENDPOINT');

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto
    • DATASET_ID: El ID del conjunto de datos que contendrá el modelo. Este conjunto de datos debe estar en la misma ubicación que la conexión que usas.
    • MODEL_NAME: el nombre del modelo
    • REGION: Es la región que usa la conexión.
    • CONNECTION_ID por el ID de la conexión de BigQuery.

      Puedes obtener este valor viendo los detalles de conexión en la consola de Google Cloud y copiando el valor en la última sección del ID de conexión completamente calificado que se muestra en ID de conexión. Por ejemplo: projects/myproject/locations/connection_location/connections/myconnection.

    • ENDPOINT: Es el nombre de un modelo de incorporación que se usará. Para obtener más información, consulta ENDPOINT.

      El modelo de Vertex AI que especifiques debe estar disponible en la ubicación en la que crees el modelo remoto. Para obtener más información, consulta Ubicaciones.

Generar incorporaciones de texto

Genera incorporaciones de texto con la función ML.GENERATE_EMBEDDING usando datos de texto de una columna de tabla o una consulta.

Por lo general, usarías un modelo de incorporación de texto para casos de uso de solo texto y un modelo de incorporación multimodal para casos de uso de búsqueda multimodal, en los que las incorporaciones para texto y contenido visual se generan en el mismo espacio semántico.

Texto de Vertex AI

Genera embeddings de texto con un modelo remoto sobre un modelo de embedding de texto de Vertex AI:

SELECT *
FROM ML.GENERATE_EMBEDDING(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  {TABLE PROJECT_ID.DATASET_ID.TABLE_NAME | (CONTENT_QUERY)},
  STRUCT(FLATTEN_JSON AS flatten_json_output,
    TASK_TYPE AS task_type,
    OUTPUT_DIMENSIONALITY AS output_dimensionality)
);

Reemplaza lo siguiente:

  • PROJECT_ID: el ID de tu proyecto
  • DATASET_ID: El ID del conjunto de datos que contiene el modelo.
  • MODEL_NAME: El nombre del modelo remoto sobre un modelo de embedding.
  • TABLE_NAME: el nombre de la tabla que contiene el texto que se incorporará. Esta tabla debe tener una columna llamada content, o puedes usar un alias para usar una columna con nombre diferente.
  • CONTENT_QUERY: una consulta cuyo resultado contiene una columna STRING llamada content.
  • FLATTEN_JSON: un valor BOOL que indica si se debe analizar la incorporación en una columna separada. El valor predeterminado es TRUE.
  • TASK_TYPE: Es un literal STRING que especifica la aplicación descendente prevista para ayudar al modelo a producir incorporaciones de mejor calidad. TASK_TYPE acepta los siguientes valores:
    • RETRIEVAL_QUERY: especifica que el texto dado es una consulta en un parámetro de configuración de búsqueda o recuperación.
    • RETRIEVAL_DOCUMENT: especifica que el texto dado de un documento en un parámetro de configuración de búsqueda o recuperación.

      Cuando se usa este tipo de tarea, es útil incluir el título del documento en la instrucción de búsqueda para mejorar la calidad de la incorporación. El título del documento debe estar en una columna llamada title o con el alias title, por ejemplo:

            SELECT *
            FROM
              ML.GENERATE_EMBEDDING(
                MODEL mydataset.embedding_model,
                (SELECT abstract as content, header as title, publication_number
                FROM mydataset.publications),
                STRUCT(TRUE AS flatten_json_output, 'RETRIEVAL_DOCUMENT' as task_type)
            );
            

      Si especificas la columna de título en la consulta de entrada, se propagará el campo title del cuerpo de la solicitud que se envía al modelo. Si especificas un valor de title cuando usas cualquier otro tipo de tarea, esa entrada se ignora y no tiene ningún efecto en los resultados de la incorporación.

    • SEMANTIC_SIMILARITY: especifica que el texto dado se usará para la similitud textual semántica (STS).
    • CLASSIFICATION: especifica que las incorporaciones se usarán para la clasificación.
    • CLUSTERING: especifica que las incorporaciones se usarán para el agrupamiento en clústeres.
    • QUESTION_ANSWERING: Especifica que los embeddings se usarán para responder preguntas.
    • FACT_VERIFICATION: Especifica que las incorporaciones se usarán para la verificación de datos.
    • CODE_RETRIEVAL_QUERY: Especifica que las incorporaciones se usarán para la recuperación de código.
  • OUTPUT_DIMENSIONALITY: Un valor INT64 que especifica la cantidad de dimensiones que se usarán cuando se generen embedding. Por ejemplo, si especificas 256 AS output_dimensionality, la columna de salida ml_generate_embedding_result contiene 256 embeddings para cada valor de entrada.

    Para los modelos remotos sobre modelos gemini-embedding-001, el valor de OUTPUT_DIMENSIONALITY debe estar en el rango [1, 3072]. El valor predeterminado es 3072. Para los modelos remotos sobre modelos text-embedding o text-multilingual-embedding, el valor de OUTPUT_DIMENSIONALITY debe estar en el rango de [1, 768]. El valor predeterminado es 768.

    Si usas un modelo remoto sobre un modelo text-embedding, la versión del modelo text-embedding debe ser text-embedding-004 o posterior. Si usas un modelo remoto sobre un modelo text-multilingual-embedding, la versión del modelo text-multilingual-embedding debe ser text-multilingual-embedding-002 o posterior.

Ejemplo: Incorpora texto en una tabla

En el siguiente ejemplo, se muestra una solicitud para incorporar la columna content de la tabla text_data:

SELECT *
FROM
  ML.GENERATE_EMBEDDING(
    MODEL `mydataset.embedding_model`,
    TABLE mydataset.text_data,
    STRUCT(TRUE AS flatten_json_output, 'CLASSIFICATION' AS task_type)
  );

Texto abierto

Genera embeddings de texto con un modelo remoto sobre un modelo de embedding abierto:

SELECT *
FROM ML.GENERATE_EMBEDDING(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  {TABLE PROJECT_ID.DATASET_ID.TABLE_NAME | (CONTENT_QUERY)},
  STRUCT(FLATTEN_JSON AS flatten_json_output)
);

Reemplaza lo siguiente:

  • PROJECT_ID: el ID de tu proyecto
  • DATASET_ID: El ID del conjunto de datos que contiene el modelo.
  • MODEL_NAME: El nombre del modelo remoto sobre un modelo de embedding.
  • TABLE_NAME: el nombre de la tabla que contiene el texto que se incorporará. Esta tabla debe tener una columna llamada content, o puedes usar un alias para usar una columna con nombre diferente.
  • CONTENT_QUERY: una consulta cuyo resultado contiene una columna STRING llamada content.
  • FLATTEN_JSON: un valor BOOL que indica si se debe analizar la incorporación en una columna separada. El valor predeterminado es TRUE.

Vertex AI multimodal

Genera embeddings de texto con un modelo remoto sobre un modelo de incorporación multimodal de Vertex AI:

SELECT *
FROM ML.GENERATE_EMBEDDING(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  {TABLE PROJECT_ID.DATASET_ID.TABLE_NAME | (CONTENT_QUERY)},
  STRUCT(FLATTEN_JSON AS flatten_json_output,
  OUTPUT_DIMENSIONALITY AS output_dimensionality)
);

Reemplaza lo siguiente:

  • PROJECT_ID: el ID de tu proyecto
  • DATASET_ID: El ID del conjunto de datos que contiene el modelo.
  • MODEL_NAME: el nombre del modelo remoto sobre un modelo multimodalembedding@001.
  • TABLE_NAME: el nombre de la tabla que contiene el texto que se incorporará. Esta tabla debe tener una columna llamada content, o puedes usar un alias para usar una columna con nombre diferente.
  • CONTENT_QUERY: Una consulta cuyo resultado contiene una columna STRING llamada content.
  • FLATTEN_JSON: Un BOOL que indica si se debe analizar la incorporación en una columna separada. El valor predeterminado es TRUE.
  • OUTPUT_DIMENSIONALITY: Un valor INT64 que especifica la cantidad de dimensiones que se usarán cuando se generen embeddings. Los valores válidos son 128, 256, 512 y 1408. El valor predeterminado es 1408. Por ejemplo, si especificas 256 AS output_dimensionality, la columna de salida ml_generate_embedding_result contiene 256 embeddings para cada valor de entrada.

Ejemplo: Usa embeddings para clasificar la similitud semántica

En el siguiente ejemplo, se incorpora una colección de reseñas de películas y se las ordena por distancia del coseno a la reseña "Esta película fue promedio" con la función VECTOR_SEARCH. Una distancia más pequeña indica una mayor similitud semántica.

Para obtener más información sobre la búsqueda de vectores y el índice de vectores, consulta Introducción a la búsqueda de vectores.

CREATE TEMPORARY TABLE movie_review_embeddings AS (
  SELECT *
  FROM
    ML.GENERATE_EMBEDDING(
      MODEL `bqml_tutorial.embedding_model`,
      (
        SELECT "This movie was fantastic" AS content
        UNION ALL
        SELECT "This was the best movie I've ever seen!!" AS content
        UNION ALL
        SELECT "This movie was just okay..." AS content
        UNION ALL
        SELECT "This movie was terrible." AS content
      ),
      STRUCT(TRUE AS flatten_json_output)
    )
);

WITH average_review_embedding AS (
  SELECT ml_generate_embedding_result
  FROM
    ML.GENERATE_EMBEDDING(
      MODEL `bqml_tutorial.embedding_model`,
      (SELECT "This movie was average" AS content),
      STRUCT(TRUE AS flatten_json_output)
    )
)
SELECT
  base.content AS content,
  distance AS distance_to_average_review
FROM
  VECTOR_SEARCH(
    TABLE movie_review_embeddings,
    "ml_generate_embedding_result",
    (SELECT ml_generate_embedding_result FROM average_review_embedding),
    distance_type=>"COSINE",
    top_k=>-1
  )
ORDER BY distance_to_average_review;

El resultado es el siguiente:

+------------------------------------------+----------------------------+
| content                                  | distance_to_average_review |
+------------------------------------------+----------------------------+
| This movie was just okay...              | 0.062789813467745592       |
| This movie was fantastic                 |  0.18579561313064263       |
| This movie was terrible.                 |  0.35707466240930985       |
| This was the best movie I've ever seen!! |  0.41844932504542975       |
+------------------------------------------+----------------------------+

¿Qué sigue?