Estadísticas internas de LLM: BigQuery y Gemini para análisis de datos estructurados y no estructurados

1. Introducción

Los conjuntos de datos enormes contienen estadísticas valiosas, pero obtener una comprensión significativa puede ser una tarea abrumadora. Las herramientas analíticas tradicionales suelen fallar a la hora de proporcionar explicaciones sutiles, similares a las humanas, que nos ayudan a captar verdaderamente la historia dentro de nuestros datos. Los almacenes de datos contienen cada vez más datos no estructurados, pero no siempre se pudo acceder a ellos para obtener estadísticas. El texto, las imágenes y los videos no estructurados contienen información valiosa para que tu empresa evolucione. Los LLM ofrecen una nueva y poderosa forma de comprender tus datos con explicaciones, análisis de opiniones, detección de objetos y mucho más. Con la aparición de modelos multimodales (y la capacidad de almacenar datos de objetos como imágenes y videos en BigQuery a través de tablas de objetos), integrar LLM potentes como Gemini 1.0 Pro (para análisis basado en texto) y Gemini 1.0 Pro Vision (para análisis de texto, imágenes y videos) con BigQuery puede transformar la forma en que analizas datos.

En este codelab, veremos los siguientes dos métodos para extraer estadísticas de LLM a partir de datos empresariales y escalar esas estadísticas a miles de filas en BigQuery:

Método 1: Invocación remota de modelos

  • Llamar a Gemini 1.0 Pro desde BigQuery con ML.GENERATE_TEXT en la consulta SELECT.
  • Usa este enfoque cuando el modelo ya esté disponible como modelo remoto en BigQuery y desees usarlo de inmediato. Verifica el estado del modelo que quieres usar en la documentación de BigQuery.

Método 2: Implementación de funciones remotas

  • Llamar a una Cloud Function que implementa la llamada a Gemini 1.0 Pro Vision, expuesta como una función remota en BigQuery.
  • Usa este enfoque cuando el modelo que deseas usar no esté disponible listo para usar como modelo remoto o cuando quieras más flexibilidad y personalización en tu caso de uso.

Qué crearás

  • Para el método Remote Model Invocation, compilarás un generador de resúmenes de ubicaciones para el conjunto de datos de libros de archivo de Internet (que está disponible públicamente en BigQuery) invocando el modelo remoto para Gemini 1.0 Pro en la construcción ML.GENERATE_TEXT en BigQuery.

Diagrama de flujo de la invocación remota de modelos

  • En el método de implementación de funciones remotas, compilarás un validador de imágenes para validar imágenes de prueba en función de una imagen de referencia. Para ello, crearás un conjunto de datos que contenga capturas de pantalla de imágenes de prueba en una tabla externa y le pedirás a Gemini 1.0 Pro Vision que lo valide con respecto a la imagen de referencia. Luego, crearás una Cloud Function de Java que implemente la llamada a Gemini Pro Vision y la invocarás como una función remota en BigQuery.

Diagrama de flujo para la implementación de funciones remotas

Nota:

Es posible que haya más modelos de IA generativa de Vertex AI disponibles como modelos remotos en BigQuery. Esto significa que puedes acceder a estos modelos con la construcción ML.GENERATE_TEXT de BigQuery lista para usar. Sin embargo, incluso en el caso de la disponibilidad de modelos remotos, siempre tienes la opción de crear personalizaciones avanzadas para tu caso de uso con Cloud Functions y, luego, acceder a estos modelos como funciones remotas desde BigQuery.

¿Por qué usar BigQuery?

BigQuery es un almacén de datos sin servidores y de múltiples nubes que puede escalar de bytes a petabytes con una sobrecarga operativa mínima y, por lo tanto, es una excelente opción para almacenar datos de entrenamiento de AA. Con el aprendizaje automático de BigQuery (BQML) integrado y las capacidades de análisis, puedes crear predicciones sin código solo con consultas en SQL. Además, puedes acceder a datos de fuentes externas con consultas federadas, lo que elimina la necesidad de tener canalizaciones complejas de ETL.

BigQuery es un almacén de datos en la nube completamente administrado que ayuda a los usuarios a analizar datos estructurados, semiestructurados y no estructurados.

2. Requisitos

  • Un navegador, como Chrome o Firefox.
  • Un proyecto de Google Cloud con facturación habilitada.

3. Antes de comenzar

  1. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
  2. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Obtén información para verificar si la facturación está habilitada en un proyecto .
  3. Usarás Cloud Shell, un entorno de línea de comandos que se ejecuta en Google Cloud y que viene precargado en bq. Haz clic en Activar Cloud Shell en la parte superior de la consola de Google Cloud.

Imagen del botón Activa Cloud Shell

  1. Cuando te conectes a Cloud Shell, usa el siguiente comando para comprobar que ya estés autenticado y que el proyecto esté configurado con tu ID del proyecto:
gcloud auth list
  1. Ejecuta el siguiente comando en Cloud Shell para confirmar que el comando de gcloud conoce tu proyecto.
gcloud config list project
  1. Si tu proyecto no está configurado, usa el siguiente comando para hacerlo:
gcloud config set project <YOUR_PROJECT_ID>
  1. Para habilitar la API, ve a Gemini para Google Cloud Marketplace. También puedes usar el siguiente comando en la terminal de Cloud Shell:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
  1. Asegúrate de que estén habilitadas las siguientes APIs:
  • BigQuery
  • Conexión de BigQuery
  • Cloud Function
  • Cloud Run
  • Vertex AI
  • Cloud Build
  • API de Cloud Storage

La alternativa al uso del comando de gcloud es utilizar la consola mediante este vínculo.

Consulta la documentación para ver los comandos y el uso de gcloud.

4. Crea un conjunto de datos de BigQuery y una conexión externa

Comencemos creando un conjunto de datos y una conexión de recursos de Cloud.

Un conjunto de datos en BigQuery es un contenedor para todas las tablas y objetos de tu aplicación.

Para crear un conjunto de datos, haz lo siguiente:

  1. Ve a la página de BigQuery en la consola de Google Cloud.
  2. En el panel Explorador, selecciona el proyecto en el que deseas crear el conjunto de datos.
  3. Expande la opción Acciones (el ícono de puntos suspensivos verticales) y haz clic en Crear conjunto de datos.

Imagen del menú Acciones y la opción Crear conjunto de datos

  1. Haz clic en Crear conjunto de datos.
  2. Ingresa gemini_bq_fn en el campo ID del conjunto de datos.
  3. Establece tu tipo de ubicación como Multi-region y acepta el valor predeterminado, que es US(multiple regions in United States..
  4. Haz clic en Crear conjunto de datos.
  5. Verifica que el conjunto de datos se cree y aparezca en el ID de tu proyecto en el panel Explorador.

Se requiere una conexión de BigQuery para interactuar con tu Cloud Function. Para crear una función remota, debes crear una conexión de BigQuery. En este codelab, usaremos la conexión de BigLake para acceder al modelo desde BigQuery a través de Cloud Function. Las conexiones de BigLake ayudan a conectar la fuente de datos externa y, al mismo tiempo, conservan el control de acceso y la seguridad detallados de BigQuery, que en nuestro caso es la API de Gemini Pro de Vertex AI.

Para crear la conexión de BigLake, haz lo siguiente:

  1. Haz clic en Agregar en el panel Explorador de la página de BigQuery.

La consola de BigQuery con el botón AGREGAR destacado para agregar una conexión externa

  1. Haz clic en Conexiones a fuentes de datos externas.
  2. En el menú Tipo de conexión, selecciona Modelos remotos de Vertex AI, funciones remotas y BigLake (recurso de Cloud).
  3. En el campo ID de conexión, ingresa el nombre de tu conexión como gemini-bq-conn.
  4. Establece tu tipo de ubicación como Multi-region y acepta el valor predeterminado, que es US(multiple regions in United States..
  5. Haz clic en Crear conexión.
  6. Haz clic en Ir a la conexión y, luego, copia el ID de la cuenta de servicio en el panel Información de la conexión.

Captura de pantalla de la información de conexión

  1. Ve a la página IAM y administración y haz clic en Otorgar acceso.
  2. Pega el ID de la cuenta de servicio en el campo Principios nuevos.
  3. Selecciona el rol Vertex AI user de la lista de roles y, luego, haz clic en Guardar.

Captura de pantalla de Otorga acceso a la cuenta de servicio

Creaste correctamente el conjunto de datos y la conexión con BigQuery. A continuación, completarás los pasos necesarios para la invocación de modelo remoto.

5. Caso de uso núm. 1: Invocación remota de modelos: Configura la invocación remota de modelos

Ahora que creaste tu conjunto de datos y la conexión, vamos a crear un modelo en BigQuery basado en el modelo Gemini Pro de Vertex AI. Al final de este ejercicio, tendrás tu aplicación de LLM en funcionamiento solo con consultas en SQL.

Paso 1: Crea una tabla de BigQuery que contenga los datos de entrada para el modelo remoto

Crea una tabla llamada books en tu conjunto de datos que pueda contener alrededor de 50 registros de la tabla bigquery-public-data.gdelt_internetarchivebooks.1905 en el conjunto de datos de Internet Archive Books que BigQuery debe obtener para uso público.

Para ello, ejecuta la siguiente instrucción de DDL (lenguaje de definición de datos) desde el panel del editor de SQL de BigQuery:

create or replace table gemini_bq_fn.books as (
select *
from
bigquery-public-data.gdelt_internetarchivebooks.1905 limit 50)

Paso 2 : Crea un modelo de BigQuery

Crea un modelo en tu conjunto de datos. Para ello, ejecuta el siguiente DDL desde el panel del editor de SQL de BigQuery:

CREATE MODEL `gemini_bq_fn.gemini_remote_model`
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS(ENDPOINT = 'gemini-pro');

Observa que el modelo se crea con una opción para verlo.

Paso 3 : Prueba tu nueva aplicación de IA generativa

Usa la función ML.GENERATE_TEXT en una consulta SELECT para enviar una solicitud al modelo remoto.

SELECT ml_generate_text_llm_result as Gemini_Response, prompt as Prompt
FROM ML.GENERATE_TEXT(MODEL `gemini_bq_fn.gemini_remote_model`,
 (select 'You are a text summarizer and standardizer. From the following text that contains address locations, standardize and print one standardized, consolidated address. You cannot return empty because you know how to pick up sensible data from the text in this field: ' ||
substring(locations, 0, 200) as prompt
from `gemini_bq_fn.books`),
STRUCT(
 TRUE AS flatten_json_output));

Deberías ver el siguiente resultado:

Resultado de la consulta de ML.GENERATE_TEXT en BigQuery

¡Felicitaciones! Demostraste con éxito cómo usar un modelo remoto (basado en un modelo gemini-pro) con la función ML.GENERATE_TEXT para analizar datos de texto en una tabla de BigQuery.

Ahora probemos otro modelo de Vertex AI con funciones remotas de BigQuery. Digamos que quieres agregar más personalización y flexibilidad a la forma en que puedes usar el modelo de forma remota en BigQuery. Los modelos compatibles se enumeran en la documentación de BigQuery.

6. Caso de uso núm. 2: Implementación de funciones remotas: Configura la implementación de funciones remotas

En este ejercicio, crearás una función en BigQuery basada en la Cloud Function de Java que implementa el modelo de base de Gemini 1.0 Pro Vision. Primero, crearás e implementarás la Cloud Function de Java para comparar imágenes con el modelo de Gemini 1.0 Pro Vision. Luego, crearás la función remota en BigQuery que invoca la Cloud Function implementada. Recuerda que se puede seguir el mismo procedimiento para cualquier ejecución de función remota en BigQuery.

¡Empecemos!

Paso 1: Crea la Cloud Function de Java

Compilarás una Cloud Function de 2a generación en Java para validar imágenes de prueba en comparación con una imagen de referencia. La imagen de referencia se almacena en un conjunto de datos que contiene capturas de pantalla de imágenes de prueba en una tabla externa en BigQuery. Validarás las imágenes con el modelo de Gemini Pro Vision (SDK de Java). Luego, implementarás la Cloud Function de Java en un extremo de REST.

Lleve a cabo los pasos siguientes:

  1. Inicia el editor de Cloud Shell.
  2. Si usas el editor heredado, haz clic en Probar el editor nuevo.
  3. En la barra de estado, haz clic en Cloud Code - Acceder.
  4. Si se te solicita que autorices al editor de Cloud Shell a realizar llamadas a la API de Google Cloud, haz clic en Autorizar. Sigue las indicaciones para acceder a tu Cuenta de Google. Ya te conectaste a Google Cloud.
  5. Si no ves tu proyecto en la barra de estado de Cloud Code, haz clic en Cloud Code - Acceder > Selecciona un proyecto de Google Cloud. Elige el proyecto de Google Cloud en el que deseas crear tus Cloud Functions. El proyecto se carga y se convierte en el proyecto activo en el editor de Cloud Shell.
  6. En la barra de estado de Cloud Code, haz clic en el nombre del proyecto activo. En el menú Selección rápida que aparece, selecciona Nueva aplicación.
  7. En el cuadro de diálogo Create New Application, selecciona Cloud Functions application.

Página emergente para crear una aplicación nueva 1

  1. Selecciona Java: Hello World cuando se te solicite que selecciones una plantilla.

Página emergente 2 de Create New Application

  1. Ingresa Gemini-BQ-Function como el nombre de tu proyecto en la ruta de acceso del proyecto. La estructura del proyecto aparece en una vista nueva del editor de Cloud Shell.

Nueva estructura del proyecto de la aplicación de Cloud Function de Java

  1. Agrega las dependencias necesarias dentro de la etiqueta <dependencies>... </dependencies> o cópialas desde el archivo pom.xml de muestra de muestra.
  2. Cambia el nombre de tu clase de HelloWorld.java a uno más significativo. Digamos GeminiBigQueryFunction.java. Cambia el nombre del paquete según corresponda.
  3. Reemplaza el código del marcador de posición en el archivo GeminiBigQueryFunction.Java por el código de muestra proporcionado en el repositorio de GitHub. Asegúrate de reemplazar la variable <YOUR_PROJECT_ID> por el ID de tu proyecto en el código de muestra.
  4. Ve a la terminal de Cloud Shell. Verifica que estás en el directorio de tu proyecto. De lo contrario, ejecuta el siguiente comando para navegar al directorio del proyecto:
cd Gemini-BQ-Function
  1. Ejecuta la siguiente instrucción para compilar e implementar la Cloud Function:
gcloud functions deploy gemini-bq-fn --gen2 --runtime java17 --trigger-http --entry-point cloudcode.helloworld.GeminiBigQueryFunction --allow-unauthenticated --source .

Reemplaza el punto de entrada en el comando por el punto de entrada de la función. El resultado es una URL de REST en el siguiente formato:

https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-bq-fn
  1. Ejecuta el siguiente comando desde la terminal para probar esta Cloud Function:
gcloud functions call gemini-bq-fn --region=us-central1 --gen2 --data '{"calls":[["https://storage.googleapis.com/img_public_test/image_validator/baseline/1.JPG", "https://storage.googleapis.com/img_public_test/image_validator/test/2.JPG", "PROMPT_ABOUT_THE_IMAGES_TO_GEMINI"]]}'

Respuesta a la instrucción de muestra aleatoria:

Cadena de respuesta JSON de la Cloud Function

Excelente. La función genérica de Cloud Function para la implementación del modelo Gemini Pro Vision está lista. Usemos este extremo directamente en los datos de BigQuery desde una función remota de BigQuery.

Paso 2: Crea una tabla de objetos y una función remota de BigQuery

Requisitos previos

Necesitarás un bucket de Cloud Storage para esta parte del ejercicio. Sigue estos pasos para crear un bucket de Cloud Storage:

  1. Para crear un bucket, ve a la consola de Cloud Storage y haz clic en Crear.
  2. Ingresa demo-bq-gemini-public-image como nombre del bucket y haz clic en Crear.
  3. Desmarca la opción Enforce public access prevention on this bucket. Aunque estás creando este bucket para el acceso público en este ejercicio, te recomendamos que evites el acceso público y otorgues permisos a cuentas de servicio específicas según sea necesario en los casos de uso de tu empresa.
  4. Después de crear el bucket, ve a la pestaña Permisos para ver y cambiar los permisos.
  5. Para agregar principales, haz clic en Otorgar acceso. Especifica un ID de cuenta de servicio para otorgar permisos a una cuenta específica o especifica allUsers para otorgar acceso público a tu bucket.
  6. Selecciona el rol Storage Object Viewer y haz clic en Guardar. Si se te solicita, elige permitir el acceso público.
  7. Ve a la pestaña Objetos y sube imágenes de referencia y de prueba para compararlas. En este codelab, puedes subir los siguientes objetos que están disponibles de manera pública: baseline.JPG, TEST1.JPG y TEST2.JPG.

Crea una tabla de objetos de BigQuery

Crea una tabla de objetos externa desde BigQuery para acceder a los datos no estructurados en el bucket usando la conexión y el conjunto de datos que creaste antes. Para ello, ejecuta la siguiente instrucción de DDL (lenguaje de definición de datos) desde el panel del editor de consultas de BigQuery:

CREATE OR REPLACE EXTERNAL TABLE `gemini_bq_fn.image_validation`
WITH CONNECTION `us.gemini-bq-conn`
OPTIONS(object_metadata="SIMPLE", uris=["gs://demo-bq-gemini-public-image/*.JPG"]);

Verifica que se cree una nueva tabla de objetos llamada image_validation en tu conjunto de datos.

Crea una función remota de BigQuery

Crear una función remota en BigQuery para invocar la Cloud Function de Java que implementa el modelo de Gemini Pro Vision Crea esto en el mismo conjunto de datos. Para ello, ejecuta el siguiente DDL desde el panel del editor de SQL en la consola de BigQuery:

CREATE OR REPLACE FUNCTION `gemini_bq_fn.FN_IMAGE_VALIDATE` (baseline STRING, test STRING, prompt STRING) RETURNS STRING
 REMOTE WITH CONNECTION `us.gemini-bq-conn`
 OPTIONS (
   endpoint = 'https://us-central1-<your project id>.cloudfunctions.net/gemini-bq-fn',
   max_batching_rows = 1
 );

La URL del extremo es la URL de REST que se mostró antes en este ejercicio. Esto crea la función remota en BigQuery. Existen tres parámetros en el DDL anterior. Los primeros dos parámetros son URLs a las imágenes almacenadas en la tabla de objetos creada en el paso anterior. El último parámetro es la instrucción para el modelo (Gemini Pro Vision). Puedes consultar el código de Cloud Functions para Java que se usa para analizar esta firma:

Gson().fromJson(request.getReader(), JsonObject.class);
JsonArray calls_array = requestJson.getAsJsonArray("calls");
JsonArray calls = (JsonArray) calls_array.get(0);
String baseline_url = calls.get(0).toString().replace("\"", "");
String test_url = calls.get(1).toString().replace("\"", "");
String prompt_string = calls.get(2).toString();

Invoca Gemini desde BigQuery

Usa la función remota en una consulta SELECT para probar la función y validar las imágenes según el mensaje.

select gemini_bq_fn.FN_IMAGE_VALIDATE(
'https://storage.googleapis.com/demo-bq-gemini-public-image/Baseline.JPG',
REPLACE(uri, 'gs://', 'https://storage.googleapis.com/') ,
'You are an expert image validator who can respond with JSON result. Find 2 images here. The first one is the reference image. The second image is the test image. Compare the second image to see if the second image is similar to the first in terms of the text present in the image.  Respond ONLY in JSON Format with 3 attributes namely SIMILARITY which is a \"YES\" or \"NO\", SIMILARITY_SCORE which is a percentage and DIFFERENCE_COMMENT which is a string.' ) as IMAGE_VALIDATION_RESULT
from `gemini_bq_fn.image_validation`
where uri like '%TEST1%';  

Prueba la consulta anterior con los archivos de objeto TEST1 y TEST2. Verás un resultado similar al siguiente:

Captura de pantalla del resultado de la función remota de BigQuery

Estas son las imágenes a modo de referencia:

Imagen de referencia

Imagen de referencia del modelo de referencia para el caso de prueba

Imagen de prueba

Imagen de prueba 1 para el caso de prueba

Ten en cuenta que ambas imágenes son similares, ya que tienen la vista de la consola de Cloud de Duet AI, pero el texto de ambas es diferente según lo que genera el modelo en formato JSON.

Con esto, probaste correctamente la implementación de la función remota.

7. Beneficios y casos de uso

Veamos algunos de los beneficios de integrar BigQuery y Gemini para el análisis de datos estructurados y no estructurados.

  • Lleva la IA generativa a tus datos: Ya no tendrás que mover datos, duplicar datos ni aumentar la complejidad. Puedes analizar datos y generar estadísticas dentro del mismo entorno de BigQuery.
  • Estadísticas mejoradas: Las explicaciones en lenguaje natural de Gemini agregan una nueva capa de comprensión a tus datos y puedes lograrlo usando consultas en SQL.
  • Escalabilidad: Esta solución maneja conjuntos de datos grandes y análisis complejos de manera sencilla y con poco código.

Las aplicaciones para esto son muchas. Considera situaciones en finanzas (análisis de tendencias del mercado), venta minorista (opiniones de los clientes), atención médica (resúmenes de informes médicos), etc., en las que tus equipos empresariales y de estadísticas podrían implementarlos con un esfuerzo relativamente bajo, recursos y un lenguaje y una herramienta conocidos de su elección.

8. Limpia

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en esta publicación:

  1. En la consola de Google Cloud, ve a la página Administrar recursos.
  2. En la lista de proyectos, elige el proyecto que deseas borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrarlo.
  4. Si quieres conservar tu proyecto, omite los pasos anteriores y borra la Cloud Function. Para ello, navega a Cloud Functions y, en la lista de funciones, marca la que quieres borrar y haz clic en Borrar.

9. Felicitaciones

Felicitaciones. Con los modelos de Gemini integrados en BigQuery, ya no solo analizarás tus datos, sino que te convertirás en un narrador de datos. Puedes generar los relatos ocultos dentro de tus conjuntos de datos y transformar la manera en que entiendes tus conclusiones. ¡Comienza a experimentar! Aplica esta técnica a tus propios conjuntos de datos y descubre las historias dentro de ellos. Como BigQuery admite datos no estructurados en tablas de objetos ( tablas externas), prueba usar Gemini Pro Vision para crear estadísticas generativas en datos de imágenes. Consulta la documentación de Vertex AI, Funciones remotas de BigQuery y Cloud Functions para obtener una guía más detallada. Este es el repositorio de GitHub para este proyecto. Cuéntanos qué crearás con este aprendizaje.