Rejoignez la communauté SIG TFX-Addons et contribuez à rendre TFX encore meilleur ! Rejoignez SIG TFX-Addons

Validation des données TensorFlow: vérification et analyse de vos données

Une fois vos données dans un pipeline TFX, vous pouvez utiliser des composants TFX pour les analyser et les transformer. Vous pouvez utiliser ces outils avant même d'entraîner un modèle.

Il existe de nombreuses raisons d'analyser et de transformer vos données:

  • Pour trouver des problèmes dans vos données. Les problèmes courants incluent:
    • Données manquantes, telles que les entités avec des valeurs vides.
    • Les étiquettes sont traitées comme des fonctionnalités, afin que votre modèle puisse jeter un coup d'œil à la bonne réponse pendant l'entraînement.
    • Fonctionnalités avec des valeurs en dehors de la plage attendue.
    • Anomalies de données.
    • Le modèle appris par transfert a un prétraitement qui ne correspond pas aux données d'apprentissage.
  • Pour concevoir des ensembles de fonctionnalités plus efficaces. Par exemple, vous pouvez identifier:
    • Fonctionnalités particulièrement informatives.
    • Fonctionnalités redondantes.
    • Des fonctionnalités dont l’échelle varie tellement qu’elles peuvent ralentir l’apprentissage.
    • Fonctionnalités avec peu ou pas d'informations prédictives uniques.

Les outils TFX peuvent à la fois aider à trouver des bogues de données et aider à l'ingénierie des fonctionnalités.

Validation des données TensorFlow

Aperçu

TensorFlow Data Validation identifie les anomalies dans la formation et la diffusion des données, et peut créer automatiquement un schéma en examinant les données. Le composant peut être configuré pour détecter différentes classes d'anomalies dans les données. Ça peut

  1. Effectuez des contrôles de validité en comparant les statistiques de données à un schéma qui codifie les attentes de l'utilisateur.
  2. Détectez le biais de diffusion de la formation en comparant des exemples de formation et de diffusion de données.
  3. Détectez la dérive des données en examinant une série de données.

Nous documentons chacune de ces fonctionnalités indépendamment:

Validation d'exemple basée sur un schéma

La validation des données TensorFlow identifie toute anomalie dans les données d'entrée en comparant les statistiques de données à un schéma. Le schéma codifie les propriétés que les données d'entrée sont censées satisfaire, telles que les types de données ou les valeurs catégorielles, et peut être modifié ou remplacé par l'utilisateur.

La validation des données Tensorflow est généralement invoquée plusieurs fois dans le contexte du pipeline TFX: (i) pour chaque division obtenue à partir d'ExampleGen, (ii) pour toutes les données pré-transformées utilisées par Transform et (iii) pour toutes les données post-transformées générées par Transformer. Lorsqu'elles sont appelées dans le contexte de Transform (ii-iii), les options de statistiques et les contraintes basées sur le schéma peuvent être définies en définissant stats_options_updater_fn . Ceci est particulièrement utile lors de la validation de données non structurées (par exemple des fonctionnalités de texte). Voir le code utilisateur pour un exemple.

Fonctionnalités de schéma avancées

Cette section couvre une configuration de schéma plus avancée qui peut aider avec des configurations spéciales.

Caractéristiques clairsemées

L'encodage de fonctionnalités éparses dans les exemples introduit généralement plusieurs fonctionnalités qui devraient avoir la même valence pour tous les exemples. Par exemple, la fonction fragmentée:


WeightedCategories = [('CategoryA', 0.3), ('CategoryX', 0.7)]
serait codée en utilisant des fonctionnalités distinctes pour l'index et la valeur:

WeightedCategoriesIndex = ['CategoryA', 'CategoryX']
WeightedCategoriesValue = [0.3, 0.7]
avec la restriction que la valence de la fonction d'index et de valeur doit correspondre pour tous les exemples. Cette restriction peut être rendue explicite dans le schéma en définissant une sparse_feature:

sparse_feature {
  name: 'WeightedCategories'
  index_feature { name: 'WeightedCategoriesIndex' }
  value_feature { name: 'WeightedCategoriesValue' }
}

La définition de fonction fragmentée nécessite un ou plusieurs index et une fonction de valeur qui font référence à des fonctionnalités qui existent dans le schéma. La définition explicite des fonctionnalités éparses permet à TFDV de vérifier que les valences de toutes les fonctionnalités référencées correspondent.

Certains cas d'utilisation introduisent des restrictions de valence similaires entre les fonctionnalités, mais n'encodent pas nécessairement une fonctionnalité éparse. L'utilisation de la fonctionnalité clairsemée devrait vous débloquer, mais n'est pas idéale.

Environnements de schéma

Par défaut, les validations supposent que tous les exemples d'un pipeline adhèrent à un seul schéma. Dans certains cas, il est nécessaire d'introduire de légères variations de schéma, par exemple des fonctionnalités utilisées comme étiquettes sont requises pendant la formation (et doivent être validées), mais sont manquantes lors de la diffusion. Les environnements peuvent être utilisés pour exprimer de telles exigences, en particulier default_environment() , in_environment() , not_in_environment() .

Par exemple, supposons qu'une fonctionnalité nommée «LABEL» est requise pour la formation, mais qu'elle ne devrait pas être diffusée. Cela peut être exprimé par:

  • Définissez deux environnements distincts dans le schéma: ["SERVING", "TRAINING"] et associez 'LABEL' uniquement à l'environnement "TRAINING".
  • Associez les données de formation à l'environnement "TRAINING" et les données de service à l'environnement "SERVING".
Génération de schéma

Le schéma de données d'entrée est spécifié en tant qu'instance du schéma TensorFlow.

Au lieu de construire manuellement un schéma à partir de zéro, un développeur peut s'appuyer sur la construction automatique de schéma de TensorFlow Data Validation. Plus précisément, TensorFlow Data Validation construit automatiquement un schéma initial basé sur des statistiques calculées sur les données d'entraînement disponibles dans le pipeline. Les utilisateurs peuvent simplement consulter ce schéma généré automatiquement, le modifier selon les besoins, l'intégrer dans un système de contrôle de version et le pousser explicitement dans le pipeline pour une validation supplémentaire.

TFDV inclut infer_schema() pour générer un schéma automatiquement. Par example:

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

Cela déclenche une génération automatique de schéma basée sur les règles suivantes:

  • Si un schéma a déjà été généré automatiquement, il est utilisé tel quel.

  • Sinon, TensorFlow Data Validation examine les statistiques de données disponibles et calcule un schéma approprié pour les données.

Remarque: Le schéma généré automatiquement est au mieux et essaie uniquement de déduire les propriétés de base des données. On s'attend à ce que les utilisateurs l'examinent et le modifient au besoin.

Détection de biais de service de formation

Aperçu

La validation des données TensorFlow peut détecter le biais de distribution entre la formation et la diffusion des données. Un biais de distribution se produit lorsque la distribution des valeurs de fonctionnalité pour les données d'entraînement est très différente de celle des données de diffusion. L'une des principales causes du biais de distribution est l'utilisation d'un corpus complètement différent pour la génération de données d'apprentissage afin de surmonter le manque de données initiales dans le corpus souhaité. Une autre raison est un mécanisme d'échantillonnage défectueux qui ne choisit qu'un sous-échantillon des données de service sur lesquelles s'entraîner.

Exemple de scénario

Reportez- vous au Guide de démarrage de la validation des données TensorFlow pour plus d'informations sur la configuration de la détection des biais de diffusion de la formation.

Détection de dérive

La détection de dérive est prise en charge entre des plages de données consécutives (c'est-à-dire entre la plage N et la plage N + 1), par exemple entre différents jours de données d'apprentissage. Nous exprimons la dérive en termes de distance L-infini pour les caractéristiques catégoriques et la divergence approximative de Jensen-Shannon pour les caractéristiques numériques. Vous pouvez définir la distance seuil de manière à recevoir des avertissements lorsque la dérive est supérieure à ce qui est acceptable. La définition de la distance correcte est généralement un processus itératif nécessitant une connaissance du domaine et une expérimentation.

Consultez le Guide de démarrage de la validation des données TensorFlow pour plus d'informations sur la configuration de la détection de dérive.

Utilisation de visualisations pour vérifier vos données

TensorFlow Data Validation fournit des outils permettant de visualiser la distribution des valeurs des fonctionnalités. En examinant ces distributions dans un bloc-notes Jupyter à l'aide de Facets, vous pouvez détecter les problèmes courants liés aux données.

Statistiques sur les fonctionnalités

Identification des distributions suspectes

Vous pouvez identifier les bogues courants dans vos données en utilisant un affichage Vue d'ensemble des facettes pour rechercher des distributions suspectes de valeurs de fonctionnalités.

Données déséquilibrées

Une fonction déséquilibrée est une fonction pour laquelle une valeur prédomine. Des fonctionnalités déséquilibrées peuvent se produire naturellement, mais si une fonctionnalité a toujours la même valeur, vous pouvez avoir un bogue de données. Pour détecter les caractéristiques déséquilibrées dans une vue d'ensemble des facettes, choisissez «Non-uniformité» dans la liste déroulante «Trier par».

Les fonctionnalités les plus déséquilibrées seront répertoriées en haut de chaque liste de types d'objets. Par exemple, la capture d'écran suivante montre une caractéristique qui est entièrement à zéro et une seconde qui est très déséquilibrée, en haut de la liste "Fonctions numériques":

Visualisation des données déséquilibrées

Données uniformément distribuées

Une entité uniformément distribuée est une entité pour laquelle toutes les valeurs possibles apparaissent à peu près à la même fréquence. Comme pour les données déséquilibrées, cette distribution peut se produire naturellement, mais peut également être produite par des bogues de données.

Pour détecter des entités uniformément distribuées dans une vue d'ensemble des facettes, choisissez "Non-uniformité" dans la liste déroulante "Trier par" et cochez la case "Ordre inverse":

Histogramme de données uniformes

Les données de chaîne sont représentées à l'aide de graphiques à barres s'il y a 20 valeurs uniques ou moins, et sous forme de graphique de distribution cumulative s'il y a plus de 20 valeurs uniques. Ainsi, pour les données de chaîne, les distributions uniformes peuvent apparaître sous forme de graphiques à barres plates comme celui ci-dessus ou de lignes droites comme celle ci-dessous:

Graphique linéaire: distribution cumulative de données uniformes

Bogues pouvant produire des données uniformément réparties

Voici quelques bogues courants qui peuvent produire des données uniformément distribuées:

  • Utilisation de chaînes pour représenter des types de données non chaîne tels que des dates. Par exemple, vous aurez de nombreuses valeurs uniques pour une entité datetime avec des représentations telles que "2017-03-01-11-45-03". Les valeurs uniques seront distribuées uniformément.

  • Y compris des indices comme "numéro de ligne" comme caractéristiques. Ici encore, vous avez de nombreuses valeurs uniques.

Données manquantes

Pour vérifier si une fonction ne contient entièrement aucune valeur:

  1. Choisissez "Montant manquant / zéro" dans le menu déroulant "Trier par".
  2. Cochez la case "Ordre inverse".
  3. Examinez la colonne "manquante" pour voir le pourcentage d'instances avec des valeurs manquantes pour une fonctionnalité.

Un bogue de données peut également entraîner des valeurs de fonctionnalités incomplètes. Par exemple, vous pouvez vous attendre à ce que la liste de valeurs d'une fonctionnalité ait toujours trois éléments et découvrir que parfois elle n'en a qu'un. Pour rechercher des valeurs incomplètes ou d'autres cas où les listes de valeurs de fonctionnalités n'ont pas le nombre d'éléments attendu:

  1. Choisissez "Longueur de la liste de valeurs" dans le menu déroulant "Graphique à afficher" sur la droite.

  2. Regardez le graphique à droite de chaque ligne d'entités. Le graphique montre la plage de longueurs de liste de valeurs pour l'entité. Par exemple, la ligne en surbrillance dans la capture d'écran ci-dessous montre une fonctionnalité qui a des listes de valeurs de longueur nulle:

Affichage de la vue d'ensemble des facettes avec fonction avec listes de valeurs de fonction de longueur nulle

Grandes différences d'échelle entre les objets

Si vos caractéristiques varient considérablement en échelle, le modèle peut avoir des difficultés d'apprentissage. Par exemple, si certaines fonctionnalités varient de 0 à 1 et d'autres de 0 à 1 000 000 000, vous avez une grande différence d'échelle. Comparez les colonnes "max" et "min" des entités pour trouver des échelles très variables.

Envisagez de normaliser les valeurs des fonctionnalités pour réduire ces larges variations.

Étiquettes avec des étiquettes non valides

Les Estimateurs de TensorFlow ont des restrictions sur le type de données qu'ils acceptent comme étiquettes. Par exemple, les classificateurs binaires ne fonctionnent généralement qu'avec des étiquettes {0, 1}.

Passez en revue les valeurs d'étiquette dans la vue d'ensemble des facettes et assurez-vous qu'elles sont conformes aux exigences des estimateurs .