Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Convalida dei dati TensorFlow: controllo e analisi dei dati

Una volta che i tuoi dati sono in una pipeline TFX, puoi utilizzare i componenti TFX per analizzarli e trasformarli. È possibile utilizzare questi strumenti anche prima di addestrare un modello.

Esistono molte ragioni per analizzare e trasformare i tuoi dati:

  • Per trovare problemi nei tuoi dati. I problemi comuni includono:
    • Dati mancanti, ad esempio funzioni con valori vuoti.
    • Etichette trattate come funzioni, in modo che il tuo modello riesca a sbirciare la risposta giusta durante l'allenamento.
    • Funzionalità con valori al di fuori dell'intervallo previsto.
    • Anomalie dei dati.
  • Progettare set di funzionalità più efficaci. Ad esempio, puoi identificare:
    • Caratteristiche particolarmente informative.
    • Funzionalità ridondanti.
    • Funzionalità che variano in modo così ampio che possono rallentare l'apprendimento.
    • Funzionalità con poche o nessuna informazione predittiva unica.

Gli strumenti TFX possono sia aiutare a trovare bug di dati, sia aiutare a progettare le caratteristiche.

Convalida dei dati TensorFlow

Panoramica

La convalida dei dati TensorFlow identifica le anomalie nella formazione e nella gestione dei dati e può creare automaticamente uno schema esaminando i dati. Il componente può essere configurato per rilevare diverse classi di anomalie nei dati. Può

  1. Eseguire controlli di validità confrontando le statistiche dei dati con uno schema che codifica le aspettative dell'utente.
  2. Rileva l'inclinazione del servizio di addestramento confrontando esempi di dati di addestramento e servizio.
  3. Rileva la deriva dei dati guardando una serie di dati.

Documentiamo ciascuna di queste funzionalità in modo indipendente:

Convalida di esempio basata sullo schema

Convalida dei dati TensorFlow identifica eventuali anomalie nei dati di input confrontando le statistiche dei dati con uno schema. Lo schema codifica le proprietà che i dati di input devono soddisfare, come tipi di dati o valori categorici, e possono essere modificati o sostituiti dall'utente.

Funzionalità avanzate dello schema

Questa sezione tratta una configurazione dello schema più avanzata che può aiutare con configurazioni speciali.

Caratteristiche sparse

La codifica di funzioni sparse negli Esempi di solito introduce più Funzioni che dovrebbero avere la stessa valenza per tutti gli Esempi. Ad esempio la funzione sparsa:

 
WeightedCategories = [('CategoryA', 0.3), ('CategoryX', 0.7)]
 
verrebbe codificato utilizzando funzionalità separate per indice e valore:
 
WeightedCategoriesIndex = ['CategoryA', 'CategoryX']
WeightedCategoriesValue = [0.3, 0.7]
 
con la limitazione che la valenza dell'indice e della funzione valore devono corrispondere per tutti gli esempi. Questa restrizione può essere resa esplicita nello schema definendo una sparse_feature:
 
sparse_feature {
  name: 'WeightedCategories'
  index_feature { name: 'WeightedCategoriesIndex' }
  value_feature { name: 'WeightedCategoriesValue' }
}
 

La definizione di funzionalità sparse richiede uno o più indici e una funzione di valore che si riferiscono a funzioni esistenti nello schema. La definizione esplicita delle funzionalità sparse consente a TFDV di verificare che le valenze di tutte le funzionalità indicate corrispondano.

Alcuni casi d'uso introducono restrizioni di valenza simili tra le funzionalità, ma non codificano necessariamente una funzionalità sparsa. L'uso della funzione sparse dovrebbe sbloccarti, ma non è l'ideale.

Ambienti di schema

Per impostazione predefinita, le convalide presuppongono che tutti gli esempi in una pipeline aderiscano a un singolo schema. In alcuni casi è necessario introdurre lievi variazioni dello schema, ad esempio le funzionalità utilizzate come etichette sono richieste durante l'addestramento (e devono essere convalidate), ma mancano durante la pubblicazione. Gli ambienti possono essere utilizzati per esprimere tali requisiti, in particolare default_environment() , in_environment() , not_in_environment() .

Ad esempio, supponiamo che una formazione denominata "ETICHETTA" sia necessaria per la formazione, ma si prevede che manchi dalla pubblicazione. Ciò può essere espresso da:

  • Definire due ambienti distinti nello schema: ["SERVING", "TRAINING"] e associare 'LABEL' solo all'ambiente "TRAINING".
  • Associare i dati di addestramento all'ambiente "TRAINING" e i dati di servizio all'ambiente "SERVING".
Generazione di schemi

Lo schema dei dati di input è specificato come istanza dello schema TensorFlow.

Invece di costruire uno schema manualmente da zero, uno sviluppatore può fare affidamento sulla costruzione automatica dello schema di TensorFlow Data Validation. In particolare, la validazione dei dati TensorFlow costruisce automaticamente uno schema iniziale basato sulle statistiche calcolate sui dati di addestramento disponibili nella pipeline. Gli utenti possono semplicemente rivedere questo schema generato automaticamente, modificarlo in base alle esigenze, controllarlo in un sistema di controllo versione e inserirlo esplicitamente nella pipeline per un'ulteriore convalida.

TFDV include infer_schema() per generare automaticamente uno schema. Per esempio:

 schema = tfdv.infer_schema(statistics=train_stats)
tfdv.display_schema(schema=schema)
 

Ciò innesca una generazione automatica di schemi basata sulle seguenti regole:

  • Se uno schema è già stato generato automaticamente, viene utilizzato così com'è.

  • In caso contrario, TensorFlow Data Validation esamina le statistiche dei dati disponibili e calcola uno schema adatto per i dati.

Nota: lo schema generato automaticamente è il massimo sforzo e cerca solo di inferire le proprietà di base dei dati. Si prevede che gli utenti lo rivedano e lo modifichino secondo necessità.

Rilevamento dell'inclinazione al servizio della formazione

Panoramica

Il rilevatore di inclinazione durante la formazione viene eseguito come sottocomponente della convalida dei dati TensorFlow e rileva l'inclinazione tra i dati di formazione e pubblicazione.

Tipi di inclinazione

Sulla base di vari post-produzione della produzione, abbiamo ridotto i vari tipi di inclinazione a quattro categorie chiave. Successivamente discuteremo ciascuna di queste categorie e forniremo scenari di esempio in cui si verificano.

  1. L'inclinazione dello schema si verifica quando i dati di addestramento e pubblicazione non sono conformi allo stesso schema. Poiché lo schema descrive le proprietà logiche dei dati, si prevede che l'addestramento e i dati di servizio aderiscano allo stesso schema. Eventuali deviazioni previste tra i due (come la funzione etichetta presente solo nei dati di addestramento ma non nella pubblicazione) devono essere specificate attraverso il campo degli ambienti nello schema.

    Poiché la generazione di dati di formazione è una fase di elaborazione di dati in blocco, mentre la generazione di dati (online) di solito è una fase sensibile alla latenza, è comune disporre di percorsi di codice diversi che generano dati di formazione e pubblicazione. Questo è un errore. Qualsiasi discrepanza tra questi due codepati (a causa di errori dello sviluppatore o rilasci binari incoerenti) può portare a uno sbilanciamento dello schema.

    Scenario di esempio

    Bob vuole aggiungere una nuova funzionalità al modello e aggiungerla ai dati di allenamento. Le metriche di formazione offline sembrano grandi, ma le metriche online sono molto peggio. Dopo ore di debug, Bob si rende conto di aver dimenticato di aggiungere la stessa funzionalità nel percorso del codice di pubblicazione. Il modello ha dato grande importanza a questa nuova funzionalità e poiché non era disponibile al momento della pubblicazione, ha generato previsioni scarse che hanno portato a metriche online peggiori.

  2. L'inclinazione della funzione si verifica quando i valori della funzione su cui si allena un modello sono diversi dai valori della funzione che vede al momento della pubblicazione. Ciò può accadere per diversi motivi, tra cui:

    • Se un'origine dati esterna che fornisce alcuni valori di funzionalità viene modificata tra tempo di addestramento e di servizio.

    • Logica incoerente per la generazione di funzioni tra formazione e servizio. Ad esempio, se si applica una trasformazione solo in uno dei due percorsi di codice.

    Scenario di esempio

    Alice ha una pipeline di apprendimento automatico continuo in cui i dati di servizio per oggi vengono registrati e utilizzati per generare i dati di allenamento del giorno successivo. Al fine di risparmiare spazio, decide di registrare solo l'ID video al momento della pubblicazione e di recuperare le proprietà del video da un archivio dati durante la generazione dei dati di addestramento.

    In tal modo, introduce inavvertitamente un disallineamento che è specificamente pericoloso per i video appena caricati e virali il cui tempo di visualizzazione può cambiare sostanzialmente tra il tempo di servizio e quello di addestramento (come mostrato di seguito).

     
     Serving Example           Training Example
     -------------------------  -------------------------
     features {                 features {
       feature {                  feature {
         key "vid"                  key "vid"
         value { int64_list {       value { int64_list {
           value 92392               value 92392
         } }                         } }
       }                          }
       feature {                  feature {
         key "views"               key "views"
         value { int_list {       value { bytes_list {
           value " 10 "                value " 10000 "  # skew
         } }                         } }
       }                          }
     }                          }
     

    Questa è un'istanza di inclinazione delle funzioni poiché i dati di allenamento vedono un numero gonfiato di visualizzazioni.

  3. L'inclinazione della distribuzione si verifica quando la distribuzione dei valori delle funzioni per i dati di addestramento è significativamente diversa dalla pubblicazione dei dati. Una delle cause principali dell'inclinazione della distribuzione è l'utilizzo di un corpus completamente diverso per addestrare la generazione dei dati per superare la mancanza di dati iniziali nel corpus desiderato. Un altro motivo è un meccanismo di campionamento difettoso che sceglie solo un sottocampione dei dati di servizio su cui allenarsi.

    Scenario di esempio

    Ad esempio, al fine di compensare una porzione di dati sottorappresentata, se viene utilizzato un campionamento distorto senza appesantire adeguatamente gli esempi sottocampionati, la distribuzione dei valori delle caratteristiche tra i dati di addestramento e di servizio viene distorta in modo aritico.

  4. Segnare / servire l'inclinazione è più difficile da rilevare e si verifica quando viene effettivamente servito solo un sottoinsieme degli esempi segnati. Poiché le etichette sono disponibili solo per gli esempi forniti e non per gli esempi ottenuti, solo questi esempi vengono utilizzati per l'allenamento. Ciò causa implicitamente il modello in modo errato sugli esempi segnati poiché sono gradualmente sottorappresentati nei dati di addestramento.

    Scenario di esempio

    Prendi in considerazione un sistema di annunci che pubblica i primi 10 annunci. Di questi 10 annunci, solo uno di essi può essere cliccato dall'utente. Tutti e 10 questi esempi serviti vengono utilizzati per l'allenamento dei prossimi giorni - 1 positivo e 9 negativo. Tuttavia, al momento della pubblicazione il modello addestrato è stato utilizzato per ottenere centinaia di annunci. Gli altri 90 annunci che non sono mai stati offerti vengono implicitamente rimossi dai dati di formazione. Ciò si traduce in un circuito di feedback implicito che travisa ulteriormente le cose di livello inferiore poiché non sono visibili nei dati di addestramento.

Perché dovresti preoccuparti?

L'inclinazione è difficile da rilevare ed è prevalente in molte condotte ML. Ci sono stati diversi incidenti in cui ciò ha causato il peggioramento delle prestazioni e la perdita di entrate.

Cosa è supportato attualmente?

Attualmente, la validazione dei dati TensorFlow supporta l'inclinazione dello schema, l'inclinazione delle caratteristiche e il rilevamento dell'inclinazione della distribuzione.

Rilevamento della deriva

Il rilevamento della deriva è supportato per le caratteristiche categoriche e tra intervalli di dati consecutivi (ovvero tra intervallo N e intervallo N + 1), ad esempio tra diversi giorni di dati di allenamento. Esprimiamo la deriva in termini di distanza L-infinito e puoi impostare la distanza di soglia in modo da ricevere avvisi quando la deriva è maggiore di quanto sia accettabile. L'impostazione della distanza corretta è in genere un processo iterativo che richiede conoscenza del dominio e sperimentazione.

Utilizzo delle visualizzazioni per controllare i tuoi dati

Convalida dei dati TensorFlow fornisce strumenti per visualizzare la distribuzione dei valori delle caratteristiche. Esaminando queste distribuzioni in un notebook Jupyter utilizzando Facets è possibile rilevare problemi comuni con i dati.

Statistiche sulle funzionalità

Identificazione di distribuzioni sospette

È possibile identificare bug comuni nei dati utilizzando una visualizzazione Panoramica facce per cercare distribuzioni sospette di valori di funzionalità.

Dati non bilanciati

Una funzione sbilanciata è una caratteristica per la quale predomina un valore. Le funzionalità non bilanciate possono verificarsi in modo naturale, ma se una funzionalità ha sempre lo stesso valore è possibile che si verifichi un bug di dati. Per rilevare funzioni sbilanciate in una panoramica delle sfaccettature, selezionare "Non uniformità" dal menu a discesa "Ordina per".

Le funzioni più sbilanciate verranno elencate nella parte superiore di ciascun elenco di tipi di funzionalità. Ad esempio, la seguente schermata mostra una funzione che è tutta a zero e una seconda altamente sbilanciata, in cima all'elenco "Funzioni numeriche":

Visualizzazione di dati sbilanciati

Dati distribuiti uniformemente

Una caratteristica distribuita uniformemente è una caratteristica per la quale tutti i possibili valori appaiono con quasi la stessa frequenza. Come per i dati sbilanciati, questa distribuzione può avvenire naturalmente, ma può anche essere prodotta da bug di dati.

Per rilevare funzioni distribuite uniformemente in una panoramica delle sfaccettature, selezionare "Non uniformità" dal menu a discesa "Ordina per" e selezionare la casella di controllo "Ordine inverso":

Istogramma di dati uniformi

I dati delle stringhe sono rappresentati usando i grafici a barre se ci sono 20 o meno valori univoci e come grafico di distribuzione cumulativo se ci sono più di 20 valori univoci. Quindi, per i dati di stringa, le distribuzioni uniformi possono apparire come grafici a barre piatte come quello sopra o linee rette come quello qui sotto:

Grafico a linee: distribuzione cumulativa di dati uniformi

Bug che possono produrre dati distribuiti uniformemente

Ecco alcuni bug comuni che possono produrre dati distribuiti uniformemente:

  • Utilizzo di stringhe per rappresentare tipi di dati non stringa come le date. Ad esempio, avrai molti valori univoci per una funzione datetime con rappresentazioni come "2017-03-01-11-45-03". I valori univoci verranno distribuiti uniformemente.

  • Compresi indici come "numero di riga" come caratteristiche. Anche qui hai molti valori unici.

Dati mancanti

Per verificare se a una funzione mancano completamente i valori:

  1. Scegli "Quantità mancante / zero" dal menu a discesa "Ordina per".
  2. Seleziona la casella di controllo "Ordine inverso".
  3. Guarda la colonna "mancante" per vedere la percentuale di istanze con valori mancanti per una funzione.

Un bug di dati può anche causare valori di funzionalità incompleti. Ad esempio, ci si può aspettare che l'elenco dei valori di una caratteristica abbia sempre tre elementi e che a volte ne abbia solo uno. Per verificare la presenza di valori incompleti o altri casi in cui gli elenchi di valori di funzionalità non hanno il numero previsto di elementi:

  1. Scegli "Lunghezza elenco valori" dal menu a discesa "Grafico da mostrare" sulla destra.

  2. Guarda il grafico a destra di ogni riga di funzionalità. Il grafico mostra l'intervallo delle lunghezze dell'elenco valori per la funzione. Ad esempio, la riga evidenziata nello screenshot seguente mostra una funzione che ha alcuni elenchi di valori di lunghezza zero:

Schermata Panoramica facce con funzione con elenchi di valori di funzione a lunghezza zero

Grandi differenze di scala tra le funzionalità

Se le funzionalità variano ampiamente in scala, il modello potrebbe avere difficoltà di apprendimento. Ad esempio, se alcune funzionalità variano da 0 a 1 e altre variano da 0 a 1.000.000.000, si ha una grande differenza di scala. Confronta le colonne "max" e "min" tra le funzionalità per trovare scale ampiamente variabili.

Prendi in considerazione la normalizzazione dei valori delle funzionalità per ridurre queste ampie variazioni.

Etichette con etichette non valide

Gli stimatori di TensorFlow hanno restrizioni sul tipo di dati che accettano come etichette. Ad esempio, i classificatori binari in genere funzionano solo con etichette {0, 1}.

Rivedere i valori delle etichette nella Panoramica delle sfaccettature e assicurarsi che siano conformi ai requisiti degli stimatori .