Genera texto con un modelo text-bison y la función ML.GENERATE_TEXT
En este instructivo, se muestra cómo crear un modelo remoto que se basa en el modelo grande de lenguaje text-bison@002
y, luego, usar ese modelo junto con la función ML.GENERATE_TEXT
para realizar varias tareas de generación de texto. En este instructivo, se usa la tabla pública bigquery-public-data.imdb.reviews
.
Permisos necesarios
- Para crear el conjunto de datos, necesitas el permiso
bigquery.datasets.create
de Identity and Access Management (IAM). Para crear el recurso de conexión, necesitas los siguientes permisos de IAM:
bigquery.connections.create
bigquery.connections.get
Para otorgar permisos a la cuenta de servicio de la conexión, necesitas el siguiente permiso:
resourcemanager.projects.setIamPolicy
Para crear el modelo, necesitas los siguientes permisos:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.connections.delegate
Para ejecutar inferencias, necesitas los siguientes permisos:
bigquery.models.getData
bigquery.jobs.create
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
- BigQuery ML: You incur costs for the data that you process in BigQuery.
- Vertex AI: You incur costs for calls to the Vertex AI service that's represented by the remote model.
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Para obtener más información sobre los precios de BigQuery, consulta Precios de BigQuery en la documentación de BigQuery.
Para obtener más información sobre los precios de Vertex AI, consulta la página Precios de Vertex AI.
Antes de comenzar
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.
Crea un conjunto de datos
Crea un conjunto de datos de BigQuery para almacenar tu modelo de AA:
En la consola de Google Cloud, ve a la página de BigQuery.
En el panel Explorador, haz clic en el nombre de tu proyecto.
Haz clic en
Ver acciones > Crear conjunto de datos.En la página Crear conjunto de datos, haz lo siguiente:
En ID del conjunto de datos, ingresa
bqml_tutorial
.En Tipo de ubicación, selecciona Multirregión y, luego, EE.UU. (varias regiones en Estados Unidos).
Los conjuntos de datos públicos se almacenan en la multirregión
US
. Para que sea más simple, almacena tu conjunto de datos en la misma ubicación.Deja la configuración predeterminada restante como está y haz clic en Crear conjunto de datos.
Crear una conexión
Crea una conexión de recurso de Cloud 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 opciones siguientes:
Console
Ve a la página de BigQuery.
Para crear una conexión, haz clic en
Agregar y, luego, en Conexiones a fuentes de datos externas.En la lista Tipo de conexión, selecciona Modelos remotos de Vertex AI, funciones remotas y BigLake (Cloud Resource).
En el campo ID de conexión, escribe un nombre para tu conexión.
Haz clic en Crear conexión (Create connection).
Haz clic en Ir a la conexión.
En el panel Información de conexión, copia el ID de la cuenta de servicio para usarlo en un paso posterior.
bq
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ónPROJECT_ID
: El ID del 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...
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
Agrega la siguiente sección a tu archivo main.tf
.
## This creates a cloud resource connection. ## Note: The cloud resource nested object has only one output only field - serviceAccountId. resource "google_bigquery_connection" "connection" { connection_id = "CONNECTION_ID" project = "PROJECT_ID" location = "REGION" cloud_resource {} }
CONNECTION_ID
: Es un ID para tu conexión.PROJECT_ID
: El ID del proyecto de Google Cloud.REGION
: tu región de conexión
Otorga permisos a la cuenta de servicio de las conexiones
Otorga a la cuenta de servicio de la conexión el rol de usuario de Vertex AI. Debes otorgar este rol en el mismo proyecto que creaste o seleccionaste en la sección Antes de comenzar. Si otorgas el rol en un proyecto diferente, se produce el error bqcx-1234567890-xxxx@gcp-sa-bigquery-condel.iam.gserviceaccount.com does not have the permission to access resource
.
Para otorgar el rol, sigue estos pasos:
Ir a la página IAM y administración
Haz clic en
Otorgar acceso.En el campo Principales nuevas, escribe el ID de la cuenta de servicio que copiaste antes.
En el campo Selecciona un rol, elige Vertex AI y, luego, selecciona Rol del usuario de Vertex AI.
Haz clic en Guardar.
Crea el modelo remoto
Crea un modelo remoto que represente un modelo grande de lenguaje (LLM) de Vertex AI alojado:
SQL
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, ejecuta la siguiente declaración:
CREATE OR REPLACE MODEL `bqml_tutorial.llm_model` REMOTE WITH CONNECTION `LOCATION.CONNECTION_ID` OPTIONS (ENDPOINT = 'text-bison@002');
Reemplaza lo siguiente:
LOCATION
: la ubicación de la conexiónCONNECTION_ID
por el ID de la conexión de BigQueryCuando ves los detalles de conexión en la consola de Google Cloud, este es el valor en la última sección del ID de conexión completamente calificado que se muestra en Conexión ID, por ejemplo,
projects/myproject/locations/connection_location/connections/myconnection
.
La consulta tarda varios segundos en completarse, después de eso, el modelo
llm_model
aparece en el conjunto de datosbqml_tutorial
en el panel Explorador. Debido a que la consulta usa una declaraciónCREATE MODEL
para crear un modelo, no hay resultados de consultas.
BigQuery DataFrames
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames en la guía de inicio rápido de BigQuery con BigQuery DataFrames. Para obtener más información, consulta la documentación de referencia de BigQuery DataFrames.
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 un entorno de desarrollo local.
Realiza la extracción de palabras clave
Realiza la extracción de palabras clave en reseñas de películas de IMDB con el modelo remoto y la función ML.GENERATE_TEXT
:
SQL
En la consola de Google Cloud, ve a la página de BigQuery.
En el Editor de consultas, ingresa la siguiente declaración para realizar la extracción de palabras clave en cinco reseñas de películas:
SELECT ml_generate_text_result['predictions'][0]['content'] AS generated_text, ml_generate_text_result['predictions'][0]['safetyAttributes'] AS safety_attributes, * EXCEPT (ml_generate_text_result) FROM ML.GENERATE_TEXT( MODEL `bqml_tutorial.llm_model`, ( SELECT CONCAT('Extract the key words from the text below: ', review) AS prompt, * FROM `bigquery-public-data.imdb.reviews` LIMIT 5 ), STRUCT( 0.2 AS temperature, 100 AS max_output_tokens));
El resultado es similar al siguiente, con las columnas no generadas que se omiten para mayor claridad:
+----------------------------------------+---------------------------------------------+-------------------------+----------------------------+-----+ | generated_text | safety_attributes | ml_generate_text_status | prompt | ... | +----------------------------------------+---------------------------------------------+-------------------------+----------------------------+-----+ | " Keywords:\n- British Airways\n- | {"blocked":false,"categories": | | Extract the key words from | | | acting\n- story\n- kid\n- switch off" | ["Death, Harm & Tragedy","Derogatory", | | the text below: I had to | | | | "Finance","Health","Insult", | | see this on the British | | | | "Profanity","Religion & Belief", | | Airways plane. It was | | | | "Sexual","Toxic"] | | terribly bad acting and | | | | "safetyRatings":[{"category": | | a dumb story. Not even | | | | "Dangerous Content","probabilityScore"... | | a kid would enjoy this... | | +----------------------------------------+---------------------------------------------+-------------------------+----------------------------+-----+ | " - Family movie\n- ITV station\n- THE | {"blocked":false,"categories": | | Extract the key words from | | | REAL HOWARD SPITZ\n- Roald Dahl\n- | ["Death, Harm & Tragedy","Derogatory", | | the text below: This is | | | DOCTOR WHO\n- Pulp fiction\n- Child | "Health","Illicit Drugs","Insult", | | a family movie that was | | | abuse\n- KINDERGARTEN COP\n- PC\n- | "Legal","Profanity","Public Safety", | | broadcast on my local | | | Children's author\n- Vadim Jean\n- | "Sexual","Toxic","Violent"], | | ITV station at 1.00 am a | | | Haphazard\n- Kelsey Grammar\n- | "safetyRatings":[{"category": | | couple of nights ago. | | | Dead pan\n- Ridiculous camera angles" | "Dangerous Content","probabilityScore"... | | This might be a strange... | | +----------------------------------------+---------------------------------------------+-------------------------+----------------------------+-----+
Los resultados incluyen las siguientes columnas:
generated_text
: es el texto generado.safety_attributes
: los atributos de seguridad, junto con información sobre si el contenido está bloqueado debido a una de las categorías de bloqueo. Para obtener más información sobre los atributos de seguridad, consulta la API de Vertex PaLM.ml_generate_text_status
: el estado de la respuesta de la API para la fila correspondiente. Si la operación se realizó correctamente, este valor estará vacío.prompt
: el mensaje que se usa para el análisis de opiniones.- Todas las columnas de la tabla
bigquery-public-data.imdb.reviews
.
Opcional: En lugar de analizar manualmente el JSON que muestra la función, como lo hiciste en el paso anterior, usa el argumento
flatten_json_output
para mostrar el texto generado y los atributos de seguridad en columnas separadas.En el editor de consultas, ejecuta la siguiente declaración:
SELECT * FROM ML.GENERATE_TEXT( MODEL `bqml_tutorial.llm_model`, ( SELECT CONCAT('Extract the key words from the text below: ', review) AS prompt, * FROM `bigquery-public-data.imdb.reviews` LIMIT 5 ), STRUCT( 0.2 AS temperature, 100 AS max_output_tokens, TRUE AS flatten_json_output));
El resultado es similar al siguiente, con las columnas no generadas que se omiten para mayor claridad:
+----------------------------------------+---------------------------------------------+-------------------------+----------------------------+-----+ | ml_generate_text_llm_result | ml_generate_text_rai_result | ml_generate_text_status | prompt | ... | +----------------------------------------+---------------------------------------------+-------------------------+----------------------------+-----+ | Keywords: | {"blocked":false,"categories": | | Extract the key words from | | | - British Airways | ["Death, Harm & Tragedy","Derogatory", | | the text below: I had to | | | - acting | "Finance","Health","Insult", | | see this on the British | | | - story | "Profanity","Religion & Belief", | | Airways plane. It was | | | - kid | "Sexual","Toxic"] | | terribly bad acting and | | | - switch off | "safetyRatings":[{"category": | | a dumb story. Not even | | | | "Dangerous Content","probabilityScore"... | | a kid would enjoy this... | | +----------------------------------------+---------------------------------------------+-------------------------+----------------------------+-----+ | - Family movie | {"blocked":false,"categories": | | Extract the key words from | | | - ITV station | ["Death, Harm & Tragedy","Derogatory", | | the text below: This is | | | - THE REAL HOWARD SPITZ | "Health","Illicit Drugs","Insult", | | a family movie that was | | | - Roald Dahl | "Legal","Profanity","Public Safety", | | broadcast on my local | | | - DOCTOR WHO | "Sexual","Toxic","Violent"], | | ITV station at 1.00 am a | | | - Pulp Fiction | "safetyRatings":[{"category": | | couple of nights ago. | | | - ... | "Dangerous Content","probabilityScore"... | | This might be a strange... | | +----------------------------------------+---------------------------------------------+-------------------------+----------------------------+-----+
Los resultados incluyen las siguientes columnas:
ml_generate_text_llm_result
: es el texto generado.ml_generate_text_rai_result
: los atributos de seguridad, junto con información sobre si el contenido está bloqueado debido a una de las categorías de bloqueo. Para obtener más información sobre los atributos de seguridad, consulta la API de Vertex PaLM.ml_generate_text_status
: el estado de la respuesta de la API para la fila correspondiente. Si la operación se realizó correctamente, este valor estará vacío.prompt
: el mensaje que se usa para la extracción de palabras clave.- Todas las columnas de la tabla
bigquery-public-data.imdb.reviews
.
BigQuery DataFrames
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames en la guía de inicio rápido de BigQuery con BigQuery DataFrames. Para obtener más información, consulta la documentación de referencia de BigQuery DataFrames.
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 un entorno de desarrollo local.
Usa la función predict
para ejecutar el modelo remoto:
El resultado es similar al siguiente:
Realiza análisis de opiniones
Realiza análisis de opiniones en reseñas de películas de IMDB con el modelo remoto y la función ML.GENERATE_TEXT
:
SQL
En la consola de Google Cloud, ve a la página de BigQuery.
En el Editor de consultas, ejecuta la siguiente declaración para realizar un análisis de opiniones en cinco reseñas de películas:
SELECT ml_generate_text_result['predictions'][0]['content'] AS generated_text, ml_generate_text_result['predictions'][0]['safetyAttributes'] AS safety_attributes, * EXCEPT (ml_generate_text_result) FROM ML.GENERATE_TEXT( MODEL `bqml_tutorial.llm_model`, ( SELECT CONCAT( 'perform sentiment analysis on the following text, return one the following categories: positive, negative: ', review) AS prompt, * FROM `bigquery-public-data.imdb.reviews` LIMIT 5 ), STRUCT( 0.2 AS temperature, 100 AS max_output_tokens));
El resultado es similar al siguiente, con las columnas no generadas que se omiten para mayor claridad:
+----------------+---------------------------------------------+-------------------------+----------------------------+-----+ | generated_text | safety_attributes | ml_generate_text_status | prompt | ... | +----------------+---------------------------------------------+-------------------------+----------------------------+-----+ | "negative" | {"blocked":false,"categories": | | perform sentiment analysis | | | | ["Death, Harm & Tragedy","Derogatory", | | on the following text, | | | | "Finance","Health","Insult", | | return one the following | | | | "Profanity","Religion & Belief", | | categories: positive, | | | | "Sexual","Toxic"] | | negative: I had to see | | | | "safetyRatings":[{"category": | | this on the British | | | | "Dangerous Content","probabilityScore"... | | Airways plane. It was... | | +----------------+---------------------------------------------+-------------------------+----------------------------+-----+ | "negative" | {"blocked":false,"categories": | | perform sentiment analysis | | | | ["Death, Harm & Tragedy","Derogatory", | | on the following text, | | | | "Health","Illicit Drugs","Insult", | | return one the following | | | | "Legal","Profanity","Public Safety", | | categories: positive, | | | | "Sexual","Toxic","Violent"], | | negative: This is a family | | | | "safetyRatings":[{"category": | | movie that was broadcast | | | | "Dangerous Content","probabilityScore"... | | on my local ITV station... | | +----------------+---------------------------------------------+-------------------------+----------------------------+-----+
Los resultados incluyen las mismas columnas documentadas para Realizar la extracción de palabras clave.
BigQuery DataFrames
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames en la guía de inicio rápido de BigQuery con BigQuery DataFrames. Para obtener más información, consulta la documentación de referencia de BigQuery DataFrames.
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 un entorno de desarrollo local.
Usa la función predict
para ejecutar el modelo remoto:
El resultado es similar al siguiente:
Limpia
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.