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, Master Data Management) 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 lieux et les employés, qui sont les noms autour desquels votre entreprise s'articule
- Identifiants : identifiants uniques qui garantissent que chaque entité est distincte et traçable dans les systèmes
- Attributs : caractéristiques qui décrivent chaque entité (par exemple, l'adresse d'un client, le prix d'un produit, etc.).
Pour vous aider à mieux comprendre les données de référence, comparons-les aux données transactionnelles. Les données transactionnelles enregistrent des événements individuels (un achat, une expédition, etc.). Les données de référence fournissent le contexte de ces événements en définissant les entités concernées. Par exemple, une transaction commerciale est associée aux données de référence du client, du produit et du représentant commercial.
Bien qu'il soit essentiel de mettre en œuvre une gestion des données de référence robuste pour prendre des décisions stratégiques, cela peut être complexe et nécessiter de nombreuses ressources. C'est là que le pouvoir transformateur 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 Functions Java qui récupère les informations d'adresse à l'aide de l'API Reverse Geocoding pour les coordonnées disponibles avec les données citibike_stations).
- API Vertex AI Embeddings et recherche vectorielle dans BigQuery pour identifier les doublons.
Ce que vous allez faire
- Vous allez créer un ensemble de données BigQuery pour le cas d'utilisation. Dans cet ensemble de données, vous allez créer une table de destination avec les données de la table
bigquery-public-data.new_york_citibike.citibike_stationsde l'ensemble de données public. - Vous allez déployer la fonction Cloud qui inclut l'appel de fonction Gemini pour la normalisation des 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 allez utiliser la recherche vectorielle BigQuery pour identifier les enregistrements en double.
Le diagramme suivant représente le flux de données et les étapes impliquées dans l'implémentation.

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 fourni avec 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 à la Marketplace Gemini pour Google Cloud pour activer l'API. Vous pouvez également utiliser 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. Vous pouvez également utiliser la console en cliquant ici.
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 pour toutes les tables et tous les objets de votre application.
Pour créer un ensemble de données :
- 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_geminidans le champ ID de l'ensemble de données. - Définissez le type d'emplacement sur
Multi-regionet 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 a été créé et qu'il figure sous l'ID de votre projet dans le volet Explorateur.
Une connexion BigQuery est requise 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 utiliserons la connexion BigLake pour accéder au modèle depuis BigQuery via la fonction Cloud. Les connexions BigLake permettent de connecter la source de données externe tout en conservant une sécurité et un contrôle des accès ultraprécis dans BigQuery, qui dans notre cas est l'API Vertex AI Gemini Pro.
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 à distance et BigLake (Ressource Cloud).
- Dans le champ ID de connexion, saisissez le nom de votre connexion, par exemple
gemini-bq-conn. - Définissez le type d'emplacement sur
Multi-regionet 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 de 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 comptes principaux.
- Sélectionnez le rôle
Vertex AI userdans la liste des rôles, puis cliquez sur Enregistrer.

Vous avez créé l'ensemble de données et la connexion BigQuery.
6. Déployer l'appel de fonction Gemini (fonction Cloud Java)
Pour déployer la fonction Cloud Java qui inclut l'appel de fonction Gemini, procédez comme suit.
- Clonez le dépôt GitHub à partir de 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_KEYetYOUR_PROJECT_IDpar vos valeurs.
Si vous avez lu le blog ici, vous savez que les implémentations d'appel de fonction utilisent l'API Geocoding inversé. Vous pouvez créer votre propre API_KEY en suivant ces instructions.
- Dans le terminal Cloud Shell, accédez au répertoire du projet nouvellement cloné GeminiFunctionCalling et 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
Répondez "y" lorsque vous êtes invité à répondre aux questions "Autoriser les appels non authentifiés". Idéalement, vous configurerez l'authentification pour vos applications d'entreprise, conformément à la recommandation. Toutefois, comme il s'agit d'une application de démonstration, nous allons continuer sans authentification.
Le résultat 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 à une requête d'échantillon 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 de manière à être compatibles avec l'appel de fonction à distance de BigQuery. Elles peuvent être directement utilisées à 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 DDL 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 recherchez la fonction Cloud déployée nommée gemini-fn-calling. Accédez à l'onglet "Autorisations", ajoutez "allUsers" en tant que compte principal et attribuez-lui le rôle "Demandeur Cloud Functions" pour vous 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 nécessaire pour l'approche d'appel de fonction de géocodage inversé ou si, pour une raison quelconque, vous n'avez pas déployé la fonction Cloud, vous pouvez procéder comme suit :
- Téléchargez le fichier CITIBIKE_STATIONS.csv depuis le 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 le tableau
Important : 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 code LDD suivant dans l'éditeur SQL de 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) ;
Nous allons maintenant enrichir 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 :
- Signalé 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élos
Ne sautez pas cette étape, même si vous avez utilisé la solution de contournement pour créer la table.
Dans cette étape, vous allez créer une deuxième source pour les données de localisation des stations de vélos, aux fins de cet atelier de programmation. Cela permet de montrer que la MDM rassemble des données provenant de plusieurs sources et identifie la vérité absolue.
Exécutez les DDL suivantes dans l'éditeur SQL de BigQuery pour créer la deuxième source de données de localisation avec deux enregistrements. Nommons 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 embeddings pour les données d'adresse
Les embeddings sont des vecteurs numériques de grande dimension qui représentent une entité donnée, comme un exemple de texte ou un fichier audio. Les modèles de machine learning (ML) utilisent des embeddings pour encoder la sémantique concernant 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 afin de trouver les éléments les plus sémantiquement similaires. L'API Vertex AI d'embeddings de texte vous permet de créer un embedding de texte à l'aide de l'IA générative sur Vertex AI. Les embeddings 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 embeddings de texte Vertex AI, cliquez ici.
- Exécutez le DDL ci-dessous pour créer un modèle distant pour l'API Vertex AI Text Embeddings :
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 d'embeddings distant est prêt, générons des embeddings pour la première source et stockons-les 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 embeddings dans la même table mdm_gemini.CITIBIKE_STATIONS que vous avez créée précédemment.
- Pour générer des embeddings pour les données d'adresse dans 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 embeddings pour la deuxième source. Notez que nous avons créé le champ d'intégration dans la même table CITIBIKE_STATIONS_SOURCE2.
- Pour visualiser les embeddings générés 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. Exécuter une recherche vectorielle pour signaler les adresses en double
Dans cette étape, vous allez rechercher les deux embeddings les plus proches dans la colonne ml_generate_embedding_result des embeddings d'adresse de la table mdm_gemini.CITIBIKE_STATIONS_SOURCE1 pour chaque ligne de données de 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;
Table interrogée : mdm_gemini.CITIBIKE_STATIONS_SOURCE1 sur le champ ml_generate_embedding_result
Table que nous utilisons 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 une valeur infinie, ce qui signifie que toutes les valeurs sont comptabilisées comme des voisins et renvoyées.
distance_type: : spécifie le type de métrique à utiliser pour calculer la distance entre deux vecteurs. Les types de distance compatibles sont euclidienne et cosinus. La valeur par défaut est Euclidienne.
Le résultat de la requête est le suivant :

Comme vous pouvez le voir, les deux voisins les plus proches (c'est-à-dire les doublons les plus proches) pour les deux lignes de CITIBIKE_STATIONS_SOURCE2 provenant de CITIBIKE_STATIONS_SOURCE1 sont listés. Étant donné que distance_type n'est pas spécifié, il est supposé être euclidien. La distance est lue comme la distance entre les valeurs TEXT des adresses des deux sources, la plus faible étant la plus similaire.
Définissons distance_type sur Cosine à 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 (pour les deux types de distance) sont triées par ordre décroissant de distance, ce qui signifie que nous voulons lister les résultats par ordre décroissant de distance. Vous remarquerez toutefois que l'ordre de distance de la deuxième requête est inversé. Savez-vous pourquoi ?
Parfait ! C'est tout à fait ça ! Dans la similarité cosinus, un nombre plus élevé signifie une plus grande similarité et une distance plus petite. Dans la distance euclidienne, un nombre plus élevé signifie une plus grande distance entre les valeurs.
Pour en savoir plus sur la compréhension de MDM et obtenir des conseils pour comprendre la différence et les applications d'Euclidien et de Cosinus, 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. Pour ce faire, accédez à Cloud Functions, cochez la fonction que vous souhaitez supprimer dans la liste, puis cliquez sur Supprimer.
12. Félicitations
Félicitations ! Vous avez démontré la puissance de l'utilisation de Gemini 1.0 Pro et de l'appel de fonction pour transformer quelques activités MDM en fonctionnalités d'IA générative simplifiées, mais puissantes, déterministes et fiables. Maintenant que vous le savez, 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 lacunes informationnelles que vous pourriez combler ou des tâches que vous pourriez automatiser avec des appels structurés intégrés à vos réponses d'IA générative ? Pour obtenir des conseils plus détaillés, consultez la documentation de Vertex AI, BigQuery Remote Functions, Cloud Functions, Embeddings et Vector Search. Voici le dépôt GitHub pour ce projet. N'hésitez pas à nous dire ce que vous avez créé grâce à ces connaissances !