1. Pengantar
Di lab ini, Anda akan mempelajari cara menggunakan BigQuery Machine Learning untuk inferensi dengan model jarak jauh ( model Gemini) untuk menganalisis gambar poster film dan membuat ringkasan film berdasarkan poster langsung di data warehouse BigQuery Anda.
Gambar di atas: Contoh gambar poster film yang akan Anda analisis.
BigQuery adalah platform analisis data dengan dukungan AI yang terkelola sepenuhnya yang membantu Anda memperoleh nilai maksimal dari data Anda dan dirancang agar menjadi multi-engine, multi-format, dan multi-cloud. Salah satu fitur utamanya adalah BigQuery Machine Learning untuk inferensi, yang memungkinkan Anda membuat dan menjalankan model machine learning (ML) dengan menggunakan kueri GoogleSQL.
Gemini adalah serangkaian model AI generatif yang dikembangkan oleh Google dan dirancang untuk kasus penggunaan multimodal.
Menjalankan model ML menggunakan Kueri GoogleSQL
Biasanya, menjalankan ML atau kecerdasan buatan (AI) pada set data besar memerlukan pemrograman dan pengetahuan yang luas tentang framework ML. Hal ini membatasi pengembangan solusi ke sekelompok kecil spesialis dalam setiap perusahaan. Dengan BigQuery Machine Learning untuk inferensi, praktisi SQL dapat menggunakan alat dan keterampilan SQL yang ada untuk membuat model, serta membuat hasil dari LLM dan API Cloud AI.
Prasyarat
- Pemahaman dasar tentang Konsol Google Cloud
- Pengalaman dengan BigQuery adalah nilai tambah
Yang akan Anda pelajari
- Cara mengonfigurasi lingkungan dan akun Anda untuk menggunakan API
- Cara membuat koneksi Resource Cloud di BigQuery
- Cara membuat set data dan tabel objek di BigQuery untuk gambar poster film
- Cara membuat model jarak jauh Gemini di BigQuery
- Cara meminta model Gemini untuk memberikan ringkasan film untuk setiap poster
- Cara membuat embedding teks untuk film yang direpresentasikan dalam setiap poster
- Cara menggunakan
VECTOR_SEARCH
BigQuery untuk mencocokkan gambar poster film dengan film yang terkait erat dalam set data
Yang Anda butuhkan
- Akun Google Cloud dan Project Google Cloud, dengan penagihan diaktifkan
- Browser web seperti Chrome
2. Penyiapan dan Persyaratan
Penyiapan lingkungan mandiri
- Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.
- Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
- Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai
PROJECT_ID
). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri, dan lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan tersedia selama durasi project. - Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
- Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini tidak akan memakan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus project-nya. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
Mulai Cloud Shell
Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam codelab ini, Anda akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.
Dari Google Cloud Console, klik ikon Cloud Shell di toolbar kanan atas:
Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan. Jika sudah selesai, Anda akan melihat tampilan seperti ini:
Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Semua pekerjaan Anda dalam codelab ini dapat dilakukan di browser. Anda tidak perlu menginstal apa pun.
3. Sebelum memulai
Ada beberapa langkah penyiapan untuk menggunakan model Gemini di BigQuery, termasuk mengaktifkan API, membuat koneksi resource Cloud, dan memberikan izin tertentu kepada akun layanan untuk koneksi resource Cloud. Langkah-langkah ini dilakukan satu kali per project, dan akan dibahas di beberapa bagian berikutnya.
Aktifkan API
Di dalam Cloud Shell, pastikan project ID Anda sudah disiapkan:
gcloud config set project [YOUR-PROJECT-ID]
Tetapkan variabel lingkungan PROJECT_ID
:
PROJECT_ID=$(gcloud config get-value project)
Konfigurasi region default yang akan digunakan untuk model Vertex AI. Baca selengkapnya tentang lokasi yang tersedia untuk Vertex AI. Dalam contoh ini, kita menggunakan region us-central1
.
gcloud config set compute/region us-central1
Tetapkan variabel lingkungan REGION
:
REGION=$(gcloud config get-value compute/region)
Aktifkan semua layanan yang diperlukan:
gcloud services enable bigqueryconnection.googleapis.com \
aiplatform.googleapis.com
Output yang diharapkan setelah menjalankan semua perintah di atas:
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. Membuat koneksi Resource Cloud
Dalam tugas ini, Anda akan membuat koneksi Resource Cloud, yang memungkinkan BigQuery mengakses file gambar di Cloud Storage dan melakukan panggilan ke Vertex AI.
- Di Konsol Google Cloud, pada Navigation menu (
), klik BigQuery.
- Untuk membuat koneksi, klik + ADD, lalu klik Connections to external data sources.
- Pada Connection type list, pilih Vertex AI remote models, remote functions and BigLake (Cloud Resource).
- Di kolom Connection ID, masukkan gemini_conn untuk koneksi Anda.
- Untuk Location type, pilih Multi-region, kemudian dari menu dropdown, pilih multi-region US.
- Gunakan opsi default untuk setelan lainnya.
- Klik Create connection.
- Klik GO TO CONNECTION.
- Di panel Connection info, salin ID akun layanan ke file teks untuk digunakan dalam tugas berikutnya. Anda juga akan melihat koneksi ditambahkan di bagian External Connections project Anda di BigQuery Explorer.
5. Memberikan izin IAM ke akun layanan koneksi
Dalam tugas ini, Anda akan memberikan izin IAM ke akun layanan koneksi Resource Cloud, melalui sebuah peran, untuk mengaktifkan akses ke layanan Vertex AI.
- Di Konsol Google Cloud, pada Navigation menu, klik IAM & Admin.
- Klik Grant Access.
- Di kolom New principals, masukkan ID akun layanan yang Anda salin sebelumnya.
- Di kolom Select a role, masukkan Vertex AI, lalu pilih peran Vertex AI User.
- Klik Simpan. Hasilnya adalah ID akun layanan kini memiliki peran Vertex AI User.
6. Membuat set data dan tabel objek di BigQuery untuk gambar poster film
Dalam tugas ini, Anda akan membuat set data untuk project dan tabel objek di dalamnya untuk menyimpan gambar poster.
Set data gambar poster film yang digunakan dalam tutorial ini disimpan di bucket Google Cloud Storage publik: gs://cloud-samples-data/vertex-ai/dataset-management/datasets/classic-movie-posters
Membuat set data
Anda akan membuat set data untuk menyimpan objek database, termasuk tabel dan model, yang digunakan dalam tutorial ini.
- Di Konsol Google Cloud, pilih Navigation menu (
), lalu pilih BigQuery.
- Di panel Explorer, di samping nama project, pilih View actions (
), lalu pilih Create dataset.
- Di panel Create dataset, masukkan informasi berikut:
- ID Set Data: gemini_demo
- Jenis lokasi: pilih Multi-region
- Multi-region: pilih US
- Biarkan kolom lain tetap pada nilai defaultnya.
- Klik Create Dataset.
Hasilnya adalah set data gemini_demo
dibuat dan dicantumkan di bawah project Anda di BigQuery Explorer.
Membuat tabel objek
BigQuery tidak hanya menyimpan data terstruktur, tetapi juga dapat mengakses data tidak terstruktur (seperti gambar poster) melalui tabel objek.
Anda membuat tabel objek dengan mengarahkan ke bucket Cloud Storage, dan tabel objek yang dihasilkan memiliki baris untuk setiap objek dari bucket dengan jalur penyimpanan dan metadatanya.
Untuk membuat tabel objek, Anda akan menggunakan kueri SQL.
- Klik + untuk Membuat kueri SQL baru.
- Di editor kueri, tempel kueri di bawah.
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/*']
);
- Jalankan kueri ini. Hasilnya adalah tabel objek
movie_posters
yang ditambahkan ke set datagemini_demo
dan dimuat denganURI
(lokasi Cloud Storage) setiap gambar poster film. - Di Explorer, klik
movie_posters
, lalu tinjau skema dan detailnya. Silakan mengkueri tabel untuk meninjau kumpulan data tertentu.
7. Membuat model jarak jauh Gemini di BigQuery
Setelah tabel objek dibuat, Anda dapat mulai menggunakannya. Dalam tugas ini, Anda akan membuat model jarak jauh untuk Gemini 1.5 Flash agar tersedia di BigQuery.
Membuat model jarak jauh Gemini 1.5 Flash
- Klik + untuk Membuat kueri SQL baru.
- Di editor kueri, tempel dan jalankan kueri di bawah ini.
CREATE OR REPLACE MODEL `gemini_demo.gemini_1_5_flash`
REMOTE WITH CONNECTION `us.gemini_conn`
OPTIONS (endpoint = 'gemini-1.5-flash')
Hasilnya adalah model gemini_1_5_flash
dibuat dan Anda mendapati model tersebut ditambahkan ke set data gemini_demo
, di bagian model.
- Di Explorer, klik model
gemini_1_5_flash
, lalu tinjau detailnya.
8. Memasukkan perintah ke model Gemini untuk memberikan ringkasan film untuk setiap poster
Dalam tugas ini, Anda akan menggunakan model jarak jauh Gemini yang baru saja Anda buat untuk menganalisis gambar poster film dan membuat ringkasan untuk setiap film.
Anda dapat mengirim permintaan ke model menggunakan fungsi ML.GENERATE_TEXT
, yang mereferensikan model dalam parameter.
Menganalisis gambar dengan model Gemini 1.5 Flash
- Buat dan jalankan kueri baru dengan pernyataan SQL berikut:
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)));
Saat kueri berjalan, BigQuery akan meminta model Gemini untuk setiap baris tabel objek, yang menggabungkan gambar dengan perintah statis yang ditentukan. Hasilnya adalah tabel movie_posters_results
dibuat.
- Sekarang mari kita lihat hasilnya. Buat dan jalankan kueri baru dengan pernyataan SQL berikut:
SELECT * FROM `gemini_demo.movie_posters_results`
Hasilnya adalah baris untuk setiap poster film dengan URI
(lokasi Cloud Storage gambar poster film) dan hasil JSON yang mencakup judul film dan tahun rilis film tersebut dari model Gemini 1.5 Flash.
Anda dapat mengambil hasil ini dengan cara yang lebih dapat dibaca manusia dengan menggunakan kueri berikutnya. Kueri ini menggunakan SQL untuk mengambil judul film dan tahun rilis dari respons ini ke kolom baru.
- Buat dan jalankan kueri baru dengan pernyataan SQL berikut:
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 )
Hasilnya adalah tabel movie_posters_result_formatted
dibuat.
- Anda dapat mengkueri tabel dengan kueri di bawah, untuk melihat baris dibuat.
SELECT * FROM `gemini_demo.movie_posters_results_formatted`
Perhatikan bahwa hasil kolom URI
tetap sama, tetapi JSON kini diubah ke kolom title
dan year
untuk setiap baris.
Meminta model Gemini 1.5 Flash untuk memberikan ringkasan film
Bagaimana jika Anda ingin mengetahui informasi selengkapnya tentang setiap film ini, misalnya ringkasan teks dari setiap film? Kasus penggunaan pembuatan konten ini sangat cocok untuk model LLM seperti model Gemini 1.5 Flash.
- Anda dapat menggunakan Gemini 1.5 Flash untuk memberikan ringkasan film untuk setiap poster dengan menjalankan kueri di bawah ini:
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));
Perhatikan kolom ml_generate_text_llm_result
hasil; kolom ini berisi ringkasan singkat film.
9. Membuat embedding teks menggunakan model jarak jauh
Sekarang Anda dapat menggabungkan data terstruktur yang telah dibuat dengan data terstruktur lainnya di warehouse. Set data publik IMDB yang tersedia di BigQuery berisi banyak informasi tentang film, termasuk rating oleh penonton dan beberapa contoh ulasan pengguna dalam bentuk bebas. Data ini dapat membantu Anda memperdalam analisis poster film dan memahami persepsi orang terhadap film tersebut.
Untuk menggabungkan data, Anda memerlukan kunci. Dalam hal ini, judul film yang dihasilkan oleh model Gemini mungkin tidak sama persis dengan judul dalam set data IMDB.
Dalam tugas ini, Anda akan membuat embedding teks judul dan tahun film dari kedua set data, lalu menggunakan jarak antara embedding ini untuk menggabungkan judul IMDB terdekat dengan judul poster film dari set data yang baru Anda buat.
Membuat model jarak jauh
Untuk membuat embedding teks, Anda harus membuat model jarak jauh baru yang mengarah ke endpoint text-multilingual-embedding-002.
- Buat dan jalankan kueri baru dengan pernyataan SQL berikut:
CREATE OR REPLACE MODEL `gemini_demo.text_embedding`
REMOTE WITH CONNECTION `us.gemini_conn`
OPTIONS (endpoint = 'text-multilingual-embedding-002')
Hasilnya adalah model text_embedding
dibuat dan muncul di Explorer, di bawah set data gemini_demo
.
Membuat embedding teks untuk judul dan tahun yang terkait dengan poster
Sekarang Anda akan menggunakan model jarak jauh ini dengan fungsi ML.GENERATE_EMBEDDING
untuk membuat penyematan untuk setiap judul dan tahun poster film.
- Buat dan jalankan kueri baru dengan pernyataan SQL berikut:
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)));
Hasilnya adalah tabel movie_poster_results_embeddings
dibuat yang berisi penyematan untuk konten teks yang digabungkan untuk setiap baris tabel gemini_demo.movie_posters_results_formatted
.
- Anda dapat melihat hasil kueri menggunakan kueri baru di bawah ini:
SELECT * FROM `gemini_demo.movie_posters_results_embeddings`
Di sini Anda melihat embedding (vektor yang diwakili oleh angka) untuk setiap film yang dihasilkan oleh model.
Membuat embedding teks untuk subset dari set data IMDB
Anda akan membuat tampilan data baru dari set data IMDB publik yang hanya berisi film yang dirilis sebelum tahun 1935 (jangka waktu film yang diketahui dari gambar poster).
- Buat dan jalankan kueri baru dengan pernyataan SQL berikut:
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)
Hasilnya adalah tabel virtual baru yang berisi daftar ID film, judul, dan tahun rilis yang berbeda dari tabel bigquery-public-data.imdb.reviews
untuk semua film dalam set data yang dirilis sebelum tahun 1935.
- Sekarang Anda akan membuat penyematan untuk subkumpulan film dari IMDB menggunakan proses yang serupa dengan bagian sebelumnya. Buat dan jalankan kueri baru dengan pernyataan SQL berikut:
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 = '' );
Hasil kueri ini adalah tabel yang berisi embedding untuk konten teks tabel gemini_demo.imdb_movies
.
Mencocokkan gambar poster film dengan movie_id
IMDB menggunakan VECTOR_SEARCH
BigQuery
Sekarang, Anda dapat menggabungkan kedua tabel menggunakan fungsi VECTOR_SEARCH
.
- Buat dan jalankan kueri baru dengan pernyataan SQL berikut:
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');
Kueri ini menggunakan fungsi VECTOR_SEARCH
untuk menemukan tetangga terdekat dalam tabel gemini_demo.imdb_movies_embeddings
untuk setiap baris dalam tabel gemini_demo.movie_posters_results_embeddings
. Tetangga terdekat ditemukan menggunakan metrik jarak kosinus, yang menentukan seberapa mirip dua embedding tersebut.
Kueri ini dapat digunakan untuk menemukan film yang paling mirip dalam set data IMDB untuk setiap film yang diidentifikasi oleh Gemini 1.5 Flash dalam poster film. Misalnya, Anda dapat menggunakan kueri ini untuk menemukan hasil yang paling mendekati untuk film "Au Secours!" dalam set data publik IMDB, yang merujuk film ini dengan judul bahasa Inggrisnya, "Help!".
- Buat dan jalankan kueri baru untuk menggabungkan beberapa informasi tambahan tentang rating film yang disediakan dalam set data publik 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
Kueri ini mirip dengan kueri sebelumnya. Hasil kueri ini masih menggunakan representasi numerik khusus yang disebut embedding vektor untuk menemukan film yang mirip dengan poster film tertentu. Namun, hasil kueri ini juga menggabungkan rata-rata rating dan jumlah voting untuk setiap film terdekat dari tabel terpisah dari set data publik IMDB.
10. Selamat
Selamat, Anda telah menyelesaikan codelab. Anda berhasil membuat tabel objek untuk gambar poster di BigQuery, membuat model Gemini jarak jauh, menggunakan model tersebut untuk meminta model Gemini menganalisis gambar dan memberikan ringkasan film, membuat penyematan teks untuk judul film, dan menggunakan penyematan tersebut untuk mencocokkan gambar poster film dengan judul film terkait dalam set data IMDB.
Yang telah kita bahas
- Cara mengonfigurasi lingkungan dan akun Anda untuk menggunakan API
- Cara membuat koneksi Resource Cloud di BigQuery
- Cara membuat set data dan tabel objek di BigQuery untuk gambar poster film
- Cara membuat model jarak jauh Gemini di BigQuery
- Cara meminta model Gemini untuk memberikan ringkasan film untuk setiap poster
- Cara membuat embedding teks untuk film yang direpresentasikan dalam setiap poster
- Cara menggunakan
VECTOR_SEARCH
BigQuery untuk mencocokkan gambar poster film dengan film yang terkait erat dalam set data
Langkah berikutnya / pelajari lebih lanjut