BigQuery SQL ve Vertex AI ile Üretken Analizler

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 text-bison'dur ve BigQuery'de uzak işlev olarak barındırılır.

Kullanılan hizmetlerin listesi şunlardır:

  1. BigQuery ML
  2. Vertex AI PaLM API'si
  3. 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

  • Chrome veya Firefox gibi bir tarayıcı
  • Faturalandırmanın etkin olduğu bir Google Cloud projesi

Başlamadan önce

  1. Google Cloud Console'daki proje seçici sayfasından bir Google Cloud projesi seçin veya oluşturun.
  2. 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.
  3. Gerekli tüm API'lerin (BigQuery API, Vertex AI API, BigQuery Connection API) etkinleştirildiğinden emin olun
  4. 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:

51622c00acec2fa.png

Projeniz ayarlanmadıysa ayarlamak için aşağıdaki komutu kullanın:

gcloud config set project <YOUR_PROJECT_ID>
  1. 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.

  1. 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
  1. Kaynak dosyayı Cloud Shell Makinenize klonlayın:
git clone https://github.com/AbiramiSukumaran/movie_score_genai_insights
  1. Cloud Shell Makinenizde oluşturulan yeni proje dizinine gidin:
cd movie_score_genai_insights
  1. 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
  1. 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ı:

  1. CREATE MODEL ifadesi, SELECT ifadesindeki eğitim verilerini kullanarak bir modeli eğitir.
  2. 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.
  3. data_split_method=‘NO_SPLIT&#39; BQML'yi sorgu koşullarına (data_cat = ‘TRAIN’) göre veriler üzerinde eğitmeye 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.
  4. 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.
  5. "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.
  6. 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.
  7. 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:

2e43087f914aa466.png

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:

7f2dc168bac0ac1a.png

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:

c719844860ce7c27.png

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:

  1. Modelinizin bu tahmin sonuçlarını neden oluşturduğunu anlamak için ML.EXPLAIN_PREDICT işlevini kullanabilirsiniz.
  2. 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

  1. Oluşturduğumuz film_puanı, bu adım için de girdi sağlar.
  2. BigQuery ML ile Vertex hizmetleri arasında erişim sağlamak için Harici Bağlantı oluşturulur.
  3. 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:

  1. 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
  2. "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

8a87802ab0846a6.png

  1. 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

ff8e1d730879f972.png

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:

a3691afc0a97e724.png

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:

1aaa0c514fccab59.png

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.