Tutoriel

Statut éditorial : En attente de relecture

Créer un dataset Hugging Face à partir de données métier

Transformer des données métier en Dataset, définir les types, séparer les jeux, anonymiser puis versionner le résultat sur le Hub.

Classification du contenu

Types

  • Données et Machine Learning
Niveau
Intermédiaire
Publié le
24 août 2026
Dernière relecture
Relecture en attente
Prochaine vérification
24 octobre 2026

Un dataset exploitable ne se résume pas à un CSV. Il possède un schéma, une provenance, des règles de nettoyage, des séparations reproductibles et une documentation qui empêche les mauvais usages.

Installer les outils

~~~bash python -m venv .venv source .venv/bin/activate pip install -U datasets huggingface_hub pandas ~~~

Préparez un fichier ne contenant aucune donnée personnelle inutile. Travaillez sur une copie exportée, jamais directement sur la base de production.

Définir un schéma

~~~python from datasets import Dataset, Features, Value, ClassLabel import pandas as pd

features = Features({ 'id': Value('string'), 'text': Value('string'), 'label': ClassLabel(names=['billing', 'technical', 'other']), 'created_at': Value('timestamp[us]'), })

frame = pd.read_parquet('tickets-clean.parquet') dataset = Dataset.from_pandas( frame[['id', 'text', 'label', 'created_at']], features=features, preserve_index=False, ) print(dataset.features) ~~~

Le type explicite détecte tôt les valeurs inattendues. Normalisez les libellés avant la conversion et refusez les catégories inconnues au lieu de les mapper silencieusement.

Nettoyer et contrôler

~~~python def valid(row): return bool(row['text'].strip()) and len(row['text']) <= 20_000

dataset = dataset.filter(valid) dataset = dataset.map(lambda row: {'text': row['text'].strip()})

assert len(set(dataset['id'])) == len(dataset) print(dataset.to_pandas()['label'].value_counts()) ~~~

Ajoutez des contrôles de langue, doublons, valeurs manquantes et équilibre des classes. Pour les données personnelles, appliquez une anonymisation testée et gardez une trace de la base légale et de la durée de conservation.

Séparer sans fuite

~~~python split = dataset.train_test_split( test_size=0.2, seed=42, stratify_by_column='label', ) ~~~

Si plusieurs lignes viennent d’un même client, document ou conversation, séparez par groupe plutôt que par ligne : sinon train et test partageront presque le même contenu.

Enregistrer et publier

~~~python split.save_to_disk('support_dataset') # Après authentification et revue : # split.push_to_hub('organisation/support-tickets-v1', private=True) ~~~

Publiez d’abord en privé. Ajoutez une dataset card décrivant sources, licence, langue, taille, champs, biais connus, usages prévus et usages interdits. Versionnez également le script de transformation.

FAQ

Peut-on corriger les labels après publication ?

Oui, mais créez une nouvelle révision et conservez un changelog. Un modèle doit pouvoir être relié exactement à la version qui l’a entraîné.

Faut-il conserver les données brutes ?

Seulement si votre gouvernance l’autorise. Séparez-les du dataset distribué, restreignez les accès et documentez la rétention.

Sources utilisées