Comment collecter des données d'entraînement pour l'apprentissage automatique à partir du web
Le modèle est la partie facile. Trouver un ensemble d'entraînement propre, dédupliqué, juridiquement sain et actualisable à partir du web ouvert est là où les projets se bloquent réellement. Voici le pipeline de collecte, de bout en bout.
Former un modèle est souvent la partie facile. L'étape qui bloque les projets d'apprentissage automatique est en amont : assembler un ensemble d'entraînement propre, dédupliqué, juridiquement sain et actualisable à partir du web ouvert. Obtenir des pages brutes est bon marché — un crawler s'en charge — mais les transformer en lignes utilisables est le vrai travail, et c'est ce que couvre ce guide : sourcing, nettoyage en texte structuré, déduplication, échantillonnage, licence, et le pipeline de rafraîchissement qui empêche un modèle de devenir obsolète.
Commencez par le signal, pas par le scraper
Avant d'écrire du code de collecte, définissez exactement ce que le modèle doit apprendre et quelles sources portent ce signal. Les données se présentent sous trois formes et chacune a des coûts de collecte différents : structurée (tableaux, flux de produits — facile à analyser), semi-structurée (JSON, CSV, XML endpoints — souvent la chose la plus propre qu'un site expose), et non structurée (texte d'article, avis, fils de discussion de forum). Le contenu non structuré représente 80-90% de toutes les données et on estime qu'environ seulement 0,5% est utilisé, ce qui est exactement l'écart qu'un ensemble de données web bien construit comble. Décidez quelle forme vous recherchez avant d'évoluer quoi que ce soit.
Crawler pour obtenir du texte propre, pas du HTML brut
Alimenter du HTML brut dans un pipeline d'entraînement signifie y inclure la navigation, les publicités, les bannières de cookies et les balises de script — du bruit qui dégrade l'ensemble de données. La démarche durable est de crawler directement pour obtenir du texte structuré et propre. Une Scraper API qui renvoie du markdown fait le nettoyage de base pour vous, de sorte qu'un crawl de milliers de pages aboutisse à un contenu lisible au lieu d'une soupe de balises :
import requests
def fetch_clean(url):
r = requests.get(
"https://api.quantumproxies.io/scrape",
params={"url": url, "format": "markdown"},
headers={"Authorization": "Bearer YOUR_API_KEY"},
timeout=60,
)
return r.json()["content"] # boilerplate-stripped markdown
corpus = [fetch_clean(u) for u in seed_urls]
Le markdown est une bonne cible car il conserve la structure (titres, listes, tableaux) tout en supprimant la couche de présentation — pour la même raison, c'est l'entrée préférée pour les pipelines RAG et l'entraînement LLM. Faites passer le crawl par des IP résidentielles tournantes pour qu'une grande collecte ne bloque pas tout le travail à mi-chemin.

Dédupliquez avant que cela n'empoisonne le modèle
Les documents quasi-duplicata sont le tueur silencieux des ensembles de données web — le même article syndiqué sur dix sites, les pieds de page standardisés, le contenu reposté. Entraînez-vous dessus et vous surpondérez ce qui se répète. Hachez le contenu normalisé de chaque document et éliminez les collisions ; pour les quasi-duplicata, une approche par shingle ou MinHash attrape ceux qu'un hachage exact manque :
import hashlib
def content_hash(text):
norm = " ".join(text.lower().split()) # normalise whitespace/case
return hashlib.sha256(norm.encode()).hexdigest()
seen, unique = set(), []
for doc in corpus:
h = content_hash(doc)
if h not in seen:
seen.add(h)
unique.append(doc)
print(f"kept {len(unique)} of {len(corpus)} after dedup")
Le hachage de contenu que vous calculez ici a une double fonction — c'est aussi ainsi que vous détectez les changements lors du prochain crawl, alors conservez-le.
Échantillonnez délibérément, licenciez honnêtement
Plus de données ne signifie pas automatiquement de meilleures données. Un échantillon représentatif vaut mieux qu'un tas déséquilibré — si 90% de votre crawl provient d'un site ou d'une langue, le modèle apprend ce biais. Échantillonnez de manière stratifiée à travers vos sources et classes pour que l'ensemble reflète la distribution que vous souhaitez réellement modéliser. Concernant la licence : les données web ne sont pas automatiquement libres pour l'entraînement. Filtrez par les conditions des sources, respectez les directives des robots là où elles s'appliquent, et conservez la provenance (l'URL source et la date de récupération) à côté de chaque ligne pour pouvoir prouver d'où vient chaque exemple. Notre note sur la légalité du scraping en 2026 couvre les lignes de données personnelles et de licence (informative, pas un conseil juridique).
Vérité terrain : la partie que le web ne vous donnera pas
Pour l'apprentissage supervisé, vous avez besoin d'étiquettes, et le web ouvert ne les fournit que rarement. Certains ensembles de données sont intrinsèquement étiquetés (une note à côté d'un avis, le mot suivant dans une phrase), c'est pourquoi ils sont bon marché à collecter à grande échelle. Tout le reste nécessite une étape de vérité terrain : étiquetage par des experts du domaine, ou crowdsourcing via un marché. Si vous externalisez, assurez la qualité en intégrant des tâches à réponse connue et en rejetant les travailleurs qui échouent — c'est un mode d'échec bien étudié. Dans la mesure du possible, préférez les données web naturellement étiquetées ; c'est la différence entre un ensemble de données que vous pouvez construire en une semaine et un autre qui nécessite un budget d'étiquetage.
Rafraîchissez, car les données deviennent obsolètes
La collecte n'est jamais une tâche unique. Les prix changent, les pages sont réécrites, de nouveaux contenus apparaissent — un modèle entraîné sur un instantané figé s'éloigne du monde qu'il est censé prédire. Intégrez le rafraîchissement dès le premier jour : recrawler selon un calendrier, comparer le hachage de contenu de chaque page à la dernière exécution, et ne retraiter que ce qui a réellement changé. Cela maintient le coût de rafraîchissement proportionnel au changement réel plutôt que de tout retélécharger :
def refresh(url, last_hash):
text = fetch_clean(url)
h = content_hash(text)
if h == last_hash:
return None # unchanged, skip re-processing
return {"url": url, "text": text, "hash": h, "fetched": now()}
Pour les domaines en évolution rapide, ou lorsque vous préférez consommer un flux géré plutôt que de gérer le crawl vous-même, les données web conçues pour les LLMs vous offrent un contenu propre et rafraîchi sans maintenir le pipeline.

Crawler le web pour obtenir du markdown propre à grande échelle
Questions fréquemment posées
Où obtenez-vous des données d'entraînement pour l'apprentissage automatique ?
Trois sources principales : ensembles de données publics existants (Kaggle, Google Dataset Search, corpus académiques), données internes de première partie, et le web ouvert via le crawling. Le web est la source la plus grande et la plus fraîche mais nécessite le plus de travail — nettoyage, déduplication, échantillonnage et licence. Pour de nombreux modèles modernes, un crawl de sites pertinents pour obtenir du markdown propre est le moyen le plus rapide d'obtenir un ensemble de données spécifique à un domaine qui n'existe pas déjà.
Combien de données d'entraînement me faut-il ?
Cela dépend de la tâche et du modèle, et la réponse honnête est : commencez petit et évoluez jusqu'à ce que la performance plafonne. Entraînez-vous sur un échantillon représentatif, mesurez la précision sur un ensemble de test retenu (une répartition 70/30 est un point de départ courant), puis ajoutez plus de données et observez si la métrique continue de s'améliorer. La qualité et la représentativité comptent généralement plus que le volume brut.
Est-il légal de scraper des données web pour l'entraînement ML ?
La collecte de données publiques est globalement défendable, mais l'utilisation pour l'entraînement soulève des questions de licence et, lorsque des données personnelles sont impliquées, de confidentialité. Filtrez par les conditions des sources, évitez les données personnelles dont vous n'avez pas besoin, conservez la provenance pour chaque exemple, et respectez les directives des robots là où elles s'appliquent. Ceci est une information générale, pas un conseil juridique — consultez un avocat pour un ensemble de données commercial à grande échelle.
Comment garder un ensemble de données d'entraînement frais ?
Planifiez des recrawls et utilisez un hachage de contenu pour détecter les changements, ne retraitant que les pages qui ont réellement bougé. Versionnez votre ensemble de données pour pouvoir reproduire quel instantané a entraîné quel modèle, et conservez les dates de récupération sur chaque ligne. Un rafraîchissement incrémental, détecté par changement, maintient le coût proportionnel au changement réel au lieu de retélécharger l'ensemble du corpus à chaque cycle.
Le modèle fait les gros titres, mais l'ensemble de données décide du résultat. Sourcez le bon signal, crawl pour obtenir du markdown propre, dédupliquez rigoureusement, échantillonnez honnêtement, conservez la provenance, et intégrez le rafraîchissement dès le départ. Si vous vous dirigez vers un ajustement fin spécifiquement, notre guide sur la construction d'un ensemble de données d'ajustement fin à partir du web reprend là où celui-ci s'arrête.