Come raccogliere dati di addestramento per il machine learning dal web

Il modello è la parte facile. Ottenere un set di addestramento pulito, deduplicato, legalmente valido e aggiornabile dal web aperto è dove i progetti effettivamente si bloccano. Ecco il pipeline di raccolta, dall'inizio alla fine.

Addestrare un modello è spesso la parte facile. Il passaggio che blocca i progetti di machine learning è a monte: assemblare un set di addestramento pulito, deduplicato, legalmente valido e aggiornabile dal web aperto. Ottenere pagine grezze è economico — un crawler lo fa — ma trasformarle in righe utilizzabili è il vero lavoro, ed è ciò che copre questa guida: sourcing, pulizia in testo strutturato, deduplicazione, campionamento, licenze e la pipeline di aggiornamento che impedisce a un modello di diventare obsoleto.

Inizia con il segnale, non con lo scraper

Prima di scrivere qualsiasi codice di raccolta, definisci esattamente cosa il modello deve apprendere e quali fonti portano quel segnale. I dati si presentano in tre forme e ognuna ha costi di raccolta diversi: strutturati (tabelle, feed di prodotti — facili da analizzare), semi-strutturati (JSON, CSV, XML endpoints — spesso la cosa più pulita che un sito espone), e non strutturati (testi di articoli, recensioni, thread di forum). Il contenuto non strutturato è l'80-90% di tutti i dati e si dice che solo circa lo 0,5% venga mai utilizzato, che è esattamente il divario che un dataset web ben costruito chiude. Decidi quale forma stai cercando prima di scalare qualsiasi cosa.

Esegui il crawling per ottenere testo pulito, non HTML grezzo

Alimentare HTML grezzo in una pipeline di addestramento significa alimentarla con navigazione, annunci, banner di cookie e tag di script — rumore che degrada il dataset. La mossa duratura è eseguire il crawling direttamente verso testo pulito e strutturato. Un Scraper API che restituisce markdown fa il lavoro di rimozione del boilerplate per te, quindi un crawling di migliaia di pagine si traduce in contenuti leggibili invece che in un miscuglio di tag:

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]

Il Markdown è un buon obiettivo perché mantiene la struttura (intestazioni, elenchi, tabelle) mentre elimina il livello di presentazione — lo stesso motivo per cui è l'input preferito per le pipeline RAG e l'addestramento LLM allo stesso modo. Instrada il crawling attraverso IP residenziali rotanti in modo che una grande esecuzione di raccolta non blocchi l'intero lavoro a metà.

Pipeline end-to-end dal web aperto a un set di addestramento per il machine learning: sourcing, crawling a markdown, deduplicazione e campionamento, licenza e aggiornamento
La metà di raccolta di una pipeline ML: la modellazione viene dopo questo, e dipende interamente dal farlo bene.

Deduplica prima che avveleni il modello

I documenti quasi duplicati sono il killer silenzioso dei dataset web — lo stesso articolo sindacato su dieci siti, footer boilerplate, contenuti ripubblicati. Addestra su di essi e sovrapponi qualunque cosa si ripeta. Hasha il contenuto normalizzato di ogni documento e elimina le collisioni; per i quasi duplicati, un approccio shingle o MinHash cattura quelli che un hash esatto manca:

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")

L'hash del contenuto che calcoli qui ha una doppia funzione — è anche come rilevi i cambiamenti nel prossimo crawling, quindi conservalo.

Campiona deliberatamente, licenzia onestamente

Più dati non significa automaticamente dati migliori. Un campione rappresentativo batte un mucchio sbilanciato — se il 90% del tuo crawling è un sito o una lingua, il modello impara quel bias. Campiona stratificato tra le tue fonti e classi in modo che il set rifletta la distribuzione che vuoi effettivamente modellare. Sulle licenze: i dati web non sono automaticamente liberi per l'addestramento. Filtra in base ai termini delle fonti, rispetta le direttive dei robots dove si applicano, e conserva la provenienza (l'URL della fonte e la data di recupero) accanto a ogni riga in modo da poter dimostrare da dove proviene ogni esempio. La nostra nota su legalità dello scraping nel 2026 copre le linee di dati personali e licenze (informativa, non consulenza legale).

Verità di base: la parte che il web non ti darà

Per l'apprendimento supervisionato hai bisogno di etichette, e il web aperto raramente le fornisce. Alcuni dataset sono intrinsecamente etichettati (una valutazione accanto a una recensione, la parola successiva in una frase), motivo per cui sono economici da raccogliere su larga scala. Tutto il resto necessita di un passaggio di verità di base: etichettatura da parte di esperti del dominio, o crowdsourcing attraverso un marketplace. Se fai crowdsourcing, proteggi la qualità seminando compiti con risposte conosciute e rifiutando i lavoratori che non li superano — è una modalità di fallimento ben studiata. Dove possibile, preferisci dati web naturalmente etichettati; è la differenza tra un dataset che puoi costruire in una settimana e uno che necessita di un budget per l'etichettatura.

Aggiorna, perché i dati diventano obsoleti

La raccolta non è mai una volta per tutte. I prezzi cambiano, le pagine vengono riscritte, nuovi contenuti appaiono — un modello addestrato su un'istantanea congelata si allontana dal mondo che dovrebbe prevedere. Costruisci l'aggiornamento fin dal primo giorno: esegui il re-crawling su un programma, confronta l'hash del contenuto di ogni pagina con l'ultima esecuzione, e rielabora solo ciò che è effettivamente cambiato. Ciò mantiene il costo di aggiornamento proporzionale al cambiamento reale piuttosto che riscaricare tutto:

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()}

Per domini in rapido movimento, o quando preferisci consumare un feed gestito piuttosto che eseguire il crawling da solo, dati web costruiti per LLM ti forniscono contenuti puliti e aggiornati senza mantenere la pipeline.

Statistiche sulla raccolta dati: l'80-90% dei dati è non strutturato, solo lo 0,5% viene utilizzato, e una divisione 70/30 per l'addestramento-test
Il corpus è quasi infinito; il valore che una buona pipeline aggiunge è nel pulirlo, deduplicarlo e aggiornarlo.

Esegui il crawling del web per ottenere markdown pulito su larga scala

Domande frequenti

Dove ottieni i dati di addestramento per il machine learning?

Tre fonti principali: dataset pubblici esistenti (Kaggle, Google Dataset Search, corpora accademici), dati interni di prima parte, e il web aperto tramite crawling. Il web è la fonte più grande e fresca ma richiede più lavoro — pulizia, deduplicazione, campionamento e licenze. Per molti modelli moderni, un crawling di siti rilevanti per ottenere markdown pulito è il modo più veloce per un dataset specifico di dominio che non esiste già.

Quanti dati di addestramento mi servono?

Dipende dal compito e dal modello, e la risposta onesta è: inizia in piccolo e scala fino a quando le prestazioni si stabilizzano. Addestra su un campione rappresentativo, misura l'accuratezza su un set di test trattenuto (una divisione 70/30 è un punto di partenza comune), quindi aggiungi più dati e osserva se il metric continua a migliorare. La qualità e la rappresentatività di solito contano più del volume grezzo.

È legale fare scraping di dati web per l'addestramento ML?

Raccogliere dati pubblici è ampiamente difendibile, ma l'uso per l'addestramento solleva questioni di licenza e, dove sono coinvolti dati personali, di privacy. Filtra in base ai termini delle fonti, evita dati personali di cui non hai bisogno, conserva la provenienza per ogni esempio, e rispetta le direttive dei robots dove si applicano. Queste sono informazioni generali, non consulenza legale — consulta un legale per un dataset commerciale su larga scala.

Come mantengo fresco un dataset di addestramento?

Programma re-crawling e usa un hash del contenuto per rilevare i cambiamenti, rielaborando solo le pagine che sono effettivamente cambiate. Versiona il tuo dataset in modo da poter riprodurre quale istantanea ha addestrato quale modello, e conserva le date di recupero su ogni riga. Un aggiornamento incrementale, rilevato dal cambiamento, mantiene il costo proporzionale al cambiamento reale invece di riscaricare l'intero corpus ad ogni ciclo.

Il modello ottiene i titoli, ma il dataset decide il risultato. Sorgente il segnale giusto, esegui il crawling per ottenere markdown pulito, deduplica duramente, campiona onestamente, conserva la provenienza, e costruisci l'aggiornamento fin dall'inizio. Se ottieni correttamente la pipeline di raccolta, tutto ciò che segue diventa più facile. Se stai andando verso il fine-tuning specificamente, la nostra guida su costruire un dataset di fine-tuning dal web riprende da dove questa si interrompe.

Ottieni dati web aggiornati per i tuoi modelli