Generative Insights mit BigQuery SQL und Vertex AI

1. Einführung

In diesem Codelab erstellen wir eine Vorhersage- und Rezept-App für Filmerfolgsbewertungen mit BigQuery-SQL-Abfragen und der PaLM API von Vertex AI. Das für die Textgenerierung verwendete Modell ist text-bison und wird als Remote-Funktion in BigQuery gehostet.

Folgende Dienste werden verwendet:

  1. BigQuery ML
  2. Vertex AI PaLM API
  3. Cloud Shell

Aufgaben

Sie erstellen

  • Ein BigQuery-Dataset, das das Modell enthält
  • Ein BigQuery ML-Modell, das die Erfolgsquote eines Films basierend auf den Attributen GENRE und RUNTIME des Films vorhersagt
  • Ein BigQuery-Modell, das die Vertex AI PaLM API als Remote-Funktion hostet
  • Eine externe Verbindung zum Herstellen der Verbindung zwischen BigQuery und Vertex AI

2. Voraussetzungen

  • Ein Browser wie Chrome oder Firefox
  • Ein Google Cloud-Projekt mit aktivierter Abrechnung

Hinweis

  1. Wählen Sie in der Google Cloud Console auf der Seite für die Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
  2. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. Prüfen, ob die Abrechnung für ein Projekt aktiviert ist
  3. Achten Sie darauf, dass alle erforderlichen APIs (BigQuery API, Vertex AI API, BigQuery Connection API) aktiviert sind
  4. Sie verwenden Cloud Shell, eine in Google Cloud ausgeführte Befehlszeilenumgebung mit vorinstalliertem bq. Informationen zu gcloud-Befehlen und deren Verwendung finden Sie in der Dokumentation.

Klicken Sie in der Cloud Console oben rechts auf „Cloud Shell aktivieren“:

51622c00acec2fa.png

Wenn Ihr Projekt noch nicht eingerichtet ist, verwenden Sie den folgenden Befehl, um es festzulegen:

gcloud config set project <YOUR_PROJECT_ID>
  1. Rufen Sie die BigQuery-Konsole direkt auf, indem Sie die folgende URL in Ihren Browser eingeben: https://console.cloud.google.com/bigquery

3. Daten vorbereiten

In diesem Anwendungsfall verwenden wir das Film-Dataset, das von der Movielens-Quelle abgeleitet wurde.

  1. Erstellen Sie ein Dataset:

Ein BigQuery-Dataset ist eine Sammlung von Tabellen. Alle Tabellen in einem Dataset werden am selben Datenspeicherort gespeichert. Sie können auch benutzerdefinierte Zugriffssteuerungen hinzufügen, um den Zugriff auf ein Dataset und dessen Tabellen einzuschränken.

Verwenden Sie in Cloud Shell den Befehl „bq mk“, um ein Dataset namens „movie_insights“ zu erstellen.

bq mk --location=us-central1 movie_insights
  1. Klonen Sie die Quelldatei auf Ihre Cloud Shell-Maschine:
git clone https://github.com/AbiramiSukumaran/movie_score_genai_insights
  1. Rufen Sie das neue Projektverzeichnis auf, das auf Ihrer Cloud Shell-Maschine erstellt wurde:
cd movie_score_genai_insights
  1. Verwenden Sie den Befehl bq Loading, um Ihre CSV-Datei in eine BigQuery-Tabelle zu laden. Beachten Sie, dass Sie den Upload auch direkt über die BigQuery-Benutzeroberfläche durchführen können:
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. Sie können ein Beispiel abfragen, um zu prüfen, ob die Tabelle „movie_score“ und die Daten im Dataset erstellt werden:
bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movie_insights.movie_score limit 3;

4. Daten zu ML

Als Nächstes erstellen wir ein Klassifizierungsmodell, um die Erfolgsquote des Films basierend auf den Attributen GENRE und RUNTIME vorherzusagen. Wir verwenden die Anweisung CREATE MODEL mit der Option „LOGISTIC_REG“. ein logistisches Regressionsmodell zu erstellen und zu trainieren.

Führen Sie die folgende Abfrage in der BigQuery-Konsole im Abschnitt „SQL Workspace QUERY EDITOR“ aus:

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';

Abfragedetails:

  1. Mit der CREATE MODEL-Anweisung wird ein Modell mithilfe der Trainingsdaten der SELECT-Anweisung trainiert.
  2. Die OPTIONS-Klausel gibt den Modelltyp und die Trainingsoptionen an. In diesem Fall gibt die Option LOGISTIC_REG einen Typ eines logistischen Regressionsmodells an. Es ist nicht erforderlich, ein binäres logistisches Regressionsmodell gegenüber einem mehrklassigen logistischen Regressionsmodell anzugeben: BigQuery ML kann anhand der Anzahl eindeutiger Werte in der Labelspalte bestimmen, welches Modell trainiert werden soll.
  3. data_split_method=‘NO_SPLIT&#39; BQML zwingt BQML dazu, die Daten gemäß den Abfragebedingungen (data_cat = TRAIN) zu trainieren. Beachten Sie auch, dass es besser ist, den AUTO_SPLIT zu verwenden. , damit das Framework (in diesem Fall der Dienst) die Partition der Trainings-/Testaufteilungen zufällig anordnen kann.
  4. Die Option „input_label_cols“ gibt an, welche Spalte in der SELECT-Anweisung als Labelspalte verwendet werden soll. Hier ist die Label-Spalte „Score“, sodass das Modell anhand der anderen in jeder Zeile vorhandenen Werte lernt, welcher der 10 Score-Werte am wahrscheinlichsten ist.
  5. Mit „auto_class_weights=TRUE“ die Klassenlabels in den Trainingsdaten ausgleichen. Standardmäßig sind die Trainingsdaten ungewichtet. Wenn die Labels in den Trainingsdaten unausgewogen sind, lernt das Modell möglicherweise, die beliebteste Labelklasse stärker vorherzusagen.
  6. Die SELECT-Anweisung fragt die Tabelle ab, die wir mit den CSV-Daten geladen haben. Die WHERE-Klausel filtert die Zeilen in der Eingabetabelle, sodass nur das TRAIN-Dataset in diesem Schritt ausgewählt wird.
  7. Die folgenden Konstrukte sind OPTIONAL, sodass BigQuery ML sie explizit in der Vertex AI Model Registry registrieren kann. Weitere Informationen dazu finden Sie in diesem Blog.. model_registry='vertex_ai', vertex_ai_model_version_aliases=['logistic_reg', 'experimental']

Nach der Erstellung wird im Abschnitt „SCHEMA“ des BigQuery-SQL-Arbeitsbereichs Folgendes angezeigt:

2e43087f914aa466.png

Nachdem Sie Ihr Modell erstellt haben, bewerten Sie die Leistung des Modells mithilfe der Funktion ML.EVALUATE. Mit der Funktion ML.EVALUATE werden die vorhergesagten Werte mit den tatsächlichen Daten verglichen.

Sie können die Bewertungsmesswerte Ihres Modells auch auf der Seite MODEL ansehen:

7f2dc168bac0ac1a.png

Die wichtigsten Messwerte auf einen Blick:

Genauigkeit - Welcher Anteil der positiven Identifizierungen war tatsächlich richtig? Precision = Richtig-positiv / (Richtig-positiv + falsch-positiv) Recall – Welcher Anteil der tatsächlich positiven Ergebnisse wurde richtig identifiziert? Trefferquote = Richtig-positiv / (Richtig-positiv + falsch-negativ) Genauigkeit – Ein Messwert zum Bewerten von Klassifizierungsmodellen. Dies ist der Anteil der Vorhersagen, die unser Modell tatsächlich richtig getroffen hat. Genauigkeit = Anzahl der richtigen Vorhersagen ÷ Gesamtzahl der Vorhersagen

5. Filmpunktzahl mit dem Modell vorhersagen

Zeit für die Vorhersage!!!! Die folgende Abfrage sagt die Punktzahl jedes Films im Dataset voraus, das als „TEST“ kategorisiert ist Daten.

Führen Sie die folgende Abfrage in der BigQuery-Konsole im Abschnitt „SQL Workspace QUERY EDITOR“ aus:

SELECT
  *
FROM
  ML.PREDICT (MODEL movie_insights.model_rating_by_runtime_genre,
    (
    SELECT
      *
    FROM
      movie_insights.movie_score
    WHERE
      data_cat= 'TEST'
     )
  );

Das Ergebnis sieht so aus:

c719844860ce7c27.png

Das Modellergebnis zeigt den vorhergesagten Wert des Films auf einer Skala von 1 bis 10 (Klassifizierung). Sie fragen sich vielleicht, warum es für jeden Film mehrere Vorhersagezeilen gibt. Das liegt daran, dass das Modell die möglichen vorhergesagten Labels und deren Eintrittswahrscheinlichkeit in absteigender Reihenfolge zurückgegeben hat.

Analysieren Sie die vorhergesagten Ergebnisse und das Modell:

Mit der Vorhersage können Sie zwei großartige Analyseschritte durchführen, um die Ergebnisse zu verstehen:

  1. Mit der Funktion ML.EXPLAIN_PREDICT können Sie nachvollziehen, warum Ihr Modell diese Vorhersageergebnisse generiert.
  2. Mit der Funktion ML.GLOBAL_EXPLAIN können Sie ermitteln, welche Funktionen zur Bestimmung der Einkommensklasse im Allgemeinen am wichtigsten sind.

Ausführliche Informationen zu diesen Schritten finden Sie in der Dokumentation.

6. Daten zu generativer KI

Lassen Sie uns Informationen über das Film-Dataset liefern, indem wir LLM (Large Language Model) die Zusammenfassung der Faktoren abfragen, die sich auf die Filmpunktzahl auswirken, und zwar größer als 5, wobei die generative KI das (neueste) Text-Bison-Modell von Vertex AI ausschließlich mit SQL-Abfragen nutzt.

  1. Die von uns erstellte Tabelle „movie_score“ ist auch die Eingabe für diesen Schritt.
  2. Es wird eine externe Verbindung erstellt, um den Zugriff zwischen BigQuery ML und Vertex-Diensten herzustellen.
  3. Mit dem BigQuery-Konstrukt „GENERATE_TEXT“ wird die PaLM API remote über Vertex AI aufgerufen.

7. Externe Verbindung herstellen

Aktivieren Sie die BQ Connection API, falls noch nicht geschehen, und notieren Sie sich die Dienstkonto-ID aus den Details zur Verbindungskonfiguration:

  1. Klicken Sie im Bereich „BigQuery Explorer“ (links in der BigQuery-Konsole) auf die Schaltfläche „+ HINZUFÜGEN“ und dann auf „Verbindung zu externen Datenquellen“. beliebten Quellen aufgelistet sind,
  2. Wählen Sie als Verbindungstyp „BigLake and remote features“ (BigLake und Remote-Funktionen) aus und geben Sie als Standorttyp „Region“ an. und als Wert „us-central1 (Iowa)“ eingeben. und „bq_llm_connection“ als Verbindungs-ID

8a87802ab0846a6.png

  1. Notieren Sie sich nach dem Erstellen der Verbindung das Dienstkonto, das aus den Details zur Verbindungskonfiguration generiert wurde.

Berechtigungen erteilen

In diesem Schritt werden dem Dienstkonto Berechtigungen für den Zugriff auf den Vertex AI-Dienst gewährt:

Öffnen Sie IAM und fügen Sie das Dienstkonto hinzu, das Sie nach dem Erstellen der externen Verbindung als Hauptkonto kopiert haben. Wählen Sie dann „Vertex AI-Nutzer“ aus. Rolle

ff8e1d730879f972.png

8. Remote-ML-Modell erstellen

Erstellen Sie das Remote-Modell, das ein gehostetes Vertex AI Large Language Model darstellt:

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');

Es wird ein Modell mit dem Namen llm_model im Dataset movie_insights erstellt, das die CLOUD_AI_LARGE_LANGUAGE_MODEL_V1 API von Vertex AI als Remote-Funktion verwendet. Dieser Vorgang kann einige Sekunden dauern.

9. Text mit dem ML-Modell generieren

Nachdem das Modell erstellt wurde, können Sie damit Text generieren, zusammenfassen oder kategorisieren.

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));

**Erläuterung:

ml_generate_text_result** ist die Antwort des Textgenerierungsmodells im JSON-Format, die sowohl Inhalts- als auch Sicherheitsattribute enthält: a. Der Inhalt stellt das generierte Textergebnis dar. b. Sicherheitsattribute stellen den integrierten Inhaltsfilter mit einem anpassbaren Schwellenwert dar, der in der Palm API von Vertex AI aktiviert ist, um unbeabsichtigte oder unvorhergesehene Antworten vom Large Language Model zu vermeiden. Die Antwort wird blockiert, wenn sie den Sicherheitsgrenzwert überschreitet.

ML.GENERATE_TEXT ist das Konstrukt, das Sie in BigQuery verwenden, um auf das Vertex AI-LLM für Textgenerierungsaufgaben zuzugreifen

Mit CONCAT werden die PROMPT-Anweisung und der Datenbankeintrag angehängt.

movie_insights ist der Name des Datasets und „movie_score“ ist der Name der Tabelle mit den Daten, die im Prompt-Entwurf verwendet werden.

Temperatur ist der Prompt-Parameter, mit dem die Zufälligkeit der Antwort gesteuert werden kann – je geringer die Relevanz ist, desto besser.

Max_output_tokens ist die Anzahl der Wörter, die als Antwort zurückgegeben werden sollen.

Die Abfrageantwort sieht so aus:

a3691afc0a97e724.png

Die Antwort ist verschachtelt und unformatiert.

10. Abfrageergebnis vereinfachen

Wir vereinfachen das Ergebnis, damit wir das JSON-Format in der Abfrage nicht explizit decodieren müssen:

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));

**Erläuterung:

Flatten_json_output** steht für den booleschen Wert. Wenn dieser Wert auf „true“ gesetzt ist, wird ein einfacher verständlicher Text zurückgegeben, der aus der JSON-Antwort extrahiert wurde.

Die Abfrageantwort sieht so aus:

1aaa0c514fccab59.png

11. Bereinigen

Damit Ihrem Google Cloud-Konto die in diesem Beitrag verwendeten Ressourcen nicht in Rechnung gestellt werden, können Sie den Vertex AI-Endpunkt löschen, den Sie im Rahmen des ML-Schritts erstellt haben. Rufen Sie dazu die Seite „Vertex AI Endpoint“ auf.

12. Glückwunsch

Glückwunsch! Sie haben erfolgreich ein BQML-Modell erstellt und LLM-basierte Analysen mit einer Vertex AI API für Ihr Film-Dataset nur mithilfe von SQL-Abfragen durchgeführt. Weitere Informationen zu verfügbaren Modellen finden Sie in der Produktdokumentation zu Vertex AI LLM.