Generazione dati sintetici

Genera dati sintetici utilizzando generatori casuali, algoritmi, modelli statistici e modelli LLM (Large Language Models) per simulare dati reali per sviluppare e testare soluzioni in modo efficace.

I dati sintetici possono essere uno strumento potente per lo sviluppo e il test di soluzioni, soprattutto quando i dati effettivi non esistono o non possono essere utilizzati. I dati sintetici o generati artificialmente possono avere molte delle caratteristiche dei dati reali. I dati sintetici vengono in genere creati utilizzando generatori casuali, algoritmi o modelli statistici per simulare le caratteristiche e le distribuzioni dei dati reali. Tuttavia, questo può essere complesso da produrre o fare affidamento su strumenti con caratteristiche di varia sofisticazione. Con la disponibilità di LLM (Large Language Models), possono essere generati dati più pertinenti e specifici dello schema che considerano le caratteristiche espresse in linguaggio naturale.

Argomenti

Vantaggi della generazione di dati sintetici

La generazione sintetica dei dati consente di popolare le copie dei metadati del database, supportando progetti di sviluppo, test e apprendimento automatico senza utilizzare dati riservati provenienti da tabelle originali.

Synthetic Data Generation offre i seguenti vantaggi:
  • Popolazione di copie di metadati con dati sintetici: una copia di metadati replica la struttura di un database o di uno schema senza includere dati effettivi. Select AI consente la generazione di dati sintetici per popolare queste copie, proteggendo i dati sensibili e consentendo allo stesso tempo lo sviluppo, il test e la creazione di modelli. Questo approccio supporta i test di performance e scalabilità.

  • Avvio di nuovi progetti: quando si avvia un nuovo progetto, i dati effettivi potrebbero non essere disponibili. I dati sintetici forniscono campioni realistici per aiutare a dimostrare i concetti e ottenere supporto per le proposte di progetto.

  • Convalida della user experience: i dati sintetici aiutano a testare le interfacce utente fornendo set di dati diversi per scoprire difetti di progettazione, prestazioni e problemi di scalabilità.

  • Supporto di progetti di AI e Machine Learning: i dati sintetici sono utili per la formazione di modelli di AI e Machine Learning quando i dati reali non sono disponibili o sono limitati. Gli LLM possono generare dati con pattern specifici per facilitare l'addestramento e il punteggio dei modelli.

Genera dati sintetici

Utilizzare la funzione DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA per generare dati sintetici ed eseguire query sui dati utilizzando le azioni Seleziona AI.

Monitoraggio e risoluzione dei problemi di generazione dei dati sintetici

Quando si generano grandi quantità di dati in molte tabelle, Select AI suddivide i task di generazione dei dati sintetici in chunk più piccoli ed esegue i task in parallelo. Lo stato di ogni chunk viene tracciato nella tabella SYNTHETIC_DATA$<operation_id>_STATUS.

Le operazioni di generazione dei dati sintetici vengono registrate nelle tabelle DBA_LOAD_OPERATIONS e USER_LOAD_OPERATIONS. Utilizzare queste tabelle per monitorare l'operazione DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA. Per ulteriori dettagli, vedere Tenere traccia delle operazioni di caricamento DBMS_CLOUD.

Dopo aver eseguito la generazione dei dati sintetici in una determinata sessione, è possibile ottenere il file <operation_id> più recente da USER_LOAD_OPERATION utilizzando quanto riportato di seguito.
SELECT max(id) FROM user_load_operations;

Per visualizzare le operazioni dei dati sintetici in esecuzione in un'altra sessione, utilizzare la vista DBA_LOAD_OPERATIONS.

Visualizza stato generazione dati sintetici

La tabella di stato dell'operazione di generazione dei dati sintetici mostra l'avanzamento di ogni tabella e del relativo chunk corrispondente. La colonna STATUS_TABLE in USER_LOAD_OPERATIONS o DBA_LOAD_OPERATIONS mostra il nome della tabella di stato. Il nome della tabella è SYNTHETIC_DATA$<operation_id>_STATUS e contiene le colonne riportate di seguito.

Nome Tipo di dati descrizione;

ID

NUMBER

Identificativo univoco del record.

NAME

VARCHAR2

Nome qualificato della tabella, ad esempio "ADB_USER"."EMPLOYEES"

BYTES

NUMBER

Numero desiderato di record per questo task di generazione dati

ROWS_LOADED

NUMBER

Numero effettivo di record generati.

CHECKSUM

VARCHAR2

Valore iniziale per la chiave primaria durante questo task di generazione dati.

LAST_MODIFIED

TIMESTAMP WITH TIME ZONE

Indicatore orario che indica l'ora dell'ultima modifica del record.

STATUS

VARCHAR2

Stato del task di generazione dati. I valori validi sono:
  • COMPLETED
  • FAILED
  • PENDING
  • SKIPPED

ERROR_CODE

NUMBER

Codice di errore se il task di generazione dei dati non riesce.

ERROR_MESSAGE

VARCHAR2

Messaggio di errore fornito se il task non riesce.

END_TIME

TIMESTAMP WITH TIME ZONE

Indicatore orario che segnala la fine del task di generazione dati.
Esempio: controllare il numero di record generati per ogni tabella

Per controllare il numero di record generati per ogni tabella, eseguire le operazioni riportate di seguito.

SELECT name, SUM(rows_loaded) FROM synthetic_data$<operation_id>_status group by name;

Eseguire la query ROWS_LOADED per confermare il numero di righe caricate per ogni chunk e SUM(ROWS_LOADED) per le righe per ogni tabella.

BEGIN
    DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
        profile_name => 'GENAI',
        object_list => '[{"owner": "ADB_USER", "name": "DIRECTOR","record_count":150},
                         {"owner": "ADB_USER", "name": "MOVIE_ACTOR","record_count":300},
                         {"owner": "ADB_USER", "name": "CLASSES", "user_prompt":"all in fall semester","record_count":5},
                         {"owner": "ADB_USER", "name": "ACTOR","record_count":220},
                         {"owner": "ADB_USER", "name": "MOVIE","record_count":50}]'
    );
END;
/
 
 
-- Check loaded rows for each chunk
SQL> SELECT name, rows_loaded FROM synthetic_data$141_status order by name;
NAME                           ROWS_LOADED
------------------------------------------
"ADB_USER"."ACTOR"                        188
"ADB_USER"."ACTOR"                         32
"ADB_USER"."CLASSES"                        5
"ADB_USER"."DIRECTOR"                     150
"ADB_USER"."MOVIE"                         50
"ADB_USER"."MOVIE_ACTOR"                   38
"ADB_USER"."MOVIE_ACTOR"                  114
"ADB_USER"."MOVIE_ACTOR"                  148
 
 
 
-- Check loaded rows for each table
SQL> SELECT name, SUM(rows_loaded) FROM synthetic_data$141_status group by name;
 
NAME                      SUM(ROWS_LOADED)
------------------------------------------
"ADB_USER"."DIRECTOR"                     150
"ADB_USER"."MOVIE_ACTOR"                  300
"ADB_USER"."CLASSES"                        5
"ADB_USER"."ACTOR"                        220
"ADB_USER"."MOVIE"                         50