Insights LLM in-Place: BigQuery et Gemini pour l'analyse de données structurées et non structurées

1. Introduction

Les ensembles de données volumineux contiennent des informations précieuses, mais extraire une compréhension significative peut s'avérer une tâche ardue. Les outils d'analyse traditionnels ne parviennent souvent pas à fournir des explications nuancées, semblables à celles des humains, qui nous aident à comprendre réellement l'histoire de nos données. Les entrepôts de données contiennent de plus en plus de données non structurées, mais ces données n'ont pas toujours été accessibles pour obtenir des insights. Le texte, les images et les vidéos non structurés contiennent des informations précieuses pour faire évoluer votre entreprise. Les LLM constituent une nouvelle façon efficace de comprendre vos données. Vous bénéficiez ainsi d'explications, d'une analyse des sentiments, de la détection d'objets et plus encore. Avec l'émergence des modèles multimodaux (et la possibilité de stocker des données d'objets comme des images et des vidéos dans BigQuery via des tables d'objets), intégrer de puissants LLM tels que Gemini 1.0 Pro (pour l'analyse textuelle) et Gemini 1.0 Pro Vision (pour l'analyse de texte et d'images/vidéos) avec BigQuery peut transformer la façon dont vous analysez les données.

Dans cet atelier de programmation, nous allons examiner les deux méthodes suivantes permettant de tirer des insights LLM à partir de vos données d'entreprise et de convertir ces insights en milliers de lignes dans BigQuery:

Méthode 1: Appel du modèle distant

  • Appelez Gemini 1.0 Pro depuis BigQuery en utilisant ML.GENERATE_TEXT dans la requête SELECT.
  • Utilisez cette approche lorsque le modèle est déjà disponible en tant que modèle distant dans BigQuery et que vous souhaitez l'utiliser tel quel. Vérifiez l'état du modèle que vous souhaitez utiliser dans la documentation BigQuery.

Méthode 2: Implémentation d'une fonction distante

  • appeler une fonction Cloud qui implémente l'appel Gemini 1.0 Pro Vision, exposée en tant que fonction distante dans BigQuery ;
  • Utilisez cette approche lorsque le modèle que vous souhaitez utiliser n'est pas disponible prêt à l'emploi en tant que modèle distant ou que vous souhaitez bénéficier de plus de flexibilité et de personnalisations dans votre cas d'utilisation.

Objectifs de l'atelier

  • Pour la méthode Appel de modèle distant, vous allez créer un outil de synthèse des emplacements pour l'ensemble de données de livres d'archives Internet (accessible publiquement dans BigQuery) en appelant le modèle distant pour Gemini 1.0 Pro dans la construction ML.GENERATE_TEXT dans BigQuery.

Schéma de flux pour l'appel de modèle distant

  • Pour la méthode Implémentation de la fonction à distance, vous allez créer un programme de validation d'images pour valider des images de test par rapport à une image de référence. Pour cela, vous allez créer un ensemble de données contenant des captures d'écran d'images de test dans une table externe, puis demander à Gemini 1.0 Pro Vision de les valider par rapport à l'image de référence. Ensuite, vous créerez une fonction Cloud Java qui implémente l'appel Gemini Pro Vision et l'appellerez en tant que fonction distante dans BigQuery.

Organigramme de l'implémentation d'une fonction distante

Remarque :

D'autres modèles d'IA générative Vertex AI pourraient être disponibles en tant que modèles distants dans BigQuery. Cela signifie que vous pouvez accéder à ces modèles avec la construction ML.GENERATE_TEXT prête à l'emploi de BigQuery. Toutefois, même si les modèles distants sont disponibles, vous avez toujours la possibilité de créer des personnalisations avancées pour votre cas d'utilisation avec Cloud Functions, puis d'accéder à ces modèles en tant que fonctions distantes à partir de BigQuery.

Pourquoi passer à BigQuery ?

BigQuery est un entrepôt de données multicloud sans serveur qui peut passer de plusieurs octets à plusieurs pétaoctets avec des coûts opérationnels minimaux. Il s'agit donc d'un outil idéal pour stocker des données d'entraînement de ML. Les fonctionnalités d'analyse et de machine learning de BigQuery ML intégrées vous permettent de créer des prédictions sans code en utilisant uniquement des requêtes SQL. De plus, vous pouvez accéder aux données de sources externes à l'aide de requêtes fédérées, éliminant ainsi le besoin de pipelines ETL complexes.

BigQuery est un entrepôt de données cloud entièrement géré qui aide les utilisateurs à analyser des données structurées, semi-structurées et non structurées.

2. Conditions requises

  • Un navigateur tel que Chrome ou Firefox
  • Un projet Google Cloud avec facturation activée.

3. Avant de commencer

  1. Dans la console Google Cloud, sur la page du sélecteur de projet, sélectionnez ou créez un projet Google Cloud.
  2. 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 .
  3. Vous allez utiliser Cloud Shell, un environnement de ligne de commande exécuté dans Google Cloud et doté de bq. Cliquez sur "Activer Cloud Shell" en haut de la console Google Cloud.

Image du bouton "Activer Cloud Shell"

  1. Une fois connecté à Cloud Shell, vérifiez que vous êtes déjà authentifié et que le projet est défini sur votre ID de projet à l'aide de la commande suivante:
gcloud auth list
  1. Exécutez la commande suivante dans Cloud Shell pour vérifier que la commande gcloud connaît votre projet.
gcloud config list project
  1. Si votre projet n'est pas défini, utilisez la commande suivante pour le définir :
gcloud config set project <YOUR_PROJECT_ID>
  1. Accédez à Gemini pour Google Cloud Marketplace pour activer l'API. Vous pouvez également exécuter la commande suivante dans le terminal Cloud Shell:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
  1. Assurez-vous que les API suivantes sont activées:
  • BigQuery
  • Connexion BigQuery
  • Cloud Functions
  • Cloud Run
  • Vertex AI
  • Cloud Build
  • API Cloud Storage

L'alternative à l'utilisation de la commande gcloud consiste à passer par la console à l'aide de ce lien.

Consultez la documentation pour connaître les commandes gcloud ainsi que leur utilisation.

4. Créer un ensemble de données BigQuery et une connexion externe

Commençons par créer un ensemble de données et une connexion à une ressource cloud.

Dans BigQuery, un ensemble de données est un conteneur pouvant contenir l'ensemble des tables et des objets de votre application.

Pour créer un ensemble de données, procédez comme suit:

  1. Accédez à la page BigQuery de la console Google Cloud.
  2. Sur le panneau Explorateur, sélectionnez le projet pour lequel vous souhaitez créer l'ensemble de données.
  3. Développez l'option Actions (icône représentant des points de suspension verticaux), puis cliquez sur Créer un ensemble de données.

Image du menu &quot;Actions&quot; et de l&#39;option &quot;Créer un ensemble de données&quot;

  1. Cliquez sur Créer un ensemble de données.
  2. Saisissez gemini_bq_fn dans le champ ID de l'ensemble de données.
  3. Définissez le type de lieu sur Multi-region et acceptez la valeur par défaut, qui est US(multiple regions in United States..
  4. Cliquez sur Créer un ensemble de données.
  5. Vérifiez que l'ensemble de données est créé et répertorié sous l'ID de votre projet dans le volet Explorateur.

Une connexion BigQuery est nécessaire pour interagir avec votre fonction Cloud. Pour créer une fonction distante, vous devez créer une connexion BigQuery. Dans cet atelier de programmation, nous allons utiliser la connexion BigLake pour accéder au modèle depuis BigQuery via la fonction Cloud. Les connexions BigLake aident à connecter la source de données externe tout en conservant une sécurité et un contrôle des accès ultraprécis dans BigQuery. Dans notre cas, il s'agit de l'API Gemini Pro de Vertex AI.

Pour créer la connexion BigLake, procédez comme suit:

  1. Cliquez sur Ajouter dans le volet Explorateur de la page BigQuery.

Console BigQuery avec le bouton &quot;AJOUTER&quot; mis en évidence pour ajouter une connexion externe

  1. Cliquez sur Connexions à des sources de données externes.
  2. Dans le menu "Type de connexion", sélectionnez Modèles distants Vertex AI, fonctions distantes et BigLake (ressource cloud).
  3. Dans le champ ID de connexion, saisissez gemini-bq-conn comme nom de connexion.
  4. Définissez le type de lieu sur Multi-region et acceptez la valeur par défaut, qui est US(multiple regions in United States..
  5. Cliquez sur Créer une connexion.
  6. Cliquez sur Accéder à la connexion,puis copiez l'ID du compte de service dans le volet Informations sur la connexion.

Capture d&#39;écran des informations sur la connexion

  1. Accédez à la page IAM et administration, puis cliquez sur Accorder l'accès.
  2. Collez l'ID du compte de service dans le champ Nouveaux principes.
  3. Sélectionnez le rôle Vertex AI user dans la liste des rôles, puis cliquez sur Enregistrer.

Capture d&#39;écran &quot;Accorder l&#39;accès au compte de service&quot;

L'ensemble de données et la connexion à BigQuery ont bien été créés. Vous allez ensuite suivre les étapes requises pour appeler un modèle distant.

5. Cas d'utilisation n° 1 : appel de modèle distant : configurer un appel de modèle distant

Maintenant que vous avez créé votre ensemble de données et votre connexion, créons dans BigQuery un modèle basé sur le modèle de fondation de Vertex AI Gemini Pro. À la fin de cet exercice, votre application LLM sera opérationnelle en utilisant uniquement des requêtes SQL.

Étape 1: Créez une table BigQuery contenant les données d'entrée pour le modèle distant

Dans votre ensemble de données, créez une table nommée books pouvant contenir environ 50 enregistrements de la table bigquery-public-data.gdelt_internetarchivebooks.1905 de l'ensemble de données Internet Archive Books qui est mis à disposition par BigQuery pour un usage public.

Pour ce faire, exécutez l'instruction LDD (langage de définition de données) suivante à partir du volet de l'éditeur SQL BigQuery:

create or replace table gemini_bq_fn.books as (
select *
from
bigquery-public-data.gdelt_internetarchivebooks.1905 limit 50)

Étape 2 : Créez un modèle BigQuery

Créez un modèle dans votre ensemble de données. Pour ce faire, exécutez le LDD suivant à partir du volet de l'éditeur SQL BigQuery:

CREATE MODEL `gemini_bq_fn.gemini_remote_model`
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS(ENDPOINT = 'gemini-pro');

Notez que le modèle est créé avec une option permettant de l'afficher.

Étape 3 : Testez votre nouvelle application d'IA générative

Utilisez la fonction ML.GENERATE_TEXT dans une requête SELECT pour envoyer une requête au modèle distant.

SELECT ml_generate_text_llm_result as Gemini_Response, prompt as Prompt
FROM ML.GENERATE_TEXT(MODEL `gemini_bq_fn.gemini_remote_model`,
 (select 'You are a text summarizer and standardizer. From the following text that contains address locations, standardize and print one standardized, consolidated address. You cannot return empty because you know how to pick up sensible data from the text in this field: ' ||
substring(locations, 0, 200) as prompt
from `gemini_bq_fn.books`),
STRUCT(
 TRUE AS flatten_json_output));

Vous devriez obtenir le résultat suivant :

Résultat de la requête ML.GENERATE_TEXT dans BigQuery

Félicitations ! Vous avez réussi à analyser des données textuelles dans une table BigQuery à l'aide d'un modèle distant (basé sur un modèle gemini-pro) avec la fonction ML.GENERATE_TEXT.

Essayons maintenant un autre modèle Vertex AI avec des fonctions distantes BigQuery. Supposons que vous souhaitiez plus de personnalisation et de flexibilité dans l'utilisation du modèle à distance dans BigQuery. Les modèles compatibles sont listés dans la documentation de BigQuery.

6. Cas d'utilisation n° 2 : Implémentation d'une fonction à distance : configurer l'implémentation d'une fonction à distance

Dans cet exercice, vous allez créer dans BigQuery une fonction basée sur la fonction Cloud Java qui implémente le modèle de fondation de Gemini 1.0 Pro Vision. Tout d'abord, vous allez créer et déployer la fonction Cloud Java pour comparer des images à l'aide du modèle Vision de Gemini 1.0 Pro. Vous créerez ensuite dans BigQuery la fonction distante qui appelle la fonction Cloud déployée. N'oubliez pas que la même procédure peut être suivie pour toute exécution de fonction distante dans BigQuery.

C'est parti !

Étape 1: Créez la fonction Cloud Java

Vous allez créer une fonction Cloud de 2e génération en Java pour valider des images de test par rapport à une image de référence. L'image de référence est stockée dans un ensemble de données contenant des captures d'écran d'images de test dans une table externe dans BigQuery. Vous allez valider les images à l'aide du modèle Gemini Pro Vision (SDK Java). Vous allez ensuite déployer la fonction Cloud Java sur un point de terminaison REST.

Procédez comme suit :

  1. Lancer l'éditeur Cloud Shell.
  2. Si vous utilisez l'ancien éditeur, cliquez sur Essayer le nouvel éditeur.
  3. Dans la barre d'état, cliquez sur Cloud Code - Connexion.
  4. Si vous êtes invité à autoriser l'éditeur Cloud Shell à effectuer des appels d'API Google Cloud, cliquez sur Autoriser. Suivez les instructions pour vous connecter à votre compte Google. Vous êtes désormais connecté à Google Cloud.
  5. Si votre projet ne s'affiche pas dans la barre d'état Cloud Code, cliquez sur Cloud Code – Connexion > Sélectionner un projet Google Cloud. Choisissez le projet Google Cloud dans lequel vous souhaitez créer vos fonctions Cloud. Le projet se charge et devient le projet actif dans l'éditeur Cloud Shell.
  6. Dans la barre d'état Cloud Code, cliquez sur le nom du projet actif. Dans le menu "Démarrage rapide" qui s'affiche, sélectionnez Nouvelle application.
  7. Dans la boîte de dialogue Create New Application (Créer une application), sélectionnez Cloud Functions application (application Cloud Functions).

Page pop-up &quot;Créer une application&quot; 1

  1. Sélectionnez Java: Hello World lorsque vous êtes invité à sélectionner un modèle.

Page pop-up &quot;Créer une application&quot; 2

  1. Saisissez Gemini-BQ-Function comme nom de projet dans le chemin d'accès au projet. La structure du projet s'affiche dans une nouvelle vue de l'éditeur Cloud Shell.

Nouvelle structure de projet d&#39;application Cloud Functions Java

  1. Ajoutez les dépendances nécessaires dans la balise <dependencies>... </dependencies> ou copiez-les à partir de l'exemple de fichier pom.xml.
  2. Remplacez le nom de votre classe HelloWorld.java par un nom plus explicite. Imaginons que GeminiBigQueryFunction.java. Renommez le package en conséquence.
  3. Remplacez le code de l'espace réservé dans le fichier GeminiBigQueryFunction.Java par l'exemple de code fourni dans le dépôt GitHub. Veillez à remplacer la variable <YOUR_PROJECT_ID> par l'ID de votre projet dans l'exemple de code.
  4. Accédez au terminal Cloud Shell. Vérifiez que vous vous trouvez dans le répertoire de votre projet. Si ce n'est pas le cas, accédez au répertoire du projet en exécutant la commande suivante:
cd Gemini-BQ-Function
  1. Exécutez l'instruction suivante pour créer et déployer la fonction Cloud:
gcloud functions deploy gemini-bq-fn --gen2 --runtime java17 --trigger-http --entry-point cloudcode.helloworld.GeminiBigQueryFunction --allow-unauthenticated --source .

Remplacez le point d'entrée de la commande par le point d'entrée de votre fonction. La sortie est une URL REST au format suivant:

https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-bq-fn
  1. Testez cette fonction Cloud en exécutant la commande suivante depuis le terminal:
gcloud functions call gemini-bq-fn --region=us-central1 --gen2 --data '{"calls":[["https://storage.googleapis.com/img_public_test/image_validator/baseline/1.JPG", "https://storage.googleapis.com/img_public_test/image_validator/test/2.JPG", "PROMPT_ABOUT_THE_IMAGES_TO_GEMINI"]]}'

Réponse à l'exemple d'invite aléatoire:

Chaîne de réponse JSON de la fonction Cloud

Parfait ! L'implémentation du modèle de fonction Cloud générique pour Gemini Pro Vision est prête. Utilisons ce point de terminaison directement sur les données BigQuery à partir d'une fonction distante BigQuery.

Étape 2: Créez une table d'objet BigQuery et une fonction distante

Conditions préalables

Vous aurez besoin d'un bucket Cloud Storage pour cette partie de l'exercice. Pour créer un bucket Cloud Storage, procédez comme suit:

  1. Pour créer un bucket, accédez à la console Cloud Storage, puis cliquez sur Créer.
  2. Saisissez demo-bq-gemini-public-image comme nom de bucket, puis cliquez sur Créer.
  3. Décochez l'option Enforce public access prevention on this bucket. Bien que vous créiez ce bucket pour un accès public dans cet exercice, nous vous recommandons d'empêcher l'accès public et d'accorder des autorisations à des comptes de service spécifiques, selon les cas d'utilisation de votre entreprise.
  4. Une fois le bucket créé, accédez à l'onglet Autorisations pour afficher et modifier les autorisations.
  5. Pour ajouter des comptes principaux, cliquez sur Accorder l'accès. Indiquez un ID de compte de service pour accorder des autorisations à un compte spécifique, ou spécifiez allUsers pour accorder un accès public à votre bucket.
  6. Sélectionnez le rôle Storage Object Viewer, puis cliquez sur Enregistrer. Si vous y êtes invité, choisissez d'autoriser l'accès public.
  7. Accédez à l'onglet Objets, importez des images de référence et testez des images à comparer. Pour cet atelier de programmation, vous pouvez importer les objets suivants, qui sont accessibles au public: baseline.JPG, TEST1.JPG et TEST2.JPG.

Créer une table d'objets BigQuery

Créez une table d'objets externe à partir de BigQuery pour accéder aux données non structurées du bucket à l'aide de la connexion et de l'ensemble de données que vous avez créé précédemment. Pour ce faire, exécutez l'instruction LDD (langage de définition de données) suivante à partir du volet de l'éditeur de requête BigQuery:

CREATE OR REPLACE EXTERNAL TABLE `gemini_bq_fn.image_validation`
WITH CONNECTION `us.gemini-bq-conn`
OPTIONS(object_metadata="SIMPLE", uris=["gs://demo-bq-gemini-public-image/*.JPG"]);

Vérifiez qu'une nouvelle table d'objets appelée image_validation a été créée dans votre ensemble de données.

Créer une fonction distante BigQuery

Créer une fonction distante dans BigQuery pour appeler la fonction Cloud Java qui implémente le modèle Gemini Pro Vision Créez-la dans le même ensemble de données. Pour ce faire, exécutez le LDD suivant à partir du volet de l'éditeur SQL de la console BigQuery:

CREATE OR REPLACE FUNCTION `gemini_bq_fn.FN_IMAGE_VALIDATE` (baseline STRING, test STRING, prompt STRING) RETURNS STRING
 REMOTE WITH CONNECTION `us.gemini-bq-conn`
 OPTIONS (
   endpoint = 'https://us-central1-<your project id>.cloudfunctions.net/gemini-bq-fn',
   max_batching_rows = 1
 );

L'URL du point de terminaison est l'URL REST qui a été renvoyée précédemment dans cet exercice. Cette opération crée la fonction distante dans BigQuery. Le LDD ci-dessus comporte trois paramètres. Les deux premiers paramètres sont des URL des images stockées dans la table d'objets créée à l'étape précédente. Le dernier paramètre est la requête envoyée au modèle (Gemini Pro Vision). Vous pouvez vous référer au code Java Cloud Functions utilisé pour analyser cette signature:

Gson().fromJson(request.getReader(), JsonObject.class);
JsonArray calls_array = requestJson.getAsJsonArray("calls");
JsonArray calls = (JsonArray) calls_array.get(0);
String baseline_url = calls.get(0).toString().replace("\"", "");
String test_url = calls.get(1).toString().replace("\"", "");
String prompt_string = calls.get(2).toString();

Appeler Gemini depuis BigQuery

Utilisez la fonction distante dans une requête SELECT pour tester la fonction permettant de valider les images par rapport à la requête.

select gemini_bq_fn.FN_IMAGE_VALIDATE(
'https://storage.googleapis.com/demo-bq-gemini-public-image/Baseline.JPG',
REPLACE(uri, 'gs://', 'https://storage.googleapis.com/') ,
'You are an expert image validator who can respond with JSON result. Find 2 images here. The first one is the reference image. The second image is the test image. Compare the second image to see if the second image is similar to the first in terms of the text present in the image.  Respond ONLY in JSON Format with 3 attributes namely SIMILARITY which is a \"YES\" or \"NO\", SIMILARITY_SCORE which is a percentage and DIFFERENCE_COMMENT which is a string.' ) as IMAGE_VALIDATION_RESULT
from `gemini_bq_fn.image_validation`
where uri like '%TEST1%';  

Exécutez la requête ci-dessus avec les fichiers d'objets TEST1 et TEST2. Un résultat semblable aux lignes suivantes s'affiche:

Capture d&#39;écran du résultat de la fonction distante BigQuery

Voici les images à titre de référence:

Image de référence

Image de référence de référence pour le scénario de test

Image test

Image de test 1 pour le scénario de test

Notez que les deux images sont similaires, car elles disposent de la vue de la console cloud Duet AI, mais que le texte qu'elles contiennent est différent, car il est généré par le modèle au format JSON.

Vous avez maintenant testé avec succès l'implémentation de la fonction distante.

7. Avantages et cas d'utilisation

Examinons certains des avantages de l'intégration de BigQuery et Gemini pour l'analyse de données structurées et non structurées.

  • Intégrer l'IA générative à vos données: plus besoin de déplacer les données, de les dupliquer et de les complexifier. Vous pouvez analyser des données et générer des insights dans le même environnement BigQuery.
  • Analyses améliorées: les explications en langage naturel de Gemini ajoutent un niveau de compréhension supplémentaire à vos données. Pour ce faire, vous pouvez utiliser des requêtes SQL.
  • Évolutivité: cette solution permet de gérer facilement de grands ensembles de données et des analyses complexes, avec peu de programmation.

Les applications sont nombreuses. Envisagez différents scénarios dans les domaines de la finance (analyse des tendances du marché), du commerce (opinion des clients), de la santé (résumés de rapports médicaux), etc. où vos équipes d'analyse et commerciales pourraient les implémenter avec un effort et des ressources relativement faibles, avec un langage et un outil familiers.

8. Effectuer un nettoyage

Pour éviter que les ressources utilisées dans cet article soient facturées sur votre compte Google Cloud, procédez comme suit:

  1. Dans la console Google Cloud, accédez à la page Gérer les ressources.
  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.
  4. Si vous souhaitez conserver votre projet, ignorez les étapes ci-dessus et supprimez la fonction Cloud en accédant à Cloud Functions. Dans la liste des fonctions, cochez celle que vous souhaitez supprimer, puis cliquez sur Supprimer.

9. Félicitations

Félicitations, Grâce aux modèles Gemini intégrés à BigQuery, vous ne vous contentez plus d'analyser vos données : vous êtes capable d'interpréter vos données. Vous pouvez générer les récits cachés dans vos ensembles de données et transformer la façon dont vous comprenez vos insights. Lancez-vous et faites des tests ! Appliquez cette technique à vos propres ensembles de données et découvrez les histoires qui s'y trouvent. Comme BigQuery prend en charge les données non structurées dans les tables d'objets ( tables externes), essayez d'utiliser Gemini Pro Vision pour générer des insights génératifs sur les données d'image. Reportez-vous à la documentation sur Vertex AI, les fonctions à distance BigQuery et Cloud Functions pour obtenir des conseils plus détaillés. Voici le dépôt GitHub pour ce projet. Dites-nous ce que vous créez grâce à cette formation.