Generazione dati sintetici

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

I dati sintetici possono essere uno strumento potente quando si sviluppano e si testano soluzioni, soprattutto quando i dati effettivi non esistono ancora 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 di dati reali. Tuttavia, questo può essere complesso per produrre o fare affidamento su strumenti con caratteristiche di varia sofisticazione. Con la disponibilità di modelli linguistici di grandi dimensioni (LLM), 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 di dati sintetici consente di popolare le copie dei metadati del database, supportando progetti di sviluppo, test e machine learning senza utilizzare dati sensibili dalle tabelle originali.

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

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

  • Convalida dell'esperienza utente: 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 intelligenza artificiale e machine learning: i dati sintetici sono utili per addestrare i modelli di intelligenza artificiale 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 della generazione di 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 Traccia operazioni di caricamento DBMS_CLOUD.

Dopo aver eseguito la generazione di dati sintetici in una determinata sessione, è possibile ottenere la versione più recente di <operation_id> 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 una sessione diversa, 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 il 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 seguenti:

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 di record desiderato 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'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 dati non riesce.

ERROR_MESSAGE

VARCHAR2

Messaggio di errore fornito se il task non riesce.

END_TIME

TIMESTAMP WITH TIME ZONE

Indicatore orario che contrassegna la fine del task di generazione dati.
Esempio: controllo del numero di record generati per ogni tabella

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

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

Eseguire una 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