Gestione semplificata dei dati principali: corrispondenza e Unisciti all'IA generativa!

1. Panoramica

Che cos'è la gestione dei master data?

La gestione dei dati principali (MDM) consiste nel creare un'unica fonte attendibile per i dati più importanti della tua organizzazione. Immagina una biblioteca organizzata meticolosamente in cui ogni libro (punto dati) sia etichettato correttamente, aggiornato e facile da trovare.

I dati master rappresentano le entità aziendali di base fondamentali per le operazioni di un'azienda. Ecco gli elementi chiave dei master data:

  • Entità aziendali:entità come clienti, prodotti, fornitori, sedi e dipendenti, ovvero i sostantivi attorno ai quali ruota la tua attività
  • Identificatori: identificatori univoci che assicurano che ogni entità sia distinta e tracciabile nei vari sistemi
  • Attributi: le caratteristiche che descrivono ogni entità, ad esempio l'indirizzo di un cliente, il prezzo di un prodotto e così via.

Per aiutarti a comprendere meglio i dati master, confrontiamoli con i dati transazionali. I dati sulle transazioni acquisiscono singoli eventi (un acquisto, una spedizione e così via). I dati master, invece, forniscono il contesto per questi eventi definendo le entità coinvolte. Ad esempio, una transazione di vendita si collega ai dati master del cliente, del prodotto e del venditore.

Sebbene l'implementazione di un sistema MDM solido sia essenziale per il processo decisionale strategico, può essere complessa e richiedere molte risorse. È qui che entra in gioco il potere trasformativo dell'IA generativa, in particolare di modelli come Gemini 1.0 Pro, Gemini 1.0 Pro Vision e Gemini 1.5 Pro.

2. Obiettivo

In questo codelab dimostrerai come Gemini 1.0 Pro semplifica le applicazioni di gestione dei dati master, come l'arricchimento e la deduplica, per i dati citibike_stations disponibili nel set di dati pubblico BigQuery.

Cosa utilizzerai

  1. Set di dati pubblico BigQuery bigquery-public-data.new_york_citibike.
  2. Chiamate di funzione Gemini (una funzione Cloud Java che recupera le informazioni sull'indirizzo utilizzando l'API di geocodifica inversa per le coordinate disponibili con i dati di citibike_stations).
  3. L'API Vertex AI Embeddings e la ricerca vettoriale in BigQuery per identificare i duplicati.

Cosa creerai

  1. Dovrai creare un set di dati BigQuery per il caso d'uso. In questo set di dati, creerai una tabella di destinazione con i dati della tabella del set di dati pubblico bigquery-public-data.new_york_citibike.citibike_stations.
  2. Eseguirai il deployment della funzione Cloud che include la chiamata di funzioni Gemini per la standardizzazione degli indirizzi.
  3. Memorizzerai i dati degli indirizzi arricchiti nelle tabelle di destinazione (dalle due origini fornite per questa dimostrazione).
  4. Chiamerai l'API Vertex AI Embeddings da BigQuery sui dati degli indirizzi.
  5. Utilizzerai la ricerca vettoriale di BigQuery per identificare i record duplicati.

Il seguente diagramma rappresenta il flusso di dati e i passaggi coinvolti nell'implementazione.

Flusso di alto livello del caso d'uso

3. Requisiti

  • Un browser, ad esempio Chrome o Firefox
  • Un progetto Google Cloud con la fatturazione abilitata.

4. Prima di iniziare

  1. Nella console Google Cloud, nella pagina di selezione del progetto, seleziona o crea un progetto Google Cloud.
  2. Verifica che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è attivata per un progetto .
  3. Utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione in Google Cloud precaricato con bq. Fai clic su Attiva Cloud Shell nella parte superiore della console Google Cloud.

Immagine del pulsante Attiva Cloud Shell

  1. Una volta connesso a Cloud Shell, verifica di aver già eseguito l'autenticazione e che il progetto sia impostato sul tuo ID progetto utilizzando il seguente comando:
gcloud auth list
  1. Esegui il seguente comando in Cloud Shell per verificare che il comando gcloud conosca il tuo progetto.
gcloud config list project
  1. Se il progetto non è impostato, utilizza il seguente comando per impostarlo:
gcloud config set project <YOUR_PROJECT_ID>
  1. Vai a Gemini for Google Cloud Marketplace per abilitare l'API. Puoi anche utilizzare il seguente comando nel terminale Cloud Shell:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
  1. Assicurati che le API BigQuery, BigQuery Connection, Cloud Function, Cloud Run, Vertex AI e Cloud Build siano attive. L'alternativa al comando gcloud è tramite la console utilizzando questo link.

Consulta la documentazione per i comandi e l'utilizzo di gcloud.

5. Creare un set di dati BigQuery e una connessione esterna

Iniziamo creando un set di dati e una connessione alla risorsa Cloud.

Un set di dati in BigQuery è un contenitore per tutte le tabelle e gli oggetti della tua applicazione.

Per creare un set di dati:

  1. Vai alla pagina BigQuery nella console Google Cloud.
  2. Nel riquadro Explorer, seleziona il progetto in cui vuoi creare il set di dati.
  3. Espandi l'opzione Azioni (l'icona di tre puntini verticali) e fai clic su Crea set di dati.

Immagine del menu Azioni e dell&#39;opzione Crea set di dati

  1. Inserisci mdm_gemini nel campo ID set di dati.
  2. Imposta il tipo di località su Multi-region e accetta il valore predefinito, ovvero US(multiple regions in United States.
  3. Fai clic su Crea set di dati.
  4. Verifica che il set di dati sia stato creato ed elencato sotto l'ID progetto nel riquadro Explorer.

Per interagire con la funzione Cloud è necessaria una connessione BigQuery. Per creare una funzione remota, devi creare una connessione BigQuery. In questo codelab utilizzeremo la connessione BigLake per accedere al modello da BigQuery tramite la funzione Cloud. Le connessioni BigLake consentono di collegare l'origine dati esterna mantenendo il controllo e la sicurezza dell'accesso granulare di BigQuery, che nel nostro caso è l'API Vertex AI Gemini Pro.

Per creare la connessione BigLake:

  1. Fai clic su Aggiungi nel riquadro Explorer della pagina BigQuery.

Console BigQuery con il pulsante AGGIUNGI evidenziato per aggiungere una connessione esterna

  1. Fai clic su Connessioni a origini dati esterne.
  2. Nell'elenco Tipo di connessione, seleziona Modelli remoti di Vertex AI, funzioni remote e BigLake (risorsa Cloud).
  3. Nel campo ID connessione, inserisci il nome della connessione come gemini-bq-conn.
  4. Imposta il tipo di località su Multi-region e accetta il valore predefinito, ovvero US(multiple regions in United States.
  5. Fai clic su Crea connessione.
  6. Fai clic su Vai alla connessione e poi copia l'ID account di servizio nel riquadro Informazioni sulla connessione.

Screenshot delle informazioni di connessione

  1. Vai alla pagina IAM e amministrazione e fai clic su Concedi accesso.
  2. Incolla l'ID account di servizio nel campo Nuovi principi.
  3. Seleziona il ruolo Vertex AI user dall'elenco dei ruoli e fai clic su Salva.

Screenshot di Concedi l&#39;accesso all&#39;account di servizio

Hai creato correttamente il set di dati e la connessione BigQuery.

6. Esegui il deployment di una chiamata di funzione Gemini (funzione Cloud Java)

Per eseguire il deployment della funzione Cloud Java che include la chiamata di funzioni Gemini:

  1. Clona il repository GitHub dal terminale Cloud Shell utilizzando il seguente comando:
git clone https://github.com/AbiramiSukumaran/GeminiFunctionCalling
  1. Sostituisci i segnaposto YOUR_API_KEY e YOUR_PROJECT_ID con i tuoi valori.

Se hai letto il blog qui, saprai che le implementazioni delle chiamate di funzione utilizzano l'API di geocodifica inversa. Puoi creare la tua chiave API seguendo le istruzioni riportate qui.

  1. Nel terminale Cloud Shell, vai alla directory del progetto appena clonato GeminiFunctionCalling ed esegui la seguente istruzione per compilare ed eseguire il deployment della funzione Cloud:
gcloud functions deploy gemini-fn-calling --gen2 --region=us-central1 --runtime=java11 --source=. --entry-point=cloudcode.helloworld.HelloWorld --trigger-http

Di' "y" quando ti vengono chieste le domande "Consenti chiamate non autenticate". Idealmente, dovresti configurare l'autenticazione per le tue applicazioni aziendali, come consigliato. Tuttavia, poiché si tratta di un'app demo, procederemo senza autenticazione.

L'output è un URL REST nel seguente formato:

https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-fn-calling

  1. Testa questa funzione Cloud eseguendo il seguente comando dal terminale:
gcloud functions call gemini-fn-calling --region=us-central1 --gen2 --data '{"calls":[["40.714224,-73.961452"]]}'

Risposta per un prompt di esempio casuale:

 '{"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}}```"]}'

I parametri di richiesta e risposta di questa funzione cloud sono implementati in modo compatibile con il richiamo della funzione remota di BigQuery. Può essere utilizzato direttamente dai dati di BigQuery in-place. Ciò significa che se i dati di input (dati lat e long) si trovano in BigQuery, puoi chiamare la funzione remota sui dati e ottenere la risposta della funzione che può essere archiviata o elaborata direttamente in BigQuery.

  1. Esegui il seguente DDL da BigQuery per creare una funzione remota che richiami questa funzione Cloud di cui è stato eseguito il deployment:
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
 );

Query di test per utilizzare la nuova funzione remota creata:

SELECT mdm_gemini.MDM_GEMINI(latlong) from mdm_gemini.CITIBIKE_STATIONS limit 1;

Se la query di test che utilizza la nuova funzione remota creata in BigQuery non va a buon fine a causa di un problema di autorizzazioni di Cloud Functions, vai a Cloud Functions dalla console Google Cloud e individua la funzione Cloud Functions di cui è stato eseguito il deployment denominata "gemini-fn-calling". Vai alla scheda delle autorizzazioni, aggiungi l'entità "allUsers" e concedi il ruolo "Invoker di Cloud Functions" per assicurarti che Cloud Functions sia accessibile a tutti gli utenti (solo perché si tratta di un'app di dimostrazione).

7. Prova una soluzione alternativa

Se per qualche motivo non disponi della chiave API necessaria per l'approccio di chiamata della funzione di geocodifica inversa o non hai implementato la funzione Cloud, puoi procedere nel seguente modo:

  1. Scarica il file CITIBIKE_STATIONS.csv dal repository nella cartella del progetto Cloud Shell e vai a quella cartella.
  2. Esporta i dati dal file CSV nel nuovo set di dati BigQuery mdm_gemini utilizzando il seguente comando nel terminale 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. Creare una tabella e arricchire i dati sugli indirizzi

Passaggio 1: crea la tabella

Imp: salta questo passaggio se hai utilizzato la soluzione alternativa, in quanto devi aver già creato la tabella.

Se non hai utilizzato la soluzione alternativa, esegui il seguente DDL in BigQuery SQL Editor:

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

Ora arricchiamo i dati dell'indirizzo richiamando la funzione remota sulle coordinate di latitudine e longitudine disponibili nella tabella. Imposta le seguenti condizioni per i dati:

  • Segnalate nell'anno 2024
  • Numero di biciclette disponibili > 0
  • Capacità > 100

Esegui questa query:

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;

Passaggio 2: crea una seconda origine per i dati sulla posizione delle stazioni di ricarica delle biciclette

Non saltare questo passaggio anche se hai utilizzato l'approccio della soluzione alternativa per creare la tabella.

In questo passaggio, creerai una seconda origine per i dati sulla posizione delle stazioni di ricarica delle biciclette ai fini di questo codelab. Questo dimostra che la gestione della master data riunisce i dati provenienti da più origini e identifica la verità assoluta.

Esegui i seguenti DDL in BigQuery SQL Editor per creare la seconda origine di dati sulla posizione contenente due record. Assegna a questa tabella il nome mdm_gemini.CITIBIKE_STATIONS_SOURCE2 e inserisci due record.

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. Genera embedding per i dati sugli indirizzi

Gli incorporamenti sono vettori numerici di alta dimensione che rappresentano una determinata entità, ad esempio un testo o un file audio. I modelli di machine learning (ML) utilizzano gli embedding per codificare la semantica di queste entità in modo da facilitare il ragionamento e il confronto. Ad esempio, un'operazione comune nei modelli di clustering, classificazione e consigli è misurare la distanza tra i vettori in uno spazio di embedding per trovare gli elementi più semanticamente simili. L'API Vertex AI Text Embeddings consente di creare un embedding di testo utilizzando l'IA generativa su Vertex AI. Gli embedding di testo sono rappresentazioni numeriche del testo che acquisiscono le relazioni tra parole e frasi. Scopri di più sugli embedding di testo di Vertex AI qui.

  1. Esegui il seguente DDL per creare un modello remoto per l'API Vertex AI Embedding di testo:
CREATE OR REPLACE MODEL `mdm_gemini.CITIBIKE_STATIONS_ADDRESS_EMB`
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS (ENDPOINT = 'textembedding-gecko@latest');
  1. Ora che il modello di embedding remoto è pronto, genera gli embedding per la prima origine e memorizzali in una tabella utilizzando la seguente query:
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 )
  )
);

Invece di creare una nuova tabella, puoi anche memorizzare il campo del risultato degli embedding nella stessa tabella mdm_gemini.CITIBIKE_STATIONS creata in precedenza.

  1. Per generare embedding per i dati degli indirizzi nella tabella CITIBIKE_STATIONS_SOURCE2,esegui la seguente query:
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;

Dovrebbero essere creati gli incorporamenti per la seconda origine. Tieni presente che abbiamo creato il campo di embedding nella stessa tabella CITIBIKE_STATIONS_SOURCE2.

  1. Per visualizzare gli embedding generati per le tabelle di dati di origine 1 e 2, esegui la seguente query:
select name,address,embeddings_src from `mdm_gemini.CITIBIKE_STATIONS_SOURCE2`;
select name,content,ml_generate_embedding_result from `mdm_gemini.CITIBIKE_STATIONS_SOURCE1`;

Ora eseguiamo una ricerca vettoriale per identificare i duplicati.

10. Eseguire una ricerca vettoriale per segnalare gli indirizzi duplicati

In questo passaggio, cercherai nella colonna degli embedding degli indirizzi ml_generate_embedding_result della tabella mdm_gemini.CITIBIKE_STATIONS_SOURCE1 i due embedding principali corrispondenti a ogni riga di dati nella colonna embeddings_src della tabella mdm_gemini.CITIBIKE_STATIONS_SOURCE2.

Per farlo, esegui la seguente query:

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;

Tabella su cui viene eseguita la query: mdm_gemini.CITIBIKE_STATIONS_SOURCE1 sul campo ml_generate_embedding_result

Tabella utilizzata come base: mdm_gemini.CITIBIKE_STATIONS_SOURCE2 nel campo embeddings_src

top_k::specifica il numero di vicini più vicini da restituire. Il valore predefinito è 10. Un valore negativo viene considerato infinito, il che significa che tutti i valori vengono conteggiati come vicini e restituiti.

distance_type: specifica il tipo di metrica da utilizzare per calcolare la distanza tra due vettori. I tipi di distanza supportati sono Euclidea e Coseno. Il valore predefinito è Euclideo.

Il risultato della query è il seguente:

Set di risultati

Come puoi vedere, sono elencati i due vicini più prossimi (in altre parole, i duplicati più simili) per le due righe in CITIBIKE_STATIONS_SOURCE2 da CITIBIKE_STATIONS_SOURCE1. Poiché distance_type non è specificato, si presume che sia euclidea e la distanza viene letta come le distanze nei valori TEXT dell'indirizzo tra le due origini, la più bassa corrisponde ai testi degli indirizzi più simili.

Impostiamo distance_type su Cosine utilizzando la seguente query:

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;

Il risultato della query è il seguente:

Set di risultati 2

Entrambe le query (di entrambi i tipi di distanza) sono ordinate in ordine decrescente in base alla distanza, il che significa che vogliamo elencare i risultati in ordine decrescente di distanza. Tuttavia, noterai che l'ordine di distanza della seconda query è invertito. Riesci a indovinare perché?

Sì!! Hai indovinato! Nella somiglianza di Cosine, un numero maggiore indica una maggiore somiglianza e una distanza minore. Nella distanza euclidea, un numero maggiore indica una maggiore distanza tra i valori.

Per ulteriori informazioni sulla comprensione del MDM e suggerimenti per comprendere la differenza e le applicazioni di Euclide e Cosine, leggi il post del blog.

11. Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo post, segui questi passaggi:

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.
  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.
  4. Se vuoi conservare il progetto, salta i passaggi precedenti ed elimina la funzione Cloud Functions andando a Cloud Functions e selezionando quella che vuoi eliminare dall'elenco delle funzioni, quindi fai clic su Elimina.

12. Complimenti

Complimenti! Hai dimostrato la potenza dell'utilizzo di Gemini 1.0 Pro e delle chiamate di funzione per trasformare alcune attività di MDM in funzionalità di AI generativa semplificate, ma potenti, deterministiche e affidabili. Ora che lo sai, non esitare a identificare altri modi per implementare lo stesso caso d'uso o altre funzionalità MDM. Esistono set di dati che potresti convalidare, lacune informative che potresti colmare o attività che potrebbero essere automatizzate con chiamate strutturate incorporate nelle risposte dell'IA generativa? Per indicazioni più dettagliate, consulta la documentazione di Vertex AI, Funzioni remote BigQuery, Cloud Functions, Embedding e Ricerca vettoriale. Ecco il repository GitHub per questo progetto. Facci sapere cosa crei con queste informazioni.