1. Introduction
Dans cet atelier de programmation, nous allons créer une application de prédiction et de prescription de notes de réussite d'un film à l'aide de requêtes SQL BigQuery et de l'API Vertex AI PaLM. Le modèle utilisé pour générer du texte est text-bison. Il est hébergé en tant que fonction distante dans BigQuery.
Voici la liste des services utilisés:
- BigQuery ML
- API Vertex AI PaLM
- Cloud Shell
Ce que vous allez faire
Vous allez créer
- Un ensemble de données BigQuery qui contiendra le modèle
- Un modèle BigQuery ML qui prédit le score de réussite d'un film en fonction des attributs GENRE et RUNTIME de ce film
- Un modèle BigQuery qui héberge l'API Vertex AI PaLM en tant que fonction distante
- Une connexion externe pour établir la connexion entre BigQuery et Vertex AI
2. Conditions requises
Avant de commencer
- Dans la console Google Cloud, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
- Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
- Assurez-vous que toutes les API nécessaires (API BigQuery, API Vertex AI, API BigQuery Connection) sont activées
- Vous allez utiliser Cloud Shell, un environnement de ligne de commande qui s'exécute dans Google Cloud et qui est préchargé avec bq. Consultez la documentation pour en savoir plus sur les commandes gcloud et leur utilisation.
Dans la console Cloud, cliquez sur "Activer Cloud Shell" en haut à droite :
Si votre projet n'est pas défini, utilisez la commande suivante pour le définir :
gcloud config set project <YOUR_PROJECT_ID>
- Accédez directement à la console BigQuery en saisissant l'URL suivante dans votre navigateur: https://console.cloud.google.com/bigquery.
3. Préparation des données…
Dans ce cas d'utilisation, nous allons utiliser l'ensemble de données "movies" issu de la source movielens.
- Créez un ensemble de données:
Un ensemble de données BigQuery est un ensemble de tables. Toutes les tables d'un ensemble de données sont stockées dans le même emplacement de données. Vous pouvez également associer des contrôles d'accès personnalisés pour limiter l'accès à un ensemble de données et à ses tables.
Dans Cloud Shell, utilisez la commande bq mk pour créer un ensemble de données nommé "movie_insights".
bq mk --location=us-central1 movie_insights
- Clonez le fichier source sur votre machine Cloud Shell:
git clone https://github.com/AbiramiSukumaran/movie_score_genai_insights
- Accédez au répertoire de projet créé sur votre machine Cloud Shell:
cd movie_score_genai_insights
- Utilisez la commande bq load pour charger votre fichier CSV dans une table BigQuery (notez que vous pouvez également importer directement depuis l'interface utilisateur de 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
- Vous pouvez interroger un exemple pour vérifier si la table "movie_score" et les données ont été créées dans le jeu de données:
bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movie_insights.movie_score limit 3;
4. Des données au ML
Nous allons maintenant créer un modèle de classification pour prédire le taux de réussite du film en fonction des attributs GENRE et RUNTIME. Nous allons utiliser l'instruction CREATE MODEL avec l'option "LOGISTIC_REG". pour créer et entraîner un modèle de régression logistique.
Exécutez la requête ci-dessous dans la section "ÉDITEUR DE REQUÊTES D'Espace de travail SQL" de la console 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';
Détails de la requête:
- L'instruction CREATE MODEL entraîne un modèle à l'aide des données d'entraînement de l'instruction SELECT.
- La clause OPTIONS spécifie le type de modèle et les options d'entraînement. Ici, l'option LOGISTIC_REG spécifie un type de modèle de régression logistique. Il n'est pas nécessaire de spécifier un modèle de régression logistique binaire plutôt qu'un modèle de régression logistique multiclasse: BigQuery ML peut déterminer quel modèle entraîner en fonction du nombre de valeurs uniques dans la colonne d'étiquette.
- data_split_method=‘NO_SPLIT' Force BQML à s'entraîner sur les données en fonction des conditions de la requête (data_cat = "TRAIN"). Notez également qu'il est préférable d'utiliser la valeur "AUTO_SPLIT" dans cette option pour permettre au framework (ou au service, dans ce cas) de randomiser la partition des divisions entraînement/test.
- L'option "input_label_cols" spécifie la colonne de l'instruction SELECT à utiliser comme colonne d'étiquette. Ici, la colonne d'étiquette correspond au score. Le modèle détermine donc laquelle des 10 valeurs de score est la plus probable en fonction des autres valeurs présentes dans chaque ligne.
- La valeur "auto_class_weights=TRUE" équilibre les étiquettes de classe dans les données d'entraînement. Par défaut, les données d'entraînement ne sont pas pondérées. Si les étiquettes des données d'entraînement sont déséquilibrées, le modèle peut apprendre à prédire en priorité la classe d'étiquettes la plus populaire.
- L’instruction SELECT interroge la table que nous avons chargée avec les données csv. La clause WHERE filtre les lignes de la table d'entrée afin que seul l'ensemble de données TRAIN soit sélectionné à cette étape.
- Les constructions suivantes sont FACULTATIVEs afin que BigQuery ML puisse les enregistrer explicitement dans le registre de modèles Vertex AI. Pour en savoir plus, consultez ce blog.
. model_registry='vertex_ai', vertex_ai_model_version_aliases=['logistic_reg', 'experimental']
Une fois créé, le code ci-dessous apparaît dans la section SCHEMA de l'espace de travail BigQuery SQL:
Après avoir créé votre modèle, évaluez ses performances à l'aide de la fonction ML.EVALUATE. Cette fonction compare les valeurs prédites aux données réelles.
Vous pouvez également afficher les métriques d'évaluation de votre modèle à partir de la page MODÈLE:
Aperçu des métriques clés:
Précision : quelle proportion d'identifications positives était réellement correcte ? Précision = Vrai positif / Rappel (vrai positif + faux positif) - Quelle proportion de positifs réels a été identifiée correctement ? Rappel = Vrai positif / Précision (Vrai positif + Faux négatif) - Métrique permettant d'évaluer les modèles de classification, c'est la fraction de prédictions que notre modèle a réellement correctes Précision = Nombre de prédictions correctes / Nombre total de prédictions
5. Prédire le score d'un film à l'aide du modèle
C'est l'heure de la prédiction ! La requête suivante prédit le score de chaque film de l'ensemble de données classé dans la catégorie "TEST" données.
Exécutez la requête ci-dessous dans la section "ÉDITEUR DE REQUÊTES D'Espace de travail SQL" de la console BigQuery:
SELECT
*
FROM
ML.PREDICT (MODEL movie_insights.model_rating_by_runtime_genre,
(
SELECT
*
FROM
movie_insights.movie_score
WHERE
data_cat= 'TEST'
)
);
Le résultat ressemble à ceci:
Le résultat du modèle affiche le score_prédictif du film sur une échelle de 1 à 10 (classification). Vous devez vous demander pourquoi il y a plusieurs lignes de prédiction pour chaque film. En effet, le modèle a renvoyé les étiquettes prédites possibles et la probabilité d'occurrence de chacune d'elles dans l'ordre décroissant.
Analysez les résultats prédits et le modèle:
Vous pouvez effectuer deux grandes étapes d'analyse avec la prédiction pour comprendre les résultats:
- Pour comprendre pourquoi votre modèle génère ces résultats de prédiction, vous pouvez utiliser la fonction ML.EXPLAIN_PREDICT.
- Afin d'identifier les caractéristiques les plus importantes pour déterminer la tranche de revenu en général, vous pouvez utiliser la fonction ML.GLOBAL_EXPLAIN.
Pour en savoir plus sur ces étapes, consultez la documentation.
6. Des données à l'IA générative
À présent, fournissons des insights sur l'ensemble de données de films en demandant au LLM (Large Language Model) le résumé des facteurs qui font que le score d'un film doit être supérieur à 5. L'IA générative utilise le modèle text-bison (le plus récent) de Vertex AI, en utilisant uniquement des requêtes SQL.
- La table que nous avons créée "movie_score" servira également d'entrée pour cette étape.
- Une connexion externe sera créée pour établir l'accès entre les services BigQuery ML et Vertex.
- La construction BigQuery GENERATE_TEXT sera utilisée pour appeler l'API PaLM à distance depuis Vertex AI.
7. Créer une connexion externe
Si ce n'est pas déjà fait, activez l'API BQ Connection et notez l'ID du compte de service dans les détails de la configuration de la connexion:
- Cliquez sur le bouton "+ AJOUTER" dans le volet "Explorateur BigQuery" (à gauche de la console BigQuery), puis cliquez sur "Connexion à des sources de données externes". dans les sources populaires listées
- Sélectionnez "Type de connexion" sur "BigLake et fonctions distantes", indiquez "Région" comme type d'emplacement et la valeur "us-central1 (Iowa)" et "bq_llm_connection" comme ID de connexion
- Une fois la connexion créée, notez le compte de service généré à partir des détails de la configuration de la connexion.
Octroyer des autorisations
Au cours de cette étape, nous allons autoriser le compte de service à accéder au service Vertex AI:
Ouvrez IAM et ajoutez le compte de service que vous avez copié après avoir créé la connexion externe en tant que compte principal, puis sélectionnez "Utilisateur Vertex AI" Rôle
8. Créer un modèle de ML distant
Créez le modèle distant qui représente un grand modèle de langage Vertex AI hébergé:
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');
Elle crée un modèle nommé llm_model dans l'ensemble de données movie_insights
, qui exploite l'API CLOUD_AI_LARGE_LANGUAGE_MODEL_V1 de Vertex AI en tant que fonction distante. Cette opération prend quelques secondes.
9. Générer du texte à l'aide du modèle de ML
Une fois le modèle créé, utilisez-le pour générer, résumer ou catégoriser le texte.
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));
**Explication:
ml_generate_text_result** est la réponse du modèle de génération de texte au format JSON qui contient à la fois les attributs de contenu et de sécurité: a. "Contenu" représente le résultat textuel généré : b. Les attributs de sécurité représentent le filtre de contenu intégré avec un seuil ajustable activé dans l'API Vertex AI Palm pour éviter toute réponse inattendue ou imprévue du grand modèle de langage. La réponse est bloquée si elle ne respecte pas le seuil de sécurité.
ML.GENERATE_TEXT est la construction que vous utilisez dans BigQuery pour accéder au LLM Vertex AI afin d'effectuer des tâches de génération de texte.
CONCAT ajoute votre instruction PROMPT et l'enregistrement de la base de données
movie_insights est le nom de l'ensemble de données et movie_score le nom de la table qui contient les données que nous utiliserons dans la conception de la requête.
La température est le paramètre d'invite permettant de contrôler le caractère aléatoire de la réponse. Plus la température est faible, mieux c'est en termes de pertinence.
Max_output_tokens correspond au nombre de mots que vous souhaitez inclure dans la réponse.
La réponse à la requête se présente comme suit:
Comme vous pouvez le voir, la réponse est imbriquée et sans mise en forme.
10. Aplatir le résultat de la requête
Aplatissons le résultat pour ne pas avoir à décoder le JSON explicitement dans la requête:
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));
**Explication:
Flatten_json_output** représente la valeur booléenne qui, si elle est définie sur "true", renvoie un texte compréhensible plat extrait de la réponse JSON.
La réponse à la requête se présente comme suit:
11. Effectuer un nettoyage
Pour éviter que les ressources utilisées dans cet article soient facturées sur votre compte Google Cloud, vous pouvez supprimer le point de terminaison Vertex AI que vous avez créé lors de l'étape de ML en accédant à la page "Point de terminaison Vertex AI".
12. Félicitations
Félicitations ! Vous avez créé un modèle BigQuery ML et effectué des analyses basées sur un LLM à l'aide d'une API Vertex AI sur votre ensemble de données de films en utilisant uniquement des requêtes SQL. Pour en savoir plus sur les modèles disponibles, consultez la documentation sur les LLM de Vertex AI.