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

1. Panoramica

Che cos'è la gestione dei dati master?

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

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

  • Entità aziendali:entità come clienti, prodotti, fornitori, sedi e dipendenti, ovvero i sostantivi attorno ai quali ruota la tua attività
  • Identificatori:identificatori univoci che garantiscono 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 transazionali 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 di cliente, prodotto e venditore.

Sebbene l'implementazione di un 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'AI 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, mostrerai come Gemini 1.0 Pro semplifica le applicazioni di gestione dei dati master come l'arricchimento e la deduplicazione per i dati citibike_stations disponibili nel set di dati pubblico BigQuery.

Cosa utilizzerai

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

Cosa creerai

  1. Creerai 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. Esegui il deployment della funzione Cloud Functions che include la chiamata di funzione di 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. Richiamerai 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 mostra 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 è abilitata 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 eseguita la connessione a Cloud Shell, verifica di essere già autenticato e che il progetto sia impostato sul tuo ID progetto utilizzando il seguente comando:
gcloud auth list
  1. Esegui questo 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 Functions, Cloud Run, Vertex AI e Cloud Build siano abilitate. L'alternativa al comando gcloud è tramite la console utilizzando questo link.

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

5. Crea 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 con 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 tua funzione Cloud Functions è 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 Functions. Le connessioni BigLake consentono di connettere l'origine dati esterna mantenendo il controllo dell'accesso e la sicurezza granulari 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,quindi copia l'ID service account nel riquadro Informazioni connessione.

Screenshot delle informazioni di connessione

  1. Vai alla pagina IAM e amministrazione e fai clic su Concedi l'accesso.
  2. Incolla l'ID service account nel campo Nuove entità.
  3. Seleziona il ruolo Vertex AI user dall'elenco dei ruoli e poi fai clic su Salva.

Concedi l&#39;accesso allo screenshot del service account

Ora hai creato correttamente il set di dati e la connessione BigQuery.

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

Segui questi passaggi per eseguire il deployment della funzione Cloud Functions Java che include la chiamata di funzione di 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 leggi il blog qui, saprai che le implementazioni delle chiamate di funzione utilizzano l'API Geocoding inverso. Puoi creare la tua API_KEY seguendo le istruzioni riportate qui.

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

Rispondi "y" quando ti viene chiesto se vuoi consentire chiamate non autenticate. Idealmente, configurerai 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 Functions eseguendo il seguente comando dal terminale:
gcloud functions call gemini-fn-calling --region=us-central1 --gen2 --data '{"calls":[["40.714224,-73.961452"]]}'

Risposta a 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 Functions sono implementati in modo compatibile con la chiamata di funzioni remote di BigQuery. Può essere utilizzato direttamente dai dati BigQuery in loco. Ciò significa che se i dati di input (dati di latitudine e longitudine) 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 richiama questa funzione Cloud Functions 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
 );

Testa la query 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 demo).

7. Prova una soluzione alternativa

Se non disponi della API_KEY necessaria per l'approccio di chiamata di funzione di geocodifica inversa o se la funzione Cloud Functions non è stata implementata per qualche motivo, puoi procedere nel seguente modo in alternativa:

  1. Scarica il file CITIBIKE_STATIONS.csv dal repository nella cartella del progetto Cloud Shell e vai a questa 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. Crea una tabella e arricchisci i dati degli indirizzi

Passaggio 1: crea la tabella

Importante: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 nell'editor SQL di 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) ;

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

  • Segnalati 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 della stazione di biciclette

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

In questo passaggio, creerai una seconda origine per i dati sulla posizione delle stazioni di biciclette ai fini di questo codelab. Lo scopo è dimostrare che MDM riunisce i dati provenienti da più origini e identifica la verità assoluta.

Esegui i seguenti DDL nell'editor SQL di BigQuery per creare la seconda origine di dati sulla posizione con due record. Assegniamo a questa tabella il nome mdm_gemini.CITIBIKE_STATIONS_SOURCE2 e inseriamo 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. Generare embedding per i dati degli indirizzi

Gli embedding sono vettori numerici ad alta dimensionalità che rappresentano una determinata entità, ad esempio un testo o un file audio. I modelli di machine learning (ML) utilizzano gli incorporamenti per codificare la semantica di queste entità in modo da semplificarne il ragionamento e il confronto. Ad esempio, un'operazione comune nei modelli di clustering, classificazione e suggerimento è misurare la distanza tra i vettori in uno spazio di embedding per trovare gli elementi semanticamente più simili. L'API Vertex AI text-embeddings ti consente di creare un text embedding utilizzando l'AI generativa su Vertex AI. Gli incorporamenti 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 text embeddings:
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 incorporamenti remoti è pronto, generiamo gli incorporamenti per la prima origine e archiviamoli 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 archiviare il campo dei risultati degli incorporamenti nella stessa tabella mdm_gemini.CITIBIKE_STATIONS che hai creato in precedenza.

  1. Per generare incorporamenti 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;

In questo modo dovrebbero essere creati gli incorporamenti per la seconda origine. Tieni presente che abbiamo creato il campo degli incorporamenti nella stessa tabella CITIBIKE_STATIONS_SOURCE2.

  1. Per visualizzare gli embedding generati per le tabelle 1 e 2 dei dati di origine, 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. Esegui una ricerca vettoriale per segnalare indirizzi duplicati

In questo passaggio, cercherai nella colonna ml_generate_embedding_result degli incorporamenti di indirizzi della tabella mdm_gemini.CITIBIKE_STATIONS_SOURCE1 i primi due incorporamenti che corrispondono 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 eseguiamo la query: mdm_gemini.CITIBIKE_STATIONS_SOURCE1 sul campo ml_generate_embedding_result

Tabella che utilizziamo 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 è Euclidea.

Il risultato della query è il seguente:

Set di risultati

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

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 base alla distanza in ordine DECRESCENTE, il che significa che vogliamo elencare i risultati in ordine di distanza decrescente. Tuttavia, noterai che l'ordine di distanza della seconda query è invertito. Riesci a indovinare il motivo?

Sì!! Hai indovinato! Nella similarità del coseno, un numero più grande indica una maggiore somiglianza e una distanza minore. Nella distanza euclidea, un numero maggiore indica una distanza maggiore tra i valori.

Per ulteriori informazioni sulla comprensione di MDM e suggerimenti per comprendere la differenza e le applicazioni di Euclideo e Cosine, leggi il 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 navigando in Cloud Functions, selezionando la funzione che vuoi eliminare dall'elenco e facendo clic su Elimina.

12. Complimenti

Complimenti! Hai dimostrato la potenza dell'utilizzo di Gemini 1.0 Pro e della chiamata di funzione per trasformare alcune attività MDM in funzionalità di AI generativa semplificate ma potenti, deterministiche e affidabili. Ora che lo sai, puoi 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 potresti automatizzare con chiamate strutturate incorporate nelle risposte dell'AI generativa? Per indicazioni più dettagliate, consulta la documentazione di Vertex AI, BigQuery Remote Functions, Cloud Functions, Embeddings e Vector Search. Ecco il repository GitHub per questo progetto. Facci sapere cosa realizzi con queste conoscenze.