1. Présentation
Qu'est-ce que la gestion des données de référence ?
La gestion des données de référence (MDM) consiste à créer une source unique et fiable pour les données les plus critiques de votre organisation. Imaginez une bibliothèque méticuleusement organisée où chaque livre (point de données) est correctement étiqueté, à jour et facile à trouver.
Les données de référence représentent les entités commerciales fondamentales et essentielles aux opérations d'une entreprise. Voici les éléments clés des données de référence:
- Entités commerciales:entités telles que les clients, les produits, les fournisseurs, les emplacements et les employés, qui sont les noms autour desquels votre entreprise évolue
- Identifiants:des identifiants uniques qui garantissent que chaque entité est distincte et traçable sur tous les systèmes
- Attributs: les caractéristiques qui décrivent chaque entité, par exemple l'adresse du client, le prix d'un produit, etc.
Pour mieux comprendre les données de référence, comparons-les aux données transactionnelles. Les données transactionnelles capturent des événements individuels (un achat, une expédition, etc.). tandis que les données de référence fournissent le contexte de ces événements en définissant les entités impliquées. Par exemple, une transaction de vente est associée aux données de référence du client, du produit et du commercial.
Bien que la mise en œuvre d'une MDM robuste soit essentielle à la prise de décisions stratégiques, elle peut s'avérer complexe et gourmande en ressources. C'est là que le pouvoir de transformation de l'IA générative, en particulier des modèles comme Gemini 1.0 Pro, Gemini 1.0 Pro Vision et Gemini 1.5 Pro, entre en jeu.
2. Objectif
Dans cet atelier de programmation, vous allez découvrir comment Gemini 1.0 Pro simplifie les applications de gestion des données de référence, comme l'enrichissement et la déduplication, pour les données citibike_stations disponibles dans l'ensemble de données public BigQuery.
Outils utilisés
- Ensemble de données public BigQuery
bigquery-public-data.new_york_citibike
. - Appel de fonction Gemini (fonction Cloud Java qui obtient les informations d'adresse à l'aide de l'API Reverse Geocoding pour les coordonnées disponibles avec les données citibike_stations)
- l'API Vertex AI Embeddings et Vector Search dans BigQuery pour identifier les doublons.
Ce que vous allez faire
- Vous allez créer un ensemble de données BigQuery pour ce cas d'utilisation. Dans cet ensemble de données, vous allez créer une table d'atterrissage avec les données du tableau de l'ensemble de données public
bigquery-public-data.new_york_citibike.citibike_stations
. - Vous allez déployer la fonction Cloud qui inclut l'appel de fonction Gemini pour normaliser les adresses.
- Vous allez stocker les données d'adresse enrichies dans les tables de destination (à partir des deux sources fournies pour cette démonstration).
- Vous allez appeler l'API Vertex AI Embeddings à partir de BigQuery sur les données d'adresse.
- Vous utiliserez BigQuery Vector Search pour identifier les enregistrements en double.
Le schéma suivant représente le flux de données et les étapes impliquées dans la mise en œuvre.
3. Conditions requises
4. Avant de commencer
- Dans la console Google Cloud, sur la page du sélecteur de 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 .
- 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.
- 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
- Exécutez la commande suivante dans Cloud Shell pour vérifier que la commande gcloud connaît votre projet.
gcloud config list project
- 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 à 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
- Assurez-vous que les API BigQuery, BigQuery Connection, Cloud Functions, Cloud Run, Vertex AI et Cloud Build sont activées. L'alternative à la commande gcloud consiste à passer par la console en cliquant sur ce lien.
Consultez la documentation pour connaître les commandes gcloud ainsi que leur utilisation.
5. 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:
- Accédez à la page BigQuery de la console Google Cloud.
- Sur le panneau Explorateur, sélectionnez le projet pour lequel vous souhaitez créer l'ensemble de données.
- Développez l'option Actions (icône représentant des points de suspension verticaux), puis cliquez sur Créer un ensemble de données.
- Saisissez
mdm_gemini
dans le champ ID de l'ensemble de données. - Définissez le type de lieu sur
Multi-region
et acceptez la valeur par défaut, qui estUS(multiple regions in United States.
. - Cliquez sur Créer un ensemble de données.
- Vérifiez que l'ensemble de données est créé et répertorié sous l'ID de votre projet dans le volet Explorer.
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:
- Cliquez sur Ajouter dans le volet Explorateur de la page BigQuery.
- Cliquez sur Connexions à des sources de données externes.
- Dans la liste "Type de connexion", sélectionnez Modèles distants Vertex AI, fonctions distantes et BigLake (ressource cloud).
- Dans le champ ID de connexion, saisissez
gemini-bq-conn
comme nom de connexion. - Définissez le type de lieu sur
Multi-region
et acceptez la valeur par défaut, qui estUS(multiple regions in United States.
. - Cliquez sur Créer une connexion.
- Cliquez sur Accéder à la connexion,puis copiez l'ID du compte de service dans le volet Informations sur la connexion.
- Accédez à la page IAM et Administration, puis cliquez sur Accorder l'accès.
- Collez l'ID du compte de service dans le champ Nouveaux principes.
- Sélectionnez le rôle
Vertex AI user
dans la liste des rôles, puis cliquez sur Enregistrer.
L'ensemble de données et la connexion à BigQuery ont bien été créés.
6. Déployer l'appel de fonction Gemini (fonction Cloud Java)
Suivez ces étapes pour déployer la fonction Cloud Java qui inclut l'appel de fonction Gemini.
- Clonez le dépôt github depuis votre terminal Cloud Shell à l'aide de la commande suivante:
git clone https://github.com/AbiramiSukumaran/GeminiFunctionCalling
- Remplacez les espaces réservés
YOUR_API_KEY
etYOUR_PROJECT_ID
par vos valeurs.
Si vous consultez cet article de blog, vous saurez que les implémentations d'appel de fonction utilisent l'API Reverse Geocoding. Vous pouvez créer votre propre API_KEY en suivant ces instructions.
- Dans le terminal Cloud Shell, accédez au répertoire de projet GeminiFunctionCalling que vous venez de cloner, puis exécutez l'instruction suivante pour créer et déployer la fonction Cloud:
gcloud functions deploy gemini-fn-calling --gen2 --region=us-central1 --runtime=java11 --source=. --entry-point=cloudcode.helloworld.HelloWorld --trigger-http
Dites "y" lorsque le message "Allow unauthenticated invocations" (Autoriser les appels non authentifiés) questions. Idéalement, vous configurerez l'authentification pour vos applications d'entreprise, conformément à nos recommandations. Comme il s'agit d'une application de démonstration, nous procéderons sans authentification.
La sortie est une URL REST au format suivant:
https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-fn-calling
- Testez cette fonction Cloud en exécutant la commande suivante depuis le terminal:
gcloud functions call gemini-fn-calling --region=us-central1 --gen2 --data '{"calls":[["40.714224,-73.961452"]]}'
Réponse à un échantillon de requête aléatoire:
'{"replies":["{ \"DOOR_NUMBER\": \"277\", \"STREET_ADDRESS\": \"Bedford Ave\", \"AREA\":
null, \"CITY\": \"Brooklyn\", \"TOWN\": null, \"COUNTY\": \"Kings County\", \"STATE\":
\"NY\", \"COUNTRY\": \"USA\", \"ZIPCODE\": \"11211\", \"LANDMARK\": null}}```"]}'
Les paramètres de requête et de réponse de cette fonction Cloud sont implémentés d'une manière compatible avec l'appel de fonction distante de BigQuery. Il peut être directement utilisé à partir des données BigQuery sur place. Cela signifie que si vos données d'entrée (données de latitude et de longitude) se trouvent dans BigQuery, vous pouvez appeler la fonction distante sur les données et obtenir la réponse de la fonction, qui peut être stockée ou traitée directement dans BigQuery.
- Exécutez le LDD suivant à partir de BigQuery pour créer une fonction distante qui appelle cette fonction Cloud déployée:
CREATE OR REPLACE FUNCTION
`mdm_gemini.MDM_GEMINI` (latlng STRING) RETURNS STRING
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS (
endpoint = 'https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-fn-calling', max_batching_rows = 1
);
Testez la requête pour utiliser la nouvelle fonction distante créée:
SELECT mdm_gemini.MDM_GEMINI
(latlong) from mdm_gemini.CITIBIKE_STATIONS limit 1;
Si la requête de test qui utilise la nouvelle fonction distante créée dans BigQuery échoue en raison d'un problème d'autorisation Cloud Functions, accédez à Cloud Functions depuis la console Google Cloud et localisez la fonction Cloud déployée nommée gemini-fn-calling. Accédez à l'onglet des autorisations et ajoutez le compte principal "allUsers" et attribuez-lui le rôle "Demandeur Cloud Functions" pour s'assurer que Cloud Functions est accessible à tous les utilisateurs (uniquement parce qu'il s'agit d'une application de démonstration).
7. Essayer une solution de contournement
Si vous ne disposez pas de la clé API_KEY nécessaire pour l'approche d'appel de la fonction Geocoding inversé, ou si la fonction Cloud n'est pas déployée, vous pouvez, pour une raison quelconque, procéder comme suit:
- Téléchargez le fichier CITIBIKE_STATIONS.csv du dépôt dans le dossier de votre projet Cloud Shell, puis accédez à ce dossier.
- Exportez les données du fichier CSV vers votre nouvel ensemble de données BigQuery
mdm_gemini
à l'aide de la commande suivante dans le terminal Cloud Shell:
bq load --source_format=CSV --skip_leading_rows=1 mdm_gemini.CITIBIKE_STATIONS ./CITIBIKE_STATIONS.csv \ name:string,latlng:string,capacity:numeric,num_bikes_available:numeric,num_docks_available:numeric,last_reported:timestamp,full_address_string:string
8. Créer une table et enrichir les données d'adresse
Étape 1: Créez la table
Imp:ignorez cette étape si vous avez utilisé la solution de contournement, car vous devez déjà avoir créé la table.
Si vous n'avez pas utilisé la solution de contournement, exécutez le LDD suivant dans l'éditeur SQL BigQuery:
CREATE TABLE mdm_gemini.CITIBIKE_STATIONS as (
select name, latitude || ',' || longitude as latlong, capacity, num_bikes_available, num_docks_available,last_reported,
'' as full_address_string
from bigquery-public-data.new_york_citibike.citibike_stations) ;
À présent, enrichissons les données d'adresse en appelant la fonction distante sur les coordonnées de latitude et de longitude disponibles dans le tableau. Définissez les conditions suivantes pour les données:
- Rapporté en 2024
- Nombre de vélos disponibles > 0
- Capacité > 100
Exécutez la requête suivante :
update `mdm_gemini.CITIBIKE_STATIONS`
set full_address_string = `mdm_gemini.MDM_GEMINI`(latlong)
where EXTRACT(YEAR FROM last_reported) = 2024 and num_bikes_available > 0 and capacity > 100;
Étape 2: Créez une deuxième source pour les données de localisation des stations de vélo
Ne passez pas cette étape, même si vous avez utilisé la solution de contournement pour créer le tableau.
Au cours de cette étape, vous allez créer une deuxième source pour les données de localisation des stations de vélo dans le cadre de cet atelier de programmation. L'objectif est de démontrer que la gestion des appareils mobiles (MDM) rassemble des données provenant de plusieurs sources et permet d'identifier la vérité exacte.
Exécutez les LDD suivants dans l'éditeur SQL BigQuery pour créer la deuxième source de données de localisation comportant deux enregistrements. Nommez cette table mdm_gemini.CITIBIKE_STATIONS_SOURCE2
et insérons-y deux enregistrements.
CREATE TABLE mdm_gemini.CITIBIKE_STATIONS_SOURCE2 (name STRING(55), address STRING(1000), embeddings_src ARRAY<FLOAT64>);
insert into mdm_gemini.CITIBIKE_STATIONS_SOURCE2 VALUES ('Location broadway and 29','{ "DOOR_NUMBER": "1593", "STREET_ADDRESS": "Broadway", "AREA": null, "CITY": "New York", "TOWN": null, "COUNTY": "New York County", "STATE": "NY", "COUNTRY": "USA", "ZIPCODE": "10019", "LANDMARK": null}', null);
insert into mdm_gemini.CITIBIKE_STATIONS_SOURCE2 VALUES ('Allen St & Hester','{ "DOOR_NUMBER": "36", "STREET_ADDRESS": "Allen St", "AREA": null, "CITY": "New York", "TOWN": null, "COUNTY": "New York County", "STATE": "NY", "COUNTRY": "USA", "ZIPCODE": "10002", "LANDMARK": null}', null);
9. Générer des représentations vectorielles continues pour les données d'adresse
Les représentations vectorielles continues sont des vecteurs numériques de grande dimension qui représentent une entité donnée, comme un texte ou un fichier audio. Les modèles de machine learning (ML) utilisent des représentations vectorielles continues pour encoder la sémantique de ces entités afin de faciliter leur raisonnement et leur comparaison. Par exemple, une opération courante dans les modèles de clustering, de classification et de recommandation consiste à mesurer la distance entre les vecteurs dans un espace de représentation vectorielle continue afin de trouver les éléments les plus sémantiquement similaires. L'API Vertex AI Text-embeddings vous permet de créer une représentation vectorielle continue de texte à l'aide de l'IA générative sur Vertex AI. Les représentations vectorielles continues de texte sont des représentations numériques de texte qui capturent les relations entre les mots et les expressions. Pour en savoir plus sur les représentations vectorielles continues de texte Vertex AI, cliquez ici.
- Exécutez le LDD ci-dessous afin de créer un modèle distant pour l'API Vertex AI TextEmbeddings (représentations vectorielles continues de texte) :
CREATE OR REPLACE MODEL `mdm_gemini.CITIBIKE_STATIONS_ADDRESS_EMB`
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS (ENDPOINT = 'textembedding-gecko@latest');
- Maintenant que le modèle de représentations vectorielles continues distants est prêt, nous allons générer des représentations vectorielles continues pour la première source et les stocker dans une table à l'aide de la requête suivante:
CREATE TABLE `mdm_gemini.CITIBIKE_STATIONS_SOURCE1` AS (
SELECT *
FROM ML.GENERATE_EMBEDDING(
MODEL `mdm_gemini.CITIBIKE_STATIONS_ADDRESS_EMB`,
( select name, full_address_string as content from `mdm_gemini.CITIBIKE_STATIONS`
where full_address_string is not null )
)
);
Au lieu de créer une table, vous pouvez également stocker le champ de résultat des représentations vectorielles continues dans la table mdm_gemini.CITIBIKE_STATIONS que vous avez créée précédemment.
- Pour générer des représentations vectorielles continues pour les données d'adresse de la table CITIBIKE_STATIONS_SOURCE2,exécutez la requête suivante:
update `mdm_gemini.CITIBIKE_STATIONS_SOURCE2` a set embeddings_src =
(
SELECT ml_generate_embedding_result
FROM ML.GENERATE_EMBEDDING(
MODEL `mdm_gemini.CITIBIKE_STATIONS_ADDRESS_EMB`,
( select name, address as content from `mdm_gemini.CITIBIKE_STATIONS_SOURCE2` ))
where name = a.name) where name is not null;
Cela devrait créer des représentations vectorielles continues pour la deuxième source. Notez que nous avons créé le champ des représentations vectorielles continues dans la même table CITIBIKE_STATIONS_SOURCE2.
- Pour visualiser les représentations vectorielles continues générées pour les tables de données sources 1 et 2, exécutez la requête suivante:
select name,address,embeddings_src from `mdm_gemini.CITIBIKE_STATIONS_SOURCE2`;
select name,content,ml_generate_embedding_result from `mdm_gemini.CITIBIKE_STATIONS_SOURCE1`;
Effectuons maintenant une recherche vectorielle pour identifier les doublons.
10. Effectuer une recherche vectorielle pour signaler les adresses en double
Au cours de cette étape, vous allez rechercher les deux représentations vectorielles continues d'adresses ml_generate_embedding_result de la table mdm_gemini.CITIBIKE_STATIONS_SOURCE1 correspondant à chaque ligne de données dans la colonne embeddings_src de la table mdm_gemini.CITIBIKE_STATIONS_SOURCE2.
Pour ce faire, exécutez la requête suivante:
select query.name name1,base.name name2,
/* (select address from mdm_gemini.CITIBIKE_STATIONS_SOURCE2 where name = query.name) content1, base.content content2, */
distance
from VECTOR_SEARCH(
TABLE mdm_gemini.CITIBIKE_STATIONS_SOURCE1,
'ml_generate_embedding_result',
(SELECT * FROM mdm_gemini.CITIBIKE_STATIONS_SOURCE2),
'embeddings_src',
top_k => 2
) where query.name <> base.name
order by distance desc;
Tableau que nous interrogez : mdm_gemini.CITIBIKE_STATIONS_SOURCE1
sur le champ ml_generate_embedding_result
Tableau utilisé comme base : mdm_gemini.CITIBIKE_STATIONS_SOURCE2
sur le champ embeddings_src
top_k::spécifie le nombre de voisins les plus proches à renvoyer. La valeur par défaut est 10. Une valeur négative est traitée comme l'infini, ce qui signifie que toutes les valeurs sont comptées comme voisines et sont renvoyées.
distance_type: spécifie le type de métrique à utiliser pour calculer la distance entre deux vecteurs. Les types de distance acceptés sont Euclidienne et Cosinus. La valeur par défaut est Euclidean.
Le résultat de la requête est le suivant:
Comme vous pouvez le voir, les deux voisins les plus proches (en d'autres termes, les doublons les plus proches) sont répertoriés pour les deux lignes de CITIBIKE_STATIONS_SOURCE2
dans CITIBIKE_STATIONS_SOURCE1
. Étant donné que distance_type
n'est pas spécifié, il suppose qu'il s'agit d'un texte euclidien et que la distance est lue comme les distances dans les valeurs TEXT d'adresse entre les deux sources, la plus faible étant les textes d'adresse les plus similaires.
Définissons distance_type
sur Cosin à l'aide de la requête suivante:
select query.name name1,base.name name2,
/* (select address from mdm_gemini.CITIBIKE_STATIONS_SOURCE2 where name = query.name) content1, base.content content2, */
distance
from VECTOR_SEARCH(
TABLE mdm_gemini.CITIBIKE_STATIONS_SOURCE1,
'ml_generate_embedding_result',
(SELECT * FROM mdm_gemini.CITIBIKE_STATIONS_SOURCE2),
'embeddings_src',
top_k => 2,distance_type => 'COSINE'
) where query.name <> base.name
order by distance desc;
Le résultat de la requête est le suivant:
Les deux requêtes (des deux types de distance) sont classées par distance DESCENDING, ce qui signifie que nous voulons lister les résultats par ordre décroissant de distance. Mais vous remarquerez que l'ordre des distances de la deuxième requête est inversé. Pouvez-vous deviner pourquoi ?
Parfait ! C'est tout à fait ça ! Dans la similarité cosinus, un nombre élevé signifie une plus grande similarité et une distance plus faible. Dans la distance euclidienne, un nombre élevé signifie une distance plus grande entre les valeurs.
Pour en savoir plus sur la gestion des appareils mobiles (MDM) et obtenir des conseils pour comprendre la différence entre les euclidiennes et les cosinus, ainsi que leurs applications, consultez le blog.
11. 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:
- Dans la console Google Cloud, accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.
- 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.
12. Félicitations
Félicitations ! Vous avez démontré la capacité de Gemini 1.0 Pro et de l'appel de fonction à transformer quelques activités MDM en fonctionnalités d'IA générative simplifiées, puissantes, déterministes et fiables. Maintenant que vous en savez plus, n'hésitez pas à identifier d'autres façons d'implémenter le même cas d'utilisation ou d'autres fonctionnalités MDM. Existe-t-il des ensembles de données que vous pourriez valider, des informations manquantes que vous pourriez combler ou des tâches pouvant être automatisées avec des appels structurés intégrés à vos réponses d'IA générative ? Consultez la documentation sur Vertex AI, les fonctions à distance BigQuery, Cloud Functions, les représentations vectorielles continues et Vector Search 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.