1. Introduzione
In questo lab imparerai a utilizzare BigQuery Machine Learning per l'inferenza con modelli remoti ( modelli Gemini) per analizzare le immagini delle locandine dei film e generare riepiloghi dei film in base alle locandine direttamente nel data warehouse BigQuery.

Nella foto sopra: un campione delle immagini dei poster di film che analizzerai.
BigQuery è una piattaforma di analisi dei dati completamente gestita e predisposta per l'AI che ti aiuta a massimizzare il valore dei tuoi dati ed è progettata per essere multi-motore, multiformato e multi-cloud. Una delle sue funzionalità chiave è 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 AI generativa sviluppati da Google progettati per casi d'uso multimodali.
Esecuzione di modelli ML utilizzando query GoogleSQL
In genere, l'esecuzione di ML o intelligenza artificiale (AI) su grandi set di dati richiede una programmazione estesa e la conoscenza dei framework ML. In questo modo, lo sviluppo di soluzioni è limitato a un piccolo gruppo di specialisti all'interno di ogni azienda. Con BigQuery Machine Learning per l'inferenza, gli esperti di SQL possono utilizzare strumenti e competenze SQL esistenti per creare modelli e generare risultati da LLM e API Cloud AI.
Prerequisiti
- Una 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 alle risorse Cloud in BigQuery
- Come creare un set di dati e una tabella di oggetti in BigQuery per le immagini delle locandine dei film
- Come creare i modelli remoti Gemini in BigQuery
- Come chiedere al modello Gemini di fornire riepiloghi dei film per ogni locandina
- Come generare embedding di testo per il film rappresentato in ogni locandina
- Come utilizzare BigQuery
VECTOR_SEARCHper 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 autonomo
- 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 a questo progetto. È una stringa di caratteri non utilizzata dalle API di Google. Puoi sempre aggiornarlo.
- L'ID progetto è univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo l'impostazione). La console Cloud genera automaticamente una stringa univoca, di solito non ti interessa di cosa si tratta. Nella maggior parte dei codelab, dovrai fare riferimento all'ID progetto (in genere identificato come
PROJECT_ID). Se l'ID generato non ti piace, puoi generarne un altro casuale. In alternativa, puoi provare a crearne uno e vedere se è disponibile. Non può essere modificato dopo questo passaggio e rimane per tutta la durata del progetto. - Per tua informazione, esiste un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
- Successivamente, devi abilitare la fatturazione in Cloud Console per utilizzare le risorse/API Cloud. Completare questo codelab non costa molto, se non nulla. Per arrestare le risorse ed evitare addebiti oltre a quelli previsti in questo tutorial, puoi eliminare le risorse che hai creato o il progetto. I nuovi utenti di Google Cloud possono beneficiare del programma prova senza costi di 300$.
Avvia Cloud Shell
Sebbene Google Cloud possa essere gestito 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:

Bastano pochi istanti per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere un risultato simile a questo:

Questa macchina virtuale è caricata con tutti gli strumenti per sviluppatori 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 della rete. Tutto il lavoro in questo codelab può essere svolto all'interno di un browser. Non devi installare nulla.
3. Prima di iniziare
Per lavorare con i modelli Gemini in BigQuery, devi eseguire alcuni passaggi di configurazione, tra cui l'attivazione delle API, la creazione di una connessione alle risorse Cloud e la concessione di determinate autorizzazioni all'account di servizio per la connessione alle risorse Cloud. Questi passaggi vengono eseguiti una sola volta 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à disponibili per Vertex AI. Nell'esempio viene utilizzata 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 risorsa Cloud
In questa attività, creerai una connessione alle risorse 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.
- Per Tipo di località, seleziona Più regioni e poi seleziona Stati Uniti dal menu a discesa.
- Utilizza i valori predefiniti per le altre impostazioni.

- Fai clic su Crea connessione.
- Fai clic su VAI ALLA CONNESSIONE.
- Nel riquadro Informazioni connessione, copia l'ID dell'account di servizio in un file di testo da utilizzare nell'attività successiva. Vedrai anche che la connessione viene aggiunta alla sezione Connessioni esterne del progetto in BigQuery Explorer.
5. Concedi le autorizzazioni IAM al service account della connessione
In questa attività, concedi le autorizzazioni IAM del service account della connessione alla risorsa cloud, tramite un ruolo, per consentirgli di accedere ai servizi Vertex AI.
- Nella console Google Cloud, fai clic su IAM e amministrazione nel menu di navigazione.
- Fai clic su Concedi l'accesso.
- Nel campo Nuove entità, inserisci l'ID del service account che hai copiato in precedenza.
- Nel campo Seleziona un ruolo, inserisci Vertex AI e poi seleziona il ruolo Utente Vertex AI.

- Fai clic su Salva. Il risultato è che l'ID service account 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 delle locandine.
Il set di dati delle immagini dei poster dei 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
Crea un set di dati per archiviare gli oggetti di 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 seleziona 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
- Multi-regione: seleziona US
- Lascia invariati i valori predefiniti degli altri campi.

- Fai clic su Crea set di dati.
Il risultato è la creazione del set di dati gemini_demo, che viene elencato sotto il tuo progetto in BigQuery Explorer.
Creare la tabella degli oggetti
BigQuery contiene non solo dati strutturati, ma può anche accedere a dati non strutturati (come le immagini dei poster) tramite le tabelle degli oggetti.
Crei una tabella di oggetti puntando a un bucket Cloud Storage e la tabella di oggetti risultante ha 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 su + per creare una nuova query SQL.
- Nell'editor di query, incolla la query seguente.
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 degli oggetti
movie_postersaggiunta al set di datigemini_demoe caricata conURI(la posizione di Cloud Storage) di ogni immagine del poster del film. - In Explorer, fai clic su
movie_postersed 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.
Crea il modello remoto Gemini 1.5 Flash
- Fai clic su + 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 è la creazione del modello gemini_1_5_flash, che viene aggiunto al set di dati gemini_demo nella sezione dei modelli.
- In Explorer, fai clic sul modello
gemini_1_5_flashed esamina i dettagli.
8. Chiedere al modello Gemini di fornire i riassunti dei film per ogni poster
In questa attività utilizzerai il modello remoto Gemini che hai appena creato per analizzare le immagini dei poster dei film e generare riassunti per ogni film.
Puoi inviare richieste al modello utilizzando la funzione ML.GENERATE_TEXT, facendo riferimento al modello nei parametri.
Analizza 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 chiede al modello Gemini per ogni riga della tabella degli oggetti, combinando l'immagine con il prompt statico specificato. Il risultato è la creazione della tabella movie_posters_results.
- Ora visualizziamo i risultati. Crea ed esegui una nuova query con la seguente istruzione SQL:
SELECT * FROM `gemini_demo.movie_posters_results`
Il risultato sono righe per ogni poster del film con URI (la posizione 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 query sulla tabella con la query riportata di seguito per visualizzare le righe create.
SELECT * FROM `gemini_demo.movie_posters_results_formatted`
Nota come i risultati della colonna URI rimangano invariati, ma il JSON viene ora convertito nelle colonne title e year per ogni riga.
Chiedere al modello Gemini 1.5 Flash di fornire riassunti di film
E se volessi maggiori informazioni su ciascuno di questi film, ad esempio un riepilogo testuale? Questo caso d'uso di generazione di contenuti è perfetto per un modello LLM come Gemini 1.5 Flash.
- Puoi utilizzare Gemini 1.5 Flash per fornire riassunti 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));
Nota il campo ml_generate_text_llm_result dei risultati, che include un breve riepilogo del film.
9. Genera incorporamenti di testo utilizzando un modello remoto
Ora puoi unire i dati strutturati che hai creato con altri dati strutturati nel tuo warehouse. Il set di dati pubblici IMDB disponibile in BigQuery contiene una grande quantità di informazioni sui film, tra cui le valutazioni degli spettatori e alcune recensioni degli utenti in formato libero. Questi dati possono aiutarti ad approfondire l'analisi delle locandine 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 ai titoli nel set di dati 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ù vicino ai titoli dei poster dei film del set di dati appena creato.
Crea il modello remoto
Per generare gli embedding di testo, dovrai 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 è la creazione del modello text_embedding, che viene visualizzato nello spazio di esplorazione sotto il set di dati gemini_demo.
Generare 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 incorporamenti per il contenuto di testo concatenato 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 vedi 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 da un set di dati IMDB pubblico che contiene 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 film, titoli e anno di uscita distinti della tabella bigquery-public-data.imdb.reviews per tutti i film del set di dati usciti prima del 1935.
- Ora creerai gli incorporamenti 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 incorporamenti per il contenuto 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 di distanza del coseno, che determina il grado di somiglianza tra due incorporamenti.
Questa query può essere utilizzata per trovare il film più simile nel set di dati IMDB per ciascuno dei film identificati da Gemini 1.5 Flash nei poster dei film. Ad esempio, potresti utilizzare questa query per trovare la corrispondenza più vicina per il film "Au Secours!" nel set di dati pubblico IMDB, che fa riferimento a questo film con il titolo in lingua inglese "Help!".
- Crea ed esegui una nuova query per unire alcune informazioni aggiuntive sulle valutazioni dei film fornite nel set di dati pubblico 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 precedente. Utilizza ancora rappresentazioni numeriche speciali chiamate vector embedding per trovare film simili a un determinato poster. Tuttavia, unisce anche la valutazione media e il numero di voti per ogni film vicino più prossimo da una tabella separata del set di dati pubblico IMDB.
10. Complimenti
Congratulazioni per aver completato il codelab. Hai creato correttamente una tabella di oggetti per le immagini delle locandine in BigQuery, hai creato un modello Gemini remoto, hai utilizzato il modello per chiedere al modello Gemini di analizzare le immagini e fornire riassunti dei film, hai generato embedding di testo per i titoli dei film e li hai utilizzati per abbinare le immagini delle locandine 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 alle risorse Cloud in BigQuery
- Come creare un set di dati e una tabella di oggetti in BigQuery per le immagini delle locandine dei film
- Come creare i modelli remoti Gemini in BigQuery
- Come chiedere al modello Gemini di fornire riepiloghi dei film per ogni locandina
- Come generare embedding di testo per il film rappresentato in ogni locandina
- Come utilizzare BigQuery
VECTOR_SEARCHper abbinare le immagini dei poster dei film a film strettamente correlati nel set di dati
Passaggi successivi / Scopri di più