Datasets : la matière première de votre IA
Un modèle ne vaut que par les données avec lesquelles il est entraîné ou évalué. Le Hub Hugging Face héberge plus de 500 000 datasets publics dans des milliers de langues : textes, images, audio, code, dialogues, documents scientifiques. Cet article vous apprend à naviguer dans ce catalogue, à charger efficacement un dataset en Python (même s’il représente plusieurs dizaines de téraoctets), à préparer vos propres données pour du fine-tuning, et à les uploader sur le Hub dans le bon format. À la fin, vous savez travailler des données comme un ML engineer expérimenté.
FineWeb, le dataset de texte web de Hugging Face, représente plusieurs dizaines de téraoctets et plus de 18 000 milliards de tokens dans sa version anglaise complète. De fait, aucun disque de laptop ne peut le stocker. Pourtant, en 2026, un chercheur peut commencer à l’explorer depuis son ordinateur, sans devoir tout télécharger. C’est cette bascule technique qui a transformé le rôle des datasets dans l’écosystème : ils ne sont plus des fichiers qu’on rapatrie, ce sont des flux qu’on consomme.
La bibliothèque datasets est l’outil qui rend ce flux utilisable pour entraîner, fine-tuner ou évaluer un modèle. Ainsi, comme Transformers pour les modèles, elle transforme en quelques lignes de code ce qui nécessitait auparavant une pipeline complète d’ingénierie de données.
Naviguer le catalogue : cinq filtres qui comptent
La page huggingface.co/datasets fonctionne comme celle des modèles. La colonne de gauche propose des filtres qui transforment la recherche en exploration ciblée.
- Task Categories — Text generation, question answering, translation, summarization, image classification, speech recognition, text-to-image, etc. Le point d’entrée principal. Un dataset « text-generation » sert à entraîner un LLM, un dataset « question-answering » sert à entraîner ou évaluer un modèle de Q&R.
- Languages — Des milliers de langues référencées. Pour travailler en français, filtrez d’abord par
fr. Plusieurs centaines de datasets francophones disponibles, des corpus littéraires aux transcriptions parlementaires. - Size — De « n<1K » à « 1T<n ». Indispensable : un dataset de 10 000 exemples suffit souvent pour du fine-tuning supervisé, un dataset de 100 millions de tokens convient pour de l’entraînement continu.
- Licenses — Même logique que pour les modèles. Pour un usage commercial, privilégiez Apache 2.0, MIT, CC-BY-4.0. Évitez CC-BY-NC qui interdit l’usage commercial, et lisez attentivement les licences custom.
- Modalities — Text, image, audio, video, tabular, 3D. Filtre qui monte en pertinence avec l’essor du multimodal.
Deux catégories ont fortement progressé et méritent donc votre attention. D’une part, la robotique a connu une croissance spectaculaire sur le Hub, portée par les datasets d’actions, de trajectoires, de vidéos et de capteurs. Ensuite, les données scientifiques : protéines (AlphaFold, ESM), dynamique moléculaire, chimie, biologie computationnelle. Ces deux segments illustrent d’ailleurs le glissement de l’IA open source au-delà du texte et de l’image.
Le Dataset Viewer : explorer sans rien télécharger
Cliquez sur un dataset public compatible, vous tombez alors sur le Dataset Viewer, un tableau interactif qui affiche les premières lignes du dataset directement dans le navigateur. Vous voyez ensuite la structure des colonnes, les types de données, la répartition train/validation/test, et vous pouvez exécuter des requêtes SQL sur les données sans rien télécharger.
Cette fonctionnalité repose souvent sur une conversion automatique en Parquet, le format colonne optimisé pour la lecture rapide. Le Dataset Viewer et la SQL Console permettent ainsi d’explorer de nombreux datasets directement dans le navigateur, sans rapatrier tous les fichiers en local.
Charger un dataset en Python en une ligne
La bibliothèque datasets est le compagnon de Transformers. Installation standard :
# Installation pip install -U datasets # Chargement d'un dataset du Hub en une ligne from datasets import load_dataset dataset = load_dataset("imdb") print(dataset) # DatasetDict({ # train: Dataset({ # features: ['text', 'label'], # num_rows: 25000 # }) # test: Dataset({ # features: ['text', 'label'], # num_rows: 25000 # }) # }) # Accès aux données print(dataset["train"][0]) # {'text': 'I rented I AM CURIOUS-YELLOW...', 'label': 0}
Les données sont téléchargées au premier appel et mises en cache dans ~/.cache/huggingface/datasets/. Les appels suivants lisent directement depuis le cache. La variable d’environnement HF_DATASETS_CACHE permet de changer l’emplacement, utile sur un serveur où l’espace du home est limité.
Le streaming : travailler des téraoctets sur un laptop
Pour les datasets qui ne tiennent pas sur le disque, streaming=True change la nature de l’objet retourné. Au lieu de tout télécharger, la bibliothèque lit les données à la volée au fur et à mesure de l’itération.
# Streaming d'un dataset massif from datasets import load_dataset dataset = load_dataset( "HuggingFaceFW/fineweb", split="train", streaming=True ) # Itération sans rien télécharger for i, example in enumerate(dataset): if i >= 10: break print(example["text"][:100]) # Filtrage et transformation à la volée filtered = dataset.filter(lambda x: x["language_score"] > 0.95) sampled = filtered.take(1000) # prend les 1000 premiers
Le streaming s’appuie de plus en plus sur des formats efficaces comme Parquet, avec une lecture par blocs et des mécanismes d’optimisation côté Hub. Résultat : l’exploration de très gros datasets devient beaucoup plus fluide qu’un téléchargement complet, même si la vitesse dépend toujours du réseau, du format et de la structure des fichiers.
Les datasets de référence à connaître
Quelques datasets reviennent partout, à la fois comme benchmarks et comme matière première d’entraînement. Les connaître, c’est comprendre le vocabulaire implicite des papers et des annonces de modèles.
| Dataset | Contenu | Usage principal |
|---|---|---|
| FineWeb / FineWeb-Edu | Web anglais filtré, plus de 18T tokens pour FineWeb, environ 1T pour FineWeb-Edu | Pré-entraînement de LLM, référence open source pour 2025-2026 |
| The Stack v2 | Code source de 600+ langages de programmation | Entraînement de modèles de code (StarCoder, Codestral) |
| MMLU / MMLU-Pro | 14 000 questions multi-domaines avec 4 choix | Benchmark d’évaluation de connaissances générales |
| HumanEval / MBPP | Problèmes de programmation Python avec tests | Benchmark de génération de code |
| SQuAD | Questions-réponses sur articles Wikipedia | Fine-tuning et évaluation de modèles Q&R |
| Common Voice | Enregistrements audio dans 100+ langues (projet Mozilla) | Entraînement de modèles de reconnaissance vocale |
| LAION-5B | 5,8 milliards de paires image-texte | Entraînement de modèles text-to-image |
| OpenAssistant / UltraChat | Dialogues humain-IA annotés | Fine-tuning conversationnel (instruction tuning) |
Pour le fine-tuning conversationnel en français spécifiquement, regardez du côté de Croissant-LLM, BLOOMZ, OpenAssistant-fr. La production francophone de datasets a progressé, mais reste nettement inférieure à l’anglais en volume.
Préparer son propre dataset pour du fine-tuning
À partir d’un certain niveau de personnalisation, les datasets publics ne suffisent plus. Vous voulez un modèle qui répond avec le ton de votre marque, qui connaît votre produit, qui structure ses réponses dans votre format métier. Il faut alors créer son propre dataset. La structure dépend du type de fine-tuning.
Format instruction simple
Pour un modèle qui exécute une tâche précise à partir d’une consigne. Structure JSONL (un JSON par ligne), avec trois champs :
# instruction_dataset.jsonl — une ligne par exemple
{"instruction": "Résume ce texte en une phrase.", "input": "La réunion s'est tenue hier matin...", "output": "Réunion de lancement du projet X hier matin."}
{"instruction": "Traduis en anglais.", "input": "Bonjour, comment allez-vous ?", "output": "Hello, how are you?"}
{"instruction": "Identifie la catégorie.", "input": "Facture électricité janvier", "output": "Énergie"}
Format conversationnel
Pour fine-tuner un assistant qui gère des dialogues multi-tours. C’est le format le plus répandu depuis 2024. Une liste de messages avec rôles system, user et assistant.
# chat_dataset.jsonl
{"messages": [
{"role": "system", "content": "Tu es un expert en droit du travail français."},
{"role": "user", "content": "Combien de jours de RTT minimum par an ?"},
{"role": "assistant", "content": "Il n'existe pas de minimum légal national. Les RTT dépendent de l'accord d'entreprise..."}
]}
{"messages": [
{"role": "user", "content": "Est-ce que mon employeur peut refuser mes congés ?"},
{"role": "assistant", "content": "Oui, dans la limite du délai légal de prévenance et avec un motif..."}
]}
Format préférence pour alignement
Pour du DPO (Direct Preference Optimization) ou du RLHF. Chaque exemple contient une entrée, une réponse préférée et une réponse rejetée. Permet d’apprendre au modèle quelle sortie correspond mieux à vos attentes.
# preference_dataset.jsonl
{"prompt": "Explique la photosynthèse à un enfant de 8 ans.",
"chosen": "Les plantes mangent la lumière du soleil. Elles prennent aussi de l'air et de l'eau. Elles fabriquent leur nourriture avec tout ça.",
"rejected": "La photosynthèse est un processus biochimique complexe impliquant la conversion de l'énergie lumineuse..."}
Pour du fine-tuning supervisé d’un LLM moderne, 500 à 2 000 exemples très soignés produisent souvent de meilleurs résultats que 50 000 exemples bruts. Consacrez votre temps à la qualité des réponses de référence, à la diversité des cas couverts, à la cohérence du style — pas à gonfler le volume.
Uploader votre dataset sur le Hub
Une fois vos données prêtes, deux méthodes pour les déposer sur le Hub.
Méthode 1 — push_to_hub depuis Python
La voie naturelle quand vous avez déjà manipulé vos données dans datasets ou pandas.
# Authentification une fois hf auth login # Script Python from datasets import Dataset import pandas as pd # Depuis un CSV local df = pd.read_csv("mon_dataset.csv") dataset = Dataset.from_pandas(df) # Depuis un JSONL from datasets import load_dataset dataset = load_dataset("json", data_files="chat_dataset.jsonl") # Upload privé (visible par vous seul) dataset.push_to_hub( "votre-username/mon-dataset-chat", private=True ) # Upload public dataset.push_to_hub("votre-username/mon-dataset-public")
La bibliothèque prépare les fichiers, crée le dépôt s’il n’existe pas, et peut rendre le dataset compatible avec le Dataset Viewer selon son format et sa structure. Votre dataset est utilisable depuis Python avec load_dataset() dans les minutes qui suivent.
Méthode 2 — upload manuel via l’interface web
Plus adapté aux fichiers volumineux déjà préparés en Parquet ou pour un simple drag-and-drop. Sur huggingface.co, icône profil → « New Dataset », choisissez un nom et la visibilité, puis onglet « Files and versions » → « Add file ». Formats acceptés nativement : CSV, JSON, JSONL, TXT, Parquet.
Pour les datasets multimodaux (images + métadonnées, audio + transcriptions), suivez les conventions de nommage : fichier metadata.csv ou metadata.jsonl à côté du dossier de médias, colonne file_name pour le lien. La structure est détectée automatiquement par le Dataset Viewer.
Les limites de taille à connaître
Le Hub applique des plafonds techniques qui conditionnent la structure de vos dépôts :
- 200 Go par fichier — Limite absolue imposée par LFS. Au-delà, shardez votre dataset.
- 50 Go par fichier recommandé — Au-delà, les performances de téléchargement et de traitement se dégradent.
- 10 000 fichiers par dossier — Au-delà, Git rame. Si vous avez 100 000 images, découpez en sous-dossiers
images/part-00/,part-01/, etc. - 100 000 fichiers par dépôt — Limite globale par dataset.
Le format Parquet règle une grande partie de ces problèmes. Convertissez vos CSV et JSONL en Parquet avec dataset.to_parquet() avant l’upload final. Compression meilleure, lecture plus rapide, et compatibilité native avec le Dataset Viewer et les bibliothèques de traitement (pandas, polars, Spark, DuckDB).
Créer une model card de dataset qui sert à quelque chose
Le fichier README.md à la racine de votre dépôt de dataset est sa carte d’identité. Sept éléments à renseigner systématiquement :
Ce que contient le dataset, pour quelle tâche il a été constitué, quelles questions il permet de répondre.
Nom de chaque colonne, type, contenu attendu. Un exemple concret en vaut dix définitions abstraites.
D’où viennent les données, comment elles ont été collectées, si elles ont été annotées, par qui.
Déclarée en YAML front-matter du README. Détermine si le dataset est utilisable en production commerciale.
Sur-représentation de certains groupes, couvertures linguistiques inégales, biais temporel. Ne masquez rien : transparence renforce l’adoption.
Taille train/validation/test, distributions des classes, longueurs moyennes. Le Dataset Viewer les affiche automatiquement si vos fichiers sont bien nommés.
Si votre dataset est issu d’une publication académique ou d’un projet nommé, donnez la référence bibliographique à utiliser.
Ce que vous saurez faire après cet article
Vous trouvez un dataset existant pour votre tâche en utilisant les filtres Task, Language, Size et License, puis vous le chargez en streaming pour l’explorer sans saturer votre disque. Ensuite, vous savez quel format (JSONL instruction, JSONL chat, JSONL préférence) correspond à quel type de fine-tuning. Vous préparez également vos propres données en Python, vous les uploadez sur le Hub en une commande, et vous documentez votre dataset de manière à ce qu’un autre développeur puisse le réutiliser sans vous poser de questions.
L’article suivant passe à la couche de démonstration : les Spaces. Comment construire en dix minutes une application web interactive qui expose votre modèle ou votre dataset, que ce soit pour un test interne, un portfolio ou un produit public.
Modèles, datasets, Spaces, Transformers, AutoTrain et déploiement : retrouvez la série complète pour passer de la découverte à un usage plus avancé de Hugging Face.