Informazioni su questo codelab
1. Introduzione
In questo lab imparerai a utilizzare BigQuery Machine Learning per l'inferenza con modelli remoti ( modelli Gemini) per analizzare le immagini dei poster dei film e generare riepiloghi dei film in base ai poster direttamente nel tuo data warehouse BigQuery.
Nella foto sopra: un esempio di immagini delle locandine dei film che analizzerai.
BigQuery è una piattaforma di analisi dei dati completamente gestita e predisposta per l'IA che ti aiuta a massimizzare il valore dei tuoi dati ed è progettata per essere multi-motore, multiformato e multi-cloud. Una delle sue funzionalità principali è BigQuery Machine Learning per l'inferenza, che consente di creare ed eseguire modelli di machine learning (ML) utilizzando query GoogleSQL.
Gemini è una famiglia di modelli di IA generativa sviluppati da Google progettati per casi d'uso multimodali.
Eseguire modelli ML utilizzando query GoogleSQL
In genere, l'esecuzione di ML o IA (intelligenza artificiale) su set di dati di grandi dimensioni richiede una vasta conoscenza della programmazione e dei framework ML. Ciò limita lo sviluppo della soluzione a un piccolo gruppo di esperti all'interno di ogni azienda. Con BigQuery Machine Learning per l'inferenza, gli esperti di SQL possono utilizzare gli strumenti e le competenze SQL esistenti per creare modelli e generare risultati da LLM e API Cloud AI.
Prerequisiti
- Conoscenza di base della console Google Cloud
- L'esperienza con BigQuery è un vantaggio
Cosa imparerai a fare
- Come configurare l'ambiente e l'account per utilizzare le API
- Come creare una connessione a una risorsa cloud in BigQuery
- Come creare un set di dati e una tabella di oggetti in BigQuery per le immagini dei manifesti dei film
- Come creare i modelli Gemini remoti in BigQuery
- Come chiedere al modello Gemini di fornire i riassunti dei film per ogni locandina
- Come generare incorporamenti di testo per il film rappresentato in ogni locandina
- Come utilizzare BigQuery
VECTOR_SEARCH
per abbinare le immagini dei poster dei film a film strettamente correlati nel set di dati
Che cosa ti serve
- Un account Google Cloud e un progetto Google Cloud con la fatturazione abilitata
- Un browser web come Chrome
2. Configurazione e requisiti
Configurazione dell'ambiente a tuo ritmo
- Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.
- Il nome del progetto è il nome visualizzato per i partecipanti al progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google. Puoi sempre aggiornarlo.
- L'ID progetto è univoco per tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). La console Cloud genera automaticamente una stringa univoca; di solito non ti interessa quale sia. Nella maggior parte dei codelab, dovrai fare riferimento al tuo ID progetto (in genere identificato come
PROJECT_ID
). Se l'ID generato non ti piace, puoi generarne un altro casuale. In alternativa, puoi provare il tuo e vedere se è disponibile. Non può essere modificato dopo questo passaggio e rimane invariato per tutta la durata del progetto. - Per tua informazione, esiste un terzo valore, un Numero progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
- Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare le API/risorse Cloud. La partecipazione a questo codelab non ha costi, o quasi. Per arrestare le risorse ed evitare di incorrere in fatturazione al termine di questo tutorial, puoi eliminare le risorse che hai creato o il progetto. I nuovi utenti di Google Cloud sono idonei al programma Prova senza costi di 300$.
Avvia Cloud Shell
Sebbene Google Cloud possa essere utilizzato da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.
Nella console Google Cloud, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:
Dovrebbe richiedere solo pochi istanti per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere qualcosa di simile a questo:
Questa macchina virtuale contiene tutti gli strumenti di sviluppo di cui avrai bisogno. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud, migliorando notevolmente le prestazioni e l'autenticazione di rete. Tutto il lavoro in questo codelab può essere svolto in un browser. Non devi installare nulla.
3. Prima di iniziare
Esistono alcuni passaggi di configurazione per lavorare con i modelli Gemini in BigQuery, tra cui l'abilitazione delle API, la creazione di una connessione alla risorsa Cloud e la concessione all'account di servizio per la connessione alla risorsa Cloud di determinate autorizzazioni. Questi passaggi sono una tantum per progetto e verranno trattati nelle prossime sezioni.
Abilita le API
In Cloud Shell, assicurati che l'ID progetto sia configurato:
gcloud config set project [YOUR-PROJECT-ID]
Imposta la variabile di ambiente PROJECT_ID
:
PROJECT_ID=$(gcloud config get-value project)
Configura la regione predefinita da utilizzare per i modelli Vertex AI. Scopri di più sulle località in cui è disponibile Vertex AI. Nell'esempio utilizziamo la regione us-central1
.
gcloud config set compute/region us-central1
Imposta la variabile di ambiente REGION
:
REGION=$(gcloud config get-value compute/region)
Attiva tutti i servizi necessari:
gcloud services enable bigqueryconnection.googleapis.com \
aiplatform.googleapis.com
Output previsto dopo l'esecuzione di tutti i comandi precedenti:
student@cloudshell:~ (test-project-001-402417)$ gcloud config set project test-project-001-402417 Updated property [core/project]. student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project) Your active configuration is: [cloudshell-14650] student@cloudshell:~ (test-project-001-402417)$ student@cloudshell:~ (test-project-001-402417)$ gcloud services enable bigqueryconnection.googleapis.com \ aiplatform.googleapis.com Operation "operations/acat.p2-4470404856-1f44ebd8-894e-4356-bea7-b84165a57442" finished successfully.
4. Crea una connessione a una risorsa cloud
In questa attività, creerai una connessione alla risorsa Cloud che consente a BigQuery di accedere ai file immagine in Cloud Storage ed effettuare chiamate a Vertex AI.
- Nella console Google Cloud, nel menu di navigazione (
), fai clic su BigQuery.
- Per creare una connessione, fai clic su + AGGIUNGI e poi su Connessioni a origini dati esterne.
- Nell'elenco Tipo di connessione, seleziona Modelli remoti di Vertex AI, funzioni remote e BigLake (risorsa Cloud).
- Nel campo ID connessione, inserisci gemini_conn per la connessione.
- In Tipo di località, seleziona Più regioni e poi, dal menu a discesa, seleziona Più regioni Stati Uniti.
- Utilizza i valori predefiniti per le altre impostazioni.
- Fai clic su Crea connessione.
- Fai clic su VAI A CONNESSIONE.
- Nel riquadro Informazioni sulla connessione, copia l'ID account di servizio in un file di testo per utilizzarlo nell'attività successiva. Vedrai anche che la connessione viene aggiunta nella sezione Connessioni esterne del progetto in BigQuery Explorer.
5. Concedi le autorizzazioni IAM all'account di servizio della connessione
In questa attività, concedi le autorizzazioni IAM dell'account di servizio della connessione della risorsa Cloud, tramite un ruolo, per consentirgli di accedere ai servizi Vertex AI.
- Nella console Google Cloud, nel menu di navigazione, fai clic su IAM e amministrazione.
- Fai clic su Concedi l'accesso.
- Nel campo Nuove entità, inserisci l'ID account di servizio che hai copiato in precedenza.
- Nel campo Seleziona un ruolo, inserisci Vertex AI e seleziona il ruolo Utente Vertex AI.
- Fai clic su Salva. Il risultato è che l'ID account di servizio ora include il ruolo Utente Vertex AI.
6. Crea il set di dati e la tabella degli oggetti in BigQuery per le immagini dei poster dei film
In questa attività, creerai un set di dati per il progetto e una tabella di oggetti al suo interno per archiviare le immagini dei poster.
Il set di dati di immagini di manifesti di film utilizzato in questo tutorial è archiviato in un bucket Google Cloud Storage pubblico: gs://cloud-samples-data/vertex-ai/dataset-management/datasets/classic-movie-posters
Creare un set di dati
Creerai un set di dati per archiviare gli oggetti del database, tra cui tabelle e modelli, utilizzati in questo tutorial.
- Nella console Google Cloud, seleziona il menu di navigazione (
) e poi BigQuery.
- Nel riquadro Explorer, accanto al nome del progetto, seleziona Visualizza azioni (
), quindi Crea set di dati.
- Nel riquadro Crea set di dati, inserisci le seguenti informazioni:
- ID set di dati: gemini_demo
- Tipo di località: seleziona Più regioni
- Più regioni: seleziona US
- Lascia invariati i valori predefiniti degli altri campi.
- Fai clic su Crea set di dati.
Il risultato è che il set di dati gemini_demo
viene creato ed elencato sotto il tuo progetto in BigQuery Explorer.
Creare la tabella degli oggetti
BigQuery non contiene solo dati strutturati, ma può anche accedere ai dati non strutturati (come le immagini dei poster) tramite le tabelle di oggetti.
Creando una tabella di oggetti facendo riferimento a un bucket Cloud Storage, la tabella di oggetti risultante avrà una riga per ogni oggetto del bucket con il relativo percorso di archiviazione e i metadati.
Per creare la tabella degli oggetti, utilizzerai una query SQL.
- Fai clic sul segno + per creare una nuova query SQL.
- Nell'editor di query, incolla la query riportata di seguito.
CREATE OR REPLACE EXTERNAL TABLE
`gemini_demo.movie_posters`
WITH CONNECTION `us.gemini_conn`
OPTIONS (
object_metadata = 'SIMPLE',
uris = ['gs://cloud-samples-data/vertex-ai/dataset-management/datasets/classic-movie-posters/*']
);
- Esegui la query. Il risultato è una tabella di oggetti
movie_posters
aggiunta al set di datigemini_demo
e caricata con ilURI
(la posizione di Cloud Storage) di ogni immagine del poster del film. - In Explorer, fai clic su
movie_posters
ed esamina lo schema e i dettagli. Non esitare a eseguire query sulla tabella per esaminare record specifici.
7. Crea il modello remoto Gemini in BigQuery
Ora che la tabella degli oggetti è stata creata, puoi iniziare a utilizzarla. In questa attività creerai un modello remoto per Gemini 1.5 Flash per renderlo disponibile in BigQuery.
Creare il modello remoto Gemini 1.5 Flash
- Fai clic sul segno + per creare una nuova query SQL.
- Nell'editor di query, incolla la query riportata di seguito ed eseguila.
CREATE OR REPLACE MODEL `gemini_demo.gemini_1_5_flash`
REMOTE WITH CONNECTION `us.gemini_conn`
OPTIONS (endpoint = 'gemini-1.5-flash')
Il risultato è che il modello gemini_1_5_flash
viene creato e visualizzato nel set di dati gemini_demo
, nella sezione Modelli.
- In Explorer, fai clic sul modello
gemini_1_5_flash
ed esamina i dettagli.
8. Chiedi al modello Gemini di fornire i riassunti dei film per ogni poster
In questa attività utilizzerai il modello Gemini remoto che hai appena creato per analizzare le immagini dei manifesti dei film e generare i riepiloghi di ciascun film.
Puoi inviare richieste al modello utilizzando la funzione ML.GENERATE_TEXT
, facendo riferimento al modello nei parametri.
Analizzare le immagini con il modello Gemini 1.5 Flash
- Crea ed esegui una nuova query con la seguente istruzione SQL:
CREATE OR REPLACE TABLE
`gemini_demo.movie_posters_results` AS (
SELECT
uri,
ml_generate_text_llm_result
FROM
ML.GENERATE_TEXT( MODEL `gemini_demo.gemini_1_5_flash`,
TABLE `gemini_demo.movie_posters`,
STRUCT( 0.2 AS temperature,
'For the movie represented by this poster, what is the movie title and year of release? Answer in JSON format with two keys: title, year. title should be string, year should be integer. Do not use JSON decorators.' AS PROMPT,
TRUE AS FLATTEN_JSON_OUTPUT)));
Quando viene eseguita la query, BigQuery richiede al modello Gemini ogni riga della tabella degli oggetti, combinando l'immagine con il prompt statico specificato. Il risultato è la creazione della tabella movie_posters_results
.
- Ora vediamo i risultati. Crea ed esegui una nuova query con la seguente istruzione SQL:
SELECT * FROM `gemini_demo.movie_posters_results`
Il risultato è costituito da righe per ogni poster del film con URI
(la posizione di Cloud Storage dell'immagine del poster del film) e un risultato JSON che include il titolo del film e l'anno di uscita del film dal modello Gemini 1.5 Flash.
Puoi recuperare questi risultati in un formato più leggibile utilizzando la query successiva. Questa query utilizza SQL per estrarre il titolo del film e l'anno di uscita da queste risposte in nuove colonne.
- Crea ed esegui una nuova query con la seguente istruzione SQL:
CREATE OR REPLACE TABLE
`gemini_demo.movie_posters_results_formatted` AS (
SELECT
uri,
JSON_VALUE(ml_generate_text_llm_result, "$.title") AS title,
JSON_VALUE(ml_generate_text_llm_result, "$.year") AS year
FROM
`gemini_demo.movie_posters_results` results )
Il risultato è la creazione della tabella movie_posters_result_formatted
.
- Puoi eseguire una query sulla tabella con la query riportata di seguito per visualizzare le righe create.
SELECT * FROM `gemini_demo.movie_posters_results_formatted`
Nota che i risultati della colonna URI
rimangono invariati, ma il JSON viene ora convertito nelle colonne title
e year
per ogni riga.
Chiedere al modello Gemini 1.5 Flash di fornire i riepiloghi dei film
E se volessi maggiori informazioni su ciascuno di questi film, ad esempio un riepilogo testuale di ciascuno? Questo caso d'uso per la generazione di contenuti è perfetto per un modello LLM come Gemini 1.5 Flash.
- Puoi utilizzare Gemini 1.5 Flash per fornire i riepiloghi dei film per ogni poster eseguendo la query riportata di seguito:
SELECT
uri,
title,
year,
prompt,
ml_generate_text_llm_result
FROM
ML.GENERATE_TEXT( MODEL `gemini_demo.gemini_1_5_flash`,
(
SELECT
CONCAT('Provide a short summary of movie titled ',title, ' from the year ',year,'.') AS prompt,
uri,
title,
year
FROM
`gemini_demo.movie_posters_results_formatted`
LIMIT
20 ),
STRUCT(0.2 AS temperature,
TRUE AS FLATTEN_JSON_OUTPUT));
Tieni presente il campo ml_generate_text_llm_result
dei risultati, che include un breve riepilogo del film.
9. Generare rappresentazioni distribuite di testo utilizzando un modello remoto
Ora puoi unire i dati strutturati che hai creato con altri dati strutturati nel tuo data warehouse. Il set di dati pubblico di IMDb disponibile in BigQuery contiene una vasta quantità di informazioni sui film, incluse le valutazioni degli spettatori e alcune recensioni degli utenti in formato libero di esempio. Questi dati possono aiutarti ad approfondire l'analisi dei poster dei film e a capire come sono stati percepiti.
Per unire i dati, è necessaria una chiave. In questo caso, i titoli dei film generati dal modello Gemini potrebbero non corrispondere perfettamente a quelli del set di dati di IMDB.
In questa attività genererai embedding di testo dei titoli e degli anni dei film di entrambi i set di dati, quindi utilizzerai la distanza tra questi embedding per unire il titolo IMDB più simile ai titoli dei poster dei film del set di dati appena creato.
Crea il modello remoto
Per generare gli incorporamenti di testo, devi creare un nuovo modello remoto che punti all'endpoint text-multilingual-embedding-002.
- Crea ed esegui una nuova query con la seguente istruzione SQL:
CREATE OR REPLACE MODEL `gemini_demo.text_embedding`
REMOTE WITH CONNECTION `us.gemini_conn`
OPTIONS (endpoint = 'text-multilingual-embedding-002')
Il risultato è che il modello text_embedding
viene creato e visualizzato nello spazio di esplorazione sotto il set di dati gemini_demo
.
Genera incorporamenti di testo per il titolo e l'anno associati ai poster
Ora utilizzerai questo modello remoto con la funzione ML.GENERATE_EMBEDDING
per creare un embedding per ogni titolo e anno del poster del film.
- Crea ed esegui una nuova query con la seguente istruzione SQL:
CREATE OR REPLACE TABLE
`gemini_demo.movie_posters_results_embeddings` AS (
SELECT
*
FROM
ML.GENERATE_EMBEDDING(
MODEL `gemini_demo.text_embedding`,
(
SELECT
CONCAT('The movie titled ', title, ' from the year ', year,'.') AS content,
title,
year,
uri
FROM
`gemini_demo.movie_posters_results_formatted` ),
STRUCT(TRUE AS flatten_json_output)));
Il risultato è la creazione della tabella movie_poster_results_embeddings
contenente gli embedding per i contenuti di testo concatenati per ogni riga della tabella gemini_demo.movie_posters_results_formatted
.
- Puoi visualizzare i risultati della query utilizzando la nuova query riportata di seguito:
SELECT * FROM `gemini_demo.movie_posters_results_embeddings`
Qui puoi vedere gli embedding (vettori rappresentati da numeri) per ogni film generato dal modello.
Generare incorporamenti di testo per un sottoinsieme del set di dati IMDB
Creerai una nuova visualizzazione dei dati di un set di dati pubblico di IMDB contenente solo i film usciti prima del 1935 (il periodo di tempo noto dei film dalle immagini dei poster).
- Crea ed esegui una nuova query con la seguente istruzione SQL:
CREATE OR REPLACE VIEW
`gemini_demo.imdb_movies` AS (
WITH
reviews AS (
SELECT
reviews.movie_id AS movie_id,
title.primary_title AS title,
title.start_year AS year,
reviews.review AS review
FROM
`bigquery-public-data.imdb.reviews` reviews
LEFT JOIN
`bigquery-public-data.imdb.title_basics` title
ON
reviews.movie_id = title.tconst)
SELECT
DISTINCT(movie_id),
title,
year
FROM
reviews
WHERE
year < 1935)
Il risultato è una nuova vista contenente un elenco di ID, titoli e anni di uscita distinti dei film della tabella bigquery-public-data.imdb.reviews
per tutti i film del set di dati usciti prima del 1935.
- Ora creerai gli embedding per il sottoinsieme di film di IMDb utilizzando una procedura simile a quella della sezione precedente. Crea ed esegui una nuova query con la seguente istruzione SQL:
CREATE OR REPLACE TABLE
`gemini_demo.imdb_movies_embeddings` AS (
SELECT
*
FROM
ML.GENERATE_EMBEDDING( MODEL `gemini_demo.text_embedding`,
(
SELECT
CONCAT('The movie titled ', title, ' from the year ', year,'.') AS content,
title,
year,
movie_id
FROM
`gemini_demo.imdb_movies` ),
STRUCT(TRUE AS flatten_json_output) )
WHERE
ml_generate_embedding_status = '' );
Il risultato della query è una tabella che contiene gli embedding per i contenuti di testo della tabella gemini_demo.imdb_movies
.
Abbinare le immagini dei poster dei film a IMDB movie_id
utilizzando BigQuery VECTOR_SEARCH
Ora puoi unire le due tabelle utilizzando la funzione VECTOR_SEARCH
.
- Crea ed esegui una nuova query con la seguente istruzione SQL:
SELECT
query.uri AS poster_uri,
query.title AS poster_title,
query.year AS poster_year,
base.title AS imdb_title,
base.year AS imdb_year,
base.movie_id AS imdb_movie_id,
distance
FROM
VECTOR_SEARCH( TABLE `gemini_demo.imdb_movies_embeddings`,
'ml_generate_embedding_result',
TABLE `gemini_demo.movie_posters_results_embeddings`,
'ml_generate_embedding_result',
top_k => 1,
distance_type => 'COSINE');
La query utilizza la funzione VECTOR_SEARCH
per trovare il vicino più prossimo nella tabella gemini_demo.imdb_movies_embeddings
per ogni riga della tabella gemini_demo.movie_posters_results_embeddings
. Il vicino più prossimo viene trovato utilizzando la metrica della distanza del coseno, che determina la somiglianza tra due incorporamenti.
Questa query può essere utilizzata per trovare il film più simile nel set di dati di IMDB per ciascuno dei film identificati da Gemini 1.5 Flash nei manifesti dei film. Ad esempio, potresti utilizzare questa query per trovare la corrispondenza più simile per il film "Au Secours!" nel set di dati pubblico di IMDb, che fa riferimento a questo film con il titolo in inglese "Help!".
- Crea ed esegui una nuova query per unire alcune informazioni aggiuntive sulle valutazioni dei film fornite nel set di dati pubblico di IMDB:
SELECT
query.uri AS poster_uri,
query.title AS poster_title,
query.year AS poster_year,
base.title AS imdb_title,
base.year AS imdb_year,
base.movie_id AS imdb_movie_id,
distance,
imdb.average_rating,
imdb.num_votes
FROM
VECTOR_SEARCH( TABLE `gemini_demo.imdb_movies_embeddings`,
'ml_generate_embedding_result',
TABLE `gemini_demo.movie_posters_results_embeddings`,
'ml_generate_embedding_result',
top_k => 1,
distance_type => 'COSINE') DATA
LEFT JOIN
`bigquery-public-data.imdb.title_ratings` imdb
ON
base.movie_id = imdb.tconst
ORDER BY
imdb.average_rating DESC
Questa query è simile alla query precedente. Continua a utilizzare rappresentazioni numeriche speciali chiamate incorporamenti vettoriali per trovare film simili a un determinato poster. Tuttavia, unisce anche la valutazione media e il numero di voti per ogni film del vicino più simile da una tabella separata del set di dati pubblico di IMDb.
10. Complimenti
Complimenti per aver completato il codelab. Hai creato una tabella di oggetti per le immagini dei poster in BigQuery, hai creato un modello Gemini remoto, hai utilizzato il modello per chiedere al modello Gemini di analizzare le immagini e hai fornito i riepiloghi dei film, hai generato embedding di testo per i titoli dei film e hai utilizzato questi embedding per abbinare le immagini dei poster dei film al titolo del film correlato nel set di dati IMDB.
Argomenti trattati
- Come configurare l'ambiente e l'account per utilizzare le API
- Come creare una connessione a una risorsa cloud in BigQuery
- Come creare un set di dati e una tabella di oggetti in BigQuery per le immagini dei manifesti dei film
- Come creare i modelli Gemini remoti in BigQuery
- Come chiedere al modello Gemini di fornire i riassunti dei film per ogni locandina
- Come generare incorporamenti di testo per il film rappresentato in ogni locandina
- Come utilizzare BigQuery
VECTOR_SEARCH
per abbinare le immagini dei poster dei film a film strettamente correlati nel set di dati
Passaggi successivi / Scopri di più