1. Pengantar
Dalam codelab ini, kita akan membangun aplikasi preskriptif dan prediktif untuk Rating Kesuksesan Film dengan kueri BigQuery SQL dan Vertex AI PaLM API. Model yang digunakan untuk melakukan pembuatan teks adalah text-bison dan dihosting sebagai fungsi jarak jauh di BigQuery.
Daftar layanan yang digunakan adalah:
- BigQuery ML
- Vertex AI PaLM API
- Cloud Shell
Yang akan Anda build
Anda akan membuat
- Set data BigQuery untuk memuat model
- Model BigQuery ML yang memprediksi skor kesuksesan film berdasarkan atribut GENRE dan DURASI film
- Model BigQuery yang menghosting Vertex AI PaLM API sebagai fungsi jarak jauh
- Koneksi eksternal untuk membuat koneksi antara BigQuery dan Vertex AI
2. Persyaratan
Sebelum memulai
- Di Konsol Google Cloud, di halaman pemilih project, pilih atau buat project Google Cloud.
- Pastikan penagihan diaktifkan untuk project Cloud Anda. Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project.
- Pastikan semua API yang diperlukan (BigQuery API, Vertex AI API, BigQuery Connection API) telah diaktifkan
- Anda akan menggunakan Cloud Shell, lingkungan command line yang berjalan di Google Cloud yang telah dilengkapi dengan bq. Baca dokumentasi untuk mempelajari perintah gcloud dan penggunaannya
Dari Cloud Console, klik Activate Cloud Shell di pojok kanan atas:

Jika project Anda belum ditetapkan, gunakan perintah berikut untuk menetapkannya:
gcloud config set project <YOUR_PROJECT_ID>
- Buka konsol BigQuery secara langsung dengan memasukkan URL berikut di browser Anda: https://console.cloud.google.com/bigquery
3. Menyiapkan data
Dalam kasus penggunaan ini, kita akan menggunakan dataset film yang berasal dari sumber movielens.
- Membuat set data:
Set data BigQuery adalah kumpulan tabel. Semua tabel dalam set data disimpan di lokasi data yang sama. Anda juga dapat melampirkan kontrol akses kustom untuk membatasi akses ke set data dan tabelnya.
Di Cloud Shell, gunakan perintah bq mk untuk membuat set data bernama "movie_insights"
bq mk --location=us-central1 movie_insights
- Clone file sumber ke Mesin Cloud Shell Anda:
git clone https://github.com/AbiramiSukumaran/movie_score_genai_insights
- Buka direktori project baru yang dibuat di Mesin Cloud Shell Anda:
cd movie_score_genai_insights
- Gunakan perintah bq load untuk memuat file CSV ke dalam tabel BigQuery (perhatikan bahwa Anda juga dapat mengupload langsung dari UI BigQuery):
bq load --source_format=CSV --skip_leading_rows=1 movie_insights.movie_score \
./movies_data.csv \ Id:numeric,name:string,rating:string,genre:string,year:numeric,released:string,score:string,director:string,writer:string,star:string,country:string,budget:numeric,company:string,runtime:numeric,data_cat:string
- Anda dapat membuat kueri sampel untuk memeriksa apakah tabel movie_score dan data dibuat dalam set data:
bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movie_insights.movie_score limit 3;
4. Data ke ML
Mari buat model klasifikasi untuk memprediksi skor kesuksesan film berdasarkan atribut GENRE dan RUNTIME. Kita akan menggunakan pernyataan CREATE MODEL dengan opsi 'LOGISTIC_REG' untuk membuat dan melatih model regresi logistik.
Jalankan kueri di bawah di bagian QUERY EDITOR Ruang Kerja SQL konsol BigQuery:
CREATE OR REPLACE MODEL
`movie_insights.model_rating_by_runtime_genre`
OPTIONS
( model_type='LOGISTIC_REG',
auto_class_weights=TRUE,
data_split_method='NO_SPLIT',
model_registry='vertex_ai',
vertex_ai_model_version_aliases=['logistic_reg', 'experimental'],
input_label_cols=['score']
) AS
SELECT name, genre,runtime, score
FROM
movie_insights.movie_score
WHERE
data_cat = 'TRAIN';
Detail Kueri:
- Pernyataan CREATE MODEL melatih model menggunakan data pelatihan dalam pernyataan SELECT.
- Klausa OPTIONS menentukan jenis model dan opsi pelatihan. Di sini, opsi LOGISTIC_REG menentukan jenis model regresi logistik. Anda tidak perlu menentukan model regresi logistik biner versus model regresi logistik multi-class: BigQuery ML dapat menentukan model mana yang akan dilatih berdasarkan jumlah nilai unik dalam kolom label.
- data_split_method=‘NO_SPLIT' memaksa BQML untuk melatih data sesuai kondisi kueri (data_cat = ‘TRAIN'). Perhatikan juga bahwa sebaiknya gunakan ‘AUTO_SPLIT' dalam opsi ini agar framework (atau layanan dalam kasus ini) dapat mengacak partisi pemisahan pelatihan/pengujian.
- Opsi input_label_cols menentukan kolom mana dalam pernyataan SELECT yang akan digunakan sebagai kolom label. Di sini, kolom labelnya adalah skor, sehingga model akan mempelajari mana dari 10 nilai skor yang paling mungkin berdasarkan nilai lain yang ada di setiap baris.
- Opsi 'auto_class_weights=TRUE' menyeimbangkan label class dalam data pelatihan. Secara default, data pelatihan tidak diberi bobot. Jika label dalam data pelatihan tidak seimbang, model dapat belajar untuk lebih banyak memprediksi class label yang paling populer.
- Pernyataan SELECT mengkueri tabel yang kita muat dengan data CSV. Klausa WHERE memfilter baris dalam tabel input sehingga hanya set data TRAIN yang dipilih pada langkah ini.
- Konstruk berikut bersifat OPSIONAL sehingga BigQuery ML dapat mendaftarkannya secara eksplisit ke Vertex AI Model Registry. Anda dapat membaca informasi selengkapnya tentang hal ini di blog
. model_registry='vertex_ai', vertex_ai_model_version_aliases=['logistic_reg', 'experimental']ini
Setelah dibuat, hal berikut akan muncul di bagian SCHEMA pada Ruang Kerja SQL BigQuery:

Setelah membuat model, evaluasi performa model menggunakan fungsi ML.EVALUATE. Fungsi ML.EVALUATE mengevaluasi nilai yang diprediksi berdasarkan data aktual.
Anda juga dapat melihat metrik evaluasi model dari halaman MODEL:

Metrik utama secara sekilas:
Presisi - Berapa proporsi identifikasi positif yang sebenarnya benar? Presisi = Positif Benar / (Positif Benar + Positif Palsu) Perolehan - Berapa proporsi positif sebenarnya yang diidentifikasi dengan benar? Recall = Positif Benar / (Positif Benar + Negatif Palsu) Akurasi - Metrik untuk mengevaluasi model klasifikasi, yaitu fraksi prediksi yang benar-benar benar dari model kita Akurasi = Jumlah prediksi yang benar / Jumlah total prediksi
5. Memprediksi skor film menggunakan model
Saatnya Memprediksi!!!! Kueri berikut memprediksi skor setiap film dalam set data yang dikategorikan sebagai data "TEST".
Jalankan kueri di bawah di bagian QUERY EDITOR Ruang Kerja SQL konsol BigQuery:
SELECT
*
FROM
ML.PREDICT (MODEL movie_insights.model_rating_by_runtime_genre,
(
SELECT
*
FROM
movie_insights.movie_score
WHERE
data_cat= 'TEST'
)
);
Hasilnya akan terlihat seperti ini:

Hasil model menunjukkan predicted_score film dalam skala 1 hingga 10 (klasifikasi). Anda mungkin bertanya-tanya mengapa ada beberapa baris prediksi untuk setiap film. Hal ini karena model telah menampilkan kemungkinan label prediksi dan probabilitas kemunculan setiap label dalam urutan menurun.
Menganalisis hasil prediksi dan model:
Anda dapat melakukan dua langkah analisis yang efektif dengan prediksi untuk memahami hasilnya:
- Untuk memahami alasan model Anda menghasilkan hasil prediksi ini, Anda dapat menggunakan fungsi ML.EXPLAIN_PREDICT.
- Untuk mengetahui fitur mana yang paling penting guna menentukan kelompok pendapatan secara umum, Anda dapat menggunakan fungsi ML.GLOBAL_EXPLAIN.
Anda dapat membaca langkah-langkah ini secara mendetail dalam dokumentasi.
6. Data ke AI Generatif
Mari kita berikan insight tentang set data film dengan meminta LLM (Large Language Model) untuk meringkas faktor-faktor yang memengaruhi skor film menjadi lebih besar dari 5, dengan AI Generatif menggunakan model text-bison (terbaru) Vertex AI hanya menggunakan kueri SQL
- Tabel yang kita buat, movie_score, juga akan menjadi input untuk langkah ini.
- Koneksi Eksternal akan dibuat untuk membuat akses antara layanan BigQuery ML dan Vertex.
- Konstruksi GENERATE_TEXT BigQuery akan digunakan untuk memanggil PaLM API dari jarak jauh dari Vertex AI.
7. Membuat Koneksi Eksternal
Aktifkan BQ Connection API jika belum dilakukan dan catat ID Akun Layanan dari detail konfigurasi koneksi:
- Klik tombol +ADD di panel BigQuery Explorer (di sebelah kiri konsol BigQuery) dan klik "Connection to external data sources" di sumber populer yang tercantum
- Pilih Connection type sebagai "BigLake and remote functions", berikan location type sebagai "Region" dan nilai sebagai "us-central1 (Iowa)", serta "bq_llm_connection" sebagai Connection ID

- Setelah koneksi dibuat, catat Akun Layanan yang dihasilkan dari detail konfigurasi koneksi
Memberikan izin
Pada langkah ini, kita akan memberikan izin ke Akun Layanan untuk mengakses layanan Vertex AI:
Buka IAM dan tambahkan Akun Layanan yang Anda salin setelah membuat koneksi eksternal sebagai Principal dan pilih Peran "Vertex AI User"

8. Membuat model ML jarak jauh
Buat model jarak jauh yang merepresentasikan model bahasa besar Vertex AI yang dihosting:
CREATE OR REPLACE MODEL
movie_insights.llm_model REMOTE
WITH CONNECTION `us-central1.bq_llm_connection` OPTIONS (remote_service_type = 'CLOUD_AI_LARGE_LANGUAGE_MODEL_V1');
Tindakan ini akan membuat model bernama llm_model di set data movie_insights yang memanfaatkan CLOUD_AI_LARGE_LANGUAGE_MODEL_V1 API Vertex AI sebagai fungsi jarak jauh. Proses ini akan memerlukan waktu beberapa detik hingga selesai.
9. Membuat teks menggunakan model ML
Setelah model dibuat, gunakan model tersebut untuk membuat, meringkas, atau mengategorikan teks.
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 `movie_insights.llm_model`,
(
SELECT
CONCAT('FROM THE FOLLOWING TEXT ABOUT MOVIES, WHAT DO YOU THINK ARE THE FACTORS INFLUENCING A MOVIE SCORE TO BE GREATER THAN 5?: ', movie_data) AS prompt
FROM (
SELECT
REPLACE(STRING_AGG( CONCAT('A movie named ',name, ' from the country ', country, ' with a censor rating of ',rating, ' and a budget of ', budget, ' produced by ', company, ' with a runtime of about ', runtime, ' and in the genre ', genre, ' starring ', star, ' has had a success score of ', score, '') ), ',','. ') AS movie_data
FROM (
SELECT
*
FROM
`movie_insights.movie_score`
WHERE
CAST(SCORE AS INT64) > 5
LIMIT
50) ) AS MOVIES
),
STRUCT(
0.2 AS temperature,
100 AS max_output_tokens));
**Penjelasan:
ml_generate_text_result** adalah respons dari model pembuatan teks dalam format JSON yang berisi atribut konten dan keamanan: a. Content merepresentasikan hasil teks yang dihasilkan b. Atribut Keamanan merepresentasikan filter konten bawaan dengan batas yang dapat disesuaikan yang diaktifkan di Vertex AI PaLM API untuk menghindari respons yang tidak diinginkan atau tidak terduga dari model bahasa besar - respons diblokir jika melanggar batas keamanan
ML.GENERATE_TEXT adalah konstruksi yang Anda gunakan di BigQuery untuk mengakses LLM Vertex AI guna melakukan tugas pembuatan teks
CONCAT menambahkan pernyataan PROMPT Anda dan catatan database
movie_insights adalah nama set data dan movie_score adalah nama tabel yang memiliki data yang akan kita gunakan dalam desain perintah
Temperatur adalah parameter perintah untuk mengontrol keacakan respons - makin rendah makin baik dalam hal relevansi
Max_output_tokens adalah jumlah kata yang Anda inginkan dalam respons
Respons kueri akan terlihat seperti ini:

Seperti yang Anda lihat, responsnya bertingkat dan tidak diformat.
10. Meratakan hasil kueri
Mari kita ratakan hasilnya agar kita tidak perlu mendekode JSON secara eksplisit dalam kueri:
SELECT
*
FROM
ML.GENERATE_TEXT( MODEL movie_insights.llm_model,
(
SELECT
CONCAT('FROM THE FOLLOWING TEXT ABOUT MOVIES, WHAT DO YOU THINK ARE THE FACTORS INFLUENCING A MOVIE SCORE TO BE GREATER THAN 5?: ', movie_data) AS prompt
FROM (
SELECT
REPLACE(STRING_AGG( CONCAT('A movie named ',name, ' from the country ', country, ' with a censor rating of ',rating, ' and a budget of ', budget, ' produced by ', company, ' with a runtime of about ', runtime, ' and in the genre ', genre, ' starring ', star, ' has had a success score of ', score, '') ), ',','. ') AS movie_data
FROM (
SELECT
*
FROM
`movie_insights.movie_score`
WHERE
CAST(SCORE AS INT64) > 5
LIMIT
50) ) AS MOVIES),
STRUCT( 0.2 AS temperature,
100 AS max_output_tokens,
TRUE AS flatten_json_output));
**Penjelasan:
Flatten_json_output** merepresentasikan boolean, yang jika disetel ke benar akan menampilkan teks datar yang mudah dipahami dan diekstrak dari respons JSON.
Respons kueri akan terlihat seperti ini:

11. Pembersihan
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam posting ini, Anda dapat menghapus endpoint Vertex AI yang Anda buat sebagai bagian dari langkah ML, dengan membuka halaman Endpoint Vertex AI.
12. Selamat
Selamat! Anda telah berhasil membuat model BQML dan melakukan analisis berbasis LLM menggunakan API Vertex AI pada set data film Anda hanya menggunakan kueri SQL. Lihat dokumentasi produk LLM Vertex AI untuk mempelajari lebih lanjut model yang tersedia.