1. Giriş
Bu codelab'de BigQuery SQL sorguları ve Vertex AI PaLM API'yi kullanarak bir Film Başarı Puanı tahmini ve reçete uygulaması oluşturacağız. Metin oluşturmak için kullanılan model metin bizonu'dur ve BigQuery'de uzak işlev olarak barındırılır.
Kullanılan hizmetlerin listesi şunlardır:
- BigQuery ML
- Vertex AI PaLM API'si
- Cloud Shell
Neler oluşturacaksınız?
Şöyle
- Modeli içerecek bir BigQuery veri kümesi
- Bir filmin başarı puanını filmin TÜR ve RUNTIME özelliklerine göre tahmin eden BigQuery ML modeli
- Vertex AI PaLM API'yi uzak işlev olarak barındıran bir BigQuery modeli
- BigQuery ile Vertex AI arasında bağlantı kurmak için harici bağlantı
2. Şartlar
Başlamadan önce
- Google Cloud Console'daki proje seçici sayfasından bir Google Cloud projesi seçin veya oluşturun.
- Cloud projeniz için faturalandırmanın etkinleştirildiğinden emin olun. Bir projede faturalandırmanın etkin olup olmadığını nasıl kontrol edeceğinizi öğrenin.
- Gerekli tüm API'lerin (BigQuery API, Vertex AI API, BigQuery Connection API) etkinleştirildiğinden emin olun
- Google Cloud'da çalışan ve bq ile önceden yüklenmiş bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız. gcloud komutları ve kullanımı için belgelere bakın
Cloud Console'da sağ üst köşedeki Cloud Shell'i Etkinleştir'i tıklayın:
Projeniz ayarlanmadıysa ayarlamak için aşağıdaki komutu kullanın:
gcloud config set project <YOUR_PROJECT_ID>
- Tarayıcınıza aşağıdaki URL'yi girerek doğrudan BigQuery konsoluna gidin: https://console.cloud.google.com/bigquery
3. Veri hazırlama
Bu kullanım durumunda, movielens kaynağından türetilen movies veri kümesini kullanacağız.
- Veri kümesi oluşturun:
BigQuery veri kümesi, tablo koleksiyonudur. Bir veri kümesindeki tüm tablolar aynı veri konumunda depolanır. Bir veri kümesi ve tablolarına erişimi sınırlamak için özel erişim denetimleri de ekleyebilirsiniz.
Cloud Shell'de "movie_insights" adlı bir veri kümesi oluşturmak için bq mk komutunu kullanın.
bq mk --location=us-central1 movie_insights
- Kaynak dosyayı Cloud Shell Makinenize klonlayın:
git clone https://github.com/AbiramiSukumaran/movie_score_genai_insights
- Cloud Shell Makinenizde oluşturulan yeni proje dizinine gidin:
cd movie_score_genai_insights
- CSV dosyanızı bir BigQuery tablosuna yüklemek için bq load komutunu kullanın (Doğrudan BigQuery kullanıcı arayüzünden de yükleme yapabileceğinizi lütfen unutmayın):
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
- Movies_score tablosunun ve verilerin veri kümesinde oluşturulup oluşturulmadığını kontrol etmek için bir örneği sorgulayabilirsiniz:
bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movie_insights.movie_score limit 3;
4. Verilerden makine öğrenimine geçiş
Tür ve RUNTIME özelliklerine göre filmin başarı puanını tahmin etmek için bir sınıflandırma modeli oluşturalım. CREATE MODEL ifadesini "LOGISTIC_REG" seçeneğiyle kullanacağız mantıksal regresyon modeli oluşturup eğitmek istiyorum.
BigQuery konsolunun SQL Workspace QUERY DÜZENLEYİCİ bölümünde aşağıdaki sorguyu çalıştırın:
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';
Sorgu Ayrıntıları:
- CREATE MODEL ifadesi, SELECT ifadesindeki eğitim verilerini kullanarak bir modeli eğitir.
- OPTIONS yan tümcesi, model türünü ve eğitim seçeneklerini belirtir. Burada, LOGISTIC_REG seçeneği mantıksal regresyon modeli türünü belirtir. Çok sınıflı mantıksal regresyon modeli yerine ikili mantıksal regresyon modeli belirtmeniz gerekmez: BigQuery ML, etiket sütunundaki benzersiz değerlerin sayısına göre hangisinin eğitileceğini belirleyebilir.
- data_split_method=‘NO_SPLIT' BQML'yi sorgu koşullarına (data_cat = ‘TRAIN’) göre veriler üzerinde eğitim yapmaya zorlar, ayrıca ‘OTO_SPLIT’ Bu seçenekte, çerçevenin (veya bu durumda hizmetin) eğitim/test bölümlerinin bölümünü rastgele hale getirmesine izin verebilirsiniz.
- enter_label_cols seçeneği, SELECT ifadesinde hangi sütunun etiket sütunu olarak kullanılacağını belirtir. Burada etiket sütunu puan olduğundan model, her satırda bulunan diğer değerlere göre 10 puan değeri arasından hangisinin daha yüksek olabileceğini öğrenir.
- 'auto_class_weights=TRUE' seçeneği, eğitim verilerindeki sınıf etiketlerini dengeler. Varsayılan olarak eğitim verileri ağırlıklandırılmamıştır. Eğitim verilerindeki etiketler dengesizse model, en popüler etiket sınıfını daha yoğun bir şekilde tahmin etmeyi öğrenebilir.
- SELECT ifadesi, csv verileriyle indirdiğimiz tabloyu sorgular. WHERE ifadesi, giriş tablosundaki satırları filtreler. Böylece, bu adımda yalnızca TRAIN veri kümesi seçilmiş olur.
- Aşağıdaki yapılar İSTEĞE BAĞLI olduğundan BigQuery ML bunları Vertex AI Model Registry'ye açık bir şekilde kaydedebilir. Bu konuda daha fazla bilgi için bu bloga bakabilirsiniz.
. model_registry='vertex_ai', vertex_ai_model_version_aliases=['logistic_reg', 'experimental']
Oluşturulan aşağıdaki kod, BigQuery SQL Çalışma Alanı'nın SCHEMA bölümünde gösterilir:
Modelinizi oluşturduktan sonra, ML.EVALUATE işlevini kullanarak modelin performansını değerlendirin. ML.EVALUATE işlevi, tahmin edilen değerleri gerçek verilerle karşılaştırarak değerlendirir.
Modelinizin değerlendirme metriklerini MODEL sayfasından da görüntüleyebilirsiniz:
Temel metrikler bir bakışta:
Hassasiyet - Pozitif tanımlamaların ne kadarı gerçekte doğruydu? Hassasiyet = Gerçek Pozitif / (Doğru Pozitif + Yanlış Pozitif) Geri çağırma - Gerçek pozitiflerin ne oranı doğru tanımlanmış? Geri Çağırma = Gerçek Pozitif / (Doğru Pozitif + Yanlış Negatif) Doğruluk - Sınıflandırma modellerini değerlendirmek için kullanılan bir metriktir. Bu, modelimizin gerçekte doğru bulduğu tahminlerin oranıdır Doğruluk = Doğru tahminlerin sayısı / Toplam tahmin sayısı
5. Modeli kullanarak film puanını tahmin etme
Tahmin Zamanı!!!! Aşağıdaki sorgu, veri kümesindeki "TEST" olarak sınıflandırılan her filmin puanını tahmin eder dışı verilerdir.
BigQuery konsolunun SQL Workspace QUERY DÜZENLEYİCİ bölümünde aşağıdaki sorguyu çalıştırın:
SELECT
*
FROM
ML.PREDICT (MODEL movie_insights.model_rating_by_runtime_genre,
(
SELECT
*
FROM
movie_insights.movie_score
WHERE
data_cat= 'TEST'
)
);
Sonuç şu şekilde görünür:
Model sonucu, filmin tahmin edilen puanını 1 ile 10 arasında bir ölçekte gösterir (sınıflandırma). Her film için neden birden fazla tahmin satırı olduğunu merak ediyor olmalısınız. Bunun nedeni, modelin tahmini olası etiketleri ve her birinin azalan sırada ortaya çıkma olasılığını döndürmesidir.
Tahmin edilen sonuçları ve modeli analiz etme:
Sonuçları anlamak için tahmin üzerinde iki önemli analiz adımı uygulayabilirsiniz:
- Modelinizin bu tahmin sonuçlarını neden oluşturduğunu anlamak için ML.EXPLAIN_PREDICT işlevini kullanabilirsiniz.
- Genel olarak gelir aralığını belirlemek için en önemli özelliklerin hangileri olduğunu öğrenmek üzere ML.GLOBAL_EXPLAIN işlevini kullanabilirsiniz.
Bu adımlar hakkında ayrıntılı bilgiyi belgelerde bulabilirsiniz.
6. Üretken yapay zeka için veriler
LLM'ye (Büyük Dil Modeli) film puanının 5'ten büyük olmasını etkileyen faktörlerin özetini sorarak film veri kümesiyle ilgili analizler sunalım. Vertex AI'ın metin bizon (en yeni) modelini kullanan Üretken Yapay Zeka, yalnızca sql sorgularını kullanarak
- Oluşturduğumuz film_puanı, bu adım için de girdi sağlar.
- BigQuery ML ile Vertex hizmetleri arasında erişim sağlamak için Harici Bağlantı oluşturulur.
- BigQuery GENERATE_TEXT yapısı, PaLM API'yi Vertex AI'dan uzaktan çağırmak için kullanılır.
7. Harici Bağlantı Oluşturma
Henüz yapmadıysanız BQ Connection API'yi etkinleştirin ve bağlantı yapılandırması ayrıntılarından Hizmet Hesabı kimliğini not edin:
- BigQuery Gezgini bölmesindeki +EKLE düğmesini (BigQuery konsolunun solundaki) ve ardından "Harici veri kaynaklarına bağlantı"yı tıklayın. listelenen popüler kaynaklarda
- "BigLake ve uzak işlevler" olarak Bağlantı türünü seçin, konum türünü "Bölge" olarak sağlayın ve değer "us-central1 (Iowa)" şeklinde olur ve "bq_llm_linked" Bağlantı Kimliği olarak
- Bağlantı oluşturulduktan sonra bağlantı yapılandırma ayrıntılarından oluşturulan hizmet hesabını not edin.
İzin verme
Bu adımda, Hizmet Hesabına Vertex AI hizmetine erişmesi için izin vereceğiz:
IAM'yi açın ve harici bağlantıyı oluşturduktan sonra kopyaladığınız Hizmet Hesabı'nı Ana Hesap olarak ekleyin ve "Vertex AI Kullanıcısı"nı seçin Rol
8. Uzak ML modeli oluşturma
Barındırılan bir Vertex AI büyük dil modelini temsil eden uzak modeli oluşturun:
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');
movie_insights
veri kümesinde, uzak işlev olarak Vertex AI'ın CLOUD_AI_LARGE_LANGUAGE_MODEL_V1 API'sinden yararlanan llm_model adlı bir model oluşturur. Bu işlemin tamamlanması birkaç saniye sürer.
9. ML modelini kullanarak metin oluşturma
Model oluşturulduktan sonra metin oluşturmak, özetlemek veya kategorilere ayırmak için modeli kullanın.
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));
**Açıklama:
ml_generate_text_result**, hem içerik hem de güvenlik özelliklerini içeren JSON biçimindeki metin oluşturma modelinin yanıtıdır: a. İçerik, oluşturulan b metin sonucunu temsil eder. Güvenlik Özellikleri, büyük dil modelinden gelen istenmeyen veya öngörülemeyen yanıtları önlemek için Vertex AI Palm API'de etkinleştirilmiş olan ayarlanabilir bir eşiğe sahip yerleşik içerik filtresini temsil eder. Yanıt, güvenlik eşiğini ihlal ediyorsa engellenir
ML.GENERATE_TEXT, metin oluşturma görevlerini gerçekleştirmek amacıyla Vertex AI LLM'ye erişmek için BigQuery'de kullandığınız yapıdır
CONCAT, PROMPT ifadenizi ve veritabanı kaydınızı ekler.
movie_insights, veri kümesinin adını ifade eder. Movies_score, istem tasarımında kullanacağımız verilerin bulunduğu tablonun adıdır.
Sıcaklık, yanıtın rastgeleliğini kontrol eden istem parametresidir (ne kadar az olursa alaka düzeyi açısından o kadar iyidir)
Max_output_tokens, yanıtta olmasını istediğiniz kelime sayısıdır
Sorgu yanıtı şu şekilde görünür:
Gördüğünüz gibi yanıt iç içe yerleştirilmiş ve biçimlendirilmemiş.
10. Sorgu sonucunu düzleştir
Sorguda JSON kodunu çözmemiz gerekmemesi için sonucu düzeltelim:
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));
**Açıklama:
Flatten_json_Exit**, boole değerini temsil eder. Boole, true olarak ayarlanırsa JSON yanıtından ayıklanan düz ve anlaşılabilir bir metin döndürür.
Sorgu yanıtı şu şekilde görünür:
11. Temizleme
Bu yayında kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız makine öğrenimi adımı kapsamında oluşturduğunuz Vertex AI uç noktasını Vertex AI uç noktası sayfasına giderek silebilirsiniz.
12. Tebrikler
Tebrikler! BQML modelini başarıyla oluşturdunuz ve film veri kümenizde yalnızca SQL sorgularını kullanarak Vertex AI API'den yararlanarak LLM tabanlı analiz gerçekleştirdiniz. Mevcut modeller hakkında daha fazla bilgi edinmek için Vertex AI LLM ürün belgelerine göz atın.