Hoe Trainingsdata voor Machine Learning van het Web te Verzamelen
Het model is het makkelijke deel. Het verkrijgen van een schone, gededupliceerde, juridisch verantwoorde en vernieuwbare trainingsset van het open web is waar projecten daadwerkelijk vastlopen. Hier is de verzamelpijplijn, van begin tot eind.
Een model trainen is vaak het makkelijke deel. De stap die machine-learningprojecten doet vastlopen, ligt stroomopwaarts: het samenstellen van een schone, gededupliceerde, juridisch verantwoorde en vernieuwbare trainingsset van het open web. Het verkrijgen van ruwe pagina's is goedkoop — een crawler doet dat — maar ze omzetten in bruikbare rijen is het echte werk, en dat is wat deze gids behandelt: bronvermelding, schoonmaken tot gestructureerde tekst, deduplicatie, sampling, licentieverlening, en de vernieuwingspijplijn die voorkomt dat een model veroudert.
Begin met het signaal, niet de scraper
Voordat je enige verzamelcode schrijft, definieer precies wat het model moet leren en welke bronnen dat signaal dragen. Data komt in drie vormen en elk heeft verschillende verzamelkosten: gestructureerd (tabellen, productfeeds — makkelijk te parseren), semi-gestructureerd (JSON, CSV, XML-eindpunten — vaak het schoonste dat een site blootlegt), en ongestructureerd (artikeltekst, recensies, forumthreads). Ongestructureerde inhoud is 80-90% van alle data en naar verluidt wordt slechts ongeveer 0,5% ervan ooit gebruikt, wat precies de kloof is die een goed gebouwde webdataset sluit. Bepaal welke vorm je zoekt voordat je iets opschaalt.
Crawl naar schone tekst, niet ruwe HTML
Ruwe HTML in een trainingspijplijn voeren betekent dat je navigatie, advertenties, cookiebanners en script-tags voert — ruis die de dataset degradeert. De duurzame zet is om direct naar schone, gestructureerde tekst te crawlen. Een Scraper API die markdown retourneert, doet het boilerplate strippen voor je, zodat een crawl van duizenden pagina's als leesbare inhoud landt in plaats van tagsoep:
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]
Markdown is een goed doel omdat het structuur behoudt (koppen, lijsten, tabellen) terwijl het de presentatielaag laat vallen — dezelfde reden waarom het de voorkeursinvoer is voor RAG-pijplijnen en LLM-training. Routeer de crawl via roterende residentiële IP's zodat een grote verzamelrun niet halverwege de hele klus blokkeert.

Dedupliceer voordat het het model vergiftigt
Bijna-duplicaat documenten zijn de stille moordenaar van webdatasets — hetzelfde artikel gesyndiceerd over tien sites, boilerplate voetnoten, herplaatste inhoud. Train erop en je overgewicht wat herhaalt. Hash de genormaliseerde inhoud van elk document en laat botsingen vallen; voor bijna-duplicaten vangt een shingle- of MinHash-aanpak degenen die een exacte hash mist:
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")
De inhoudshash die je hier berekent, heeft een dubbele functie — het is ook hoe je verandering detecteert bij de volgende crawl, dus houd het bij.
Sample bewust, licentieer eerlijk
Meer data is niet automatisch betere data. Een representatieve steekproef verslaat een scheve hoop — als 90% van je crawl van één site of één taal is, leert het model die vertekening. Sample gestratificeerd over je bronnen en klassen zodat de set de verdeling weerspiegelt die je daadwerkelijk wilt modelleren. Over licentiëring: webdata is niet automatisch vrij om op te trainen. Filter op bronvoorwaarden, eer robotsrichtlijnen waar ze van toepassing zijn, en houd herkomst (de bron-URL en ophaaldatum) bij elke rij zodat je kunt bewijzen waar elk voorbeeld vandaan kwam. Onze opmerking over scraping legaliteit in 2026 behandelt de lijnen van persoonlijke gegevens en licenties (informatief, geen juridisch advies).
Ground truth: het deel dat het web je niet geeft
Voor gesuperviseerd leren heb je labels nodig, en het open web geeft ze zelden zomaar. Sommige datasets zijn inherent gelabeld (een beoordeling naast een recensie, het volgende woord in een zin), daarom zijn die goedkoop te verzamelen op schaal. Alles wat anders is, heeft een ground-truth-stap nodig: labelen door domeinexperts, of crowdsourcing via een marktplaats. Als je crowdsourcet, bewaak de kwaliteit door bekende-antwoords taken te zaaien en werknemers die ze niet halen af te wijzen — dat is een goed bestudeerde faalmodus. Waar mogelijk, geef de voorkeur aan natuurlijk gelabelde webdata; het is het verschil tussen een dataset die je in een week kunt bouwen en een die een labelbudget nodig heeft.
Vernieuw, omdat data veroudert
Verzameling is nooit eenmalig. Prijzen veranderen, pagina's worden herschreven, nieuwe inhoud verschijnt — een model getraind op een bevroren momentopname drijft weg van de wereld die het moet voorspellen. Bouw de vernieuwing in vanaf dag één: her-crawl op schema, vergelijk de inhoudshash van elke pagina met de laatste run, en verwerk alleen wat daadwerkelijk is veranderd. Dat houdt de vernieuwingskosten evenredig met echte verandering in plaats van alles opnieuw te downloaden:
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()}
Voor snel bewegende domeinen, of wanneer je liever een beheerde feed consumeert dan zelf de crawl uit te voeren, geeft webdata gebouwd voor LLMs je schone, vernieuwde inhoud zonder de pijplijn te onderhouden.

Crawl het web naar schone markdown op schaal
Veelgestelde vragen
Waar haal je trainingsdata voor machine learning vandaan?
Drie hoofdbronnen: bestaande openbare datasets (Kaggle, Google Dataset Search, academische corpora), interne first-party data, en het open web via crawling. Het web is de grootste en meest actuele bron, maar vereist het meeste werk — schoonmaken, deduplicatie, sampling en licentiëring. Voor veel moderne modellen is een crawl van relevante sites naar schone markdown de snelste manier naar een domeinspecifieke dataset die nog niet bestaat.
Hoeveel trainingsdata heb ik nodig?
Het hangt af van de taak en het model, en het eerlijke antwoord is: begin klein en schaal op totdat de prestaties stabiliseren. Train op een representatieve steekproef, meet de nauwkeurigheid op een apart gehouden testset (een 70/30 split is een gebruikelijk startpunt), voeg dan meer data toe en kijk of de metriek blijft verbeteren. Kwaliteit en representativiteit zijn meestal belangrijker dan het ruwe volume.
Is het legaal om webdata te scrapen voor ML-training?
Het verzamelen van openbare data is over het algemeen verdedigbaar, maar het gebruik voor training roept licentie- en, waar persoonlijke gegevens betrokken zijn, privacyvragen op. Filter op bronvoorwaarden, vermijd persoonlijke gegevens die je niet nodig hebt, houd herkomst bij voor elk voorbeeld, en respecteer robotsrichtlijnen waar ze van toepassing zijn. Dit is algemene informatie, geen juridisch advies — raadpleeg een jurist voor een commerciële dataset op schaal.
Hoe houd ik een trainingsdataset actueel?
Plan her-crawls en gebruik een inhoudshash om verandering te detecteren, verwerk alleen pagina's die daadwerkelijk zijn gewijzigd. Versieer je dataset zodat je kunt reproduceren welke momentopname welk model heeft getraind, en houd ophaaldatums bij elke rij. Incrementele, op verandering gedetecteerde vernieuwing houdt de kosten evenredig met echte verandering in plaats van elke cyclus de hele corpus opnieuw te downloaden.
Het model krijgt de krantenkoppen, maar de dataset bepaalt de uitkomst. Vind het juiste signaal, crawl naar schone markdown, dedupliceer hard, sample eerlijk, houd herkomst bij, en bouw vernieuwing in vanaf het begin. Krijg de verzamelpijplijn goed en alles stroomafwaarts wordt makkelijker. Als je specifiek op weg bent naar fine-tuning, pakt onze gids over het bouwen van een fine-tuning dataset van het web op waar dit ophoudt.