Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Gegevensverzameling en Preprocessen | Het Bouwen en Trainen van Generatieve Modellen
Generatieve AI

bookGegevensverzameling en Preprocessen

Het trainen van generatieve modellen vereist niet alleen een goede architectuur en verliesfuncties, maar ook schone, goed gestructureerde en diverse data. Deze sectie introduceert hoogwaardige datasets voor visuele, tekstuele en audio-modaliteiten, biedt gedetailleerde preprocessingsmethoden die geschikt zijn voor moderne generatieve pipelines, en bespreekt robuuste strategieën voor het splitsen van data met praktische hulpmiddelen.

Gegevensverzameling

Het verzamelen van data voor generatief modelleren is afhankelijk van het domein, de beschikbaarheid van bronnen, schaal en licenties. Voor tekst- en visuele data zijn veelvoorkomende bronnen open datasets, gescrapete content en gestructureerde repositories (zoals academische archieven, sociale media of e-commerceplatforms).

Webscraping-technieken

Wanneer datasets niet direct beschikbaar zijn, kan data van het web worden verzameld met scraping-tools. Webscraping maakt het mogelijk om programmatisch informatie uit HTML-pagina's te extraheren. Dit is een krachtige methode voor het verzamelen van echte, ongestructureerde data wanneer API's niet beschikbaar zijn. Scraping brengt echter technische en ethische verantwoordelijkheden met zich mee.

Scraping-methoden omvatten doorgaans:

  • HTTP-verzoeken versturen om webpagina's op te halen. Hiermee wordt toegang verkregen tot de ruwe HTML-inhoud van een pagina;
  • HTML-inhoud parseren om gestructureerde data te extraheren. Tools zoals BeautifulSoup zetten ongestructureerde HTML om in toegankelijke tags en elementen;
  • Navigeren door dynamische pagina's met browserautomatisering. Voor websites die zwaar op JavaScript leunen, zijn tools zoals Selenium nodig om de inhoud volledig weer te geven;
  • Opgeslagen data bewaren in bruikbare formaten zoals CSV of JSON. Dit zorgt voor compatibiliteit met latere preprocessing- en modeltrainingsstappen.

Hieronder staan twee veelvoorkomende scraping-strategieën:

Tekst scrapen met BeautifulSoup

BeautifulSoup is een Python-bibliotheek die wordt gebruikt om statische HTML-pagina's te parseren.

1234567891011
import requests from bs4 import BeautifulSoup url = "https://docs.python.org/3/" response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") # Extract paragraphs paragraphs = [p.text for p in soup.find_all('p')] text = "\n".join(paragraphs) print(text)
copy

Afbeeldingen scrapen met Selenium

Selenium automatiseert een browser om inhoud te scrapen van pagina's die met JavaScript zijn gerenderd.

123456789101112131415161718
# INSTALL SELENIUM # THIS CODE DOWNLOAD IMAGES (I NEED JUST VIZUALIZATION) from selenium import webdriver import time import urllib.request url = "https://example.com/gallery" driver = webdriver.Chrome() driver.get(url) time.sleep(2) images = driver.find_elements("tag name", "img") for idx, img in enumerate(images): src = img.get_attribute('src') if src: urllib.request.urlretrieve(src, f"image_{idx}.jpg") driver.quit()
copy
Note
Opmerking

Controleer altijd de gebruiksvoorwaarden van een website voordat u gaat scrapen. Gebruik beleefde aanvraagintervallen en respecteer robots.txt. Onjuist scrapen kan leiden tot IP-blokkades of juridische gevolgen.

In GenAI-contexten is webscraping vaak een voorloper bij het samenstellen van pretrainingsdatasets, met name voor domeinspecifieke of laag-beschikbare talen. Tools zoals Scrapy, playwright of browserloze API's worden ook veelvuldig ingezet voor grootschalige taken.

Preprocessingtechnieken

Datapreprocessing moet worden afgestemd op de modaliteit, het modeltype en de kwaliteitsvereisten. Voor generatieve modellen op productieniveau bevatten pipelines vaak domeinspecifieke transformaties, resolutieaanpassingen en contentgebaseerde filtering.

Afbeelding Voorverwerking

  • Resizen: datasetresolutie afstemmen op modelinput (bijv. 64x64 voor vroege GANs, 512x512 voor diffusie­modellen);
  • Normalisatie: schaalt pixelwaarden naar een standaardbereik, doorgaans [−1, 1] of [0, 1];
  • Kleurruimteverwerking: kleurconsistentie waarborgen — converteren naar RGB of grijswaarden. Voor conditionele generatie alfakanalen behouden indien aanwezig;
  • Data-augmentatie: introduceert variatie tijdens training via transformaties.

Tekstvoorverwerking

  • Opschonen: verwijdert speciale tekens, overtollige spaties en ruis;
12345
import re text = "Example text — with symbols!" cleaned = re.sub(r"[^\w\s]", "", text) cleaned = re.sub(r"\s+", " ", cleaned).strip() print(cleaned)
copy
  1. r"[^\w\s]":

    • \w: komt overeen met elk alfanumeriek teken (letters A-Z, a-z, cijfers 0-9) en underscore _;
    • \s: komt overeen met elk witruimtekarakter (spaties, tabs, nieuwe regels);
    • [^...]: een negatieve tekenklasse—komt overeen met alles wat niet binnen de haakjes staat;
    • Betekenis: dit patroon komt overeen met alle tekens behalve letters, cijfers, underscores en witruimte. Het verwijdert dus interpunctie en symbolen (zoals , !, enz.).
  2. r"\s+":

    • \s: komt overeen met elk witruimtekarakter;
    • +: komt overeen met één of meer van het voorgaande teken;
    • Betekenis: dit vervangt meerdere opeenvolgende witruimtes door één enkele spatie.
  3. .strip(): verwijdert voor- en achterwaartse witruimte uit de uiteindelijke opgeschoonde string.

Voor meer informatie over RegEx-syntaxis, zie de documentatie.

  • Omzetten naar kleine letters: standaardiseert tekst naar kleine letters voor consistentie. Selectief toepassen, omdat modellen zoals BERT hoofdlettergevoelig of niet-hoofdlettergevoelig kunnen zijn;
12
text = "This Is A Sentence." print(text.lower())
copy
  • Tokenisatie: splitst tekst in tokens of subwoorden voor modellering;
1234
from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("gpt2") encodings = tokenizer(["Example text."], padding="max_length", truncation=True, max_length=128, return_tensors="pt")
copy
  • Stemming/Lemmatizatie: zelden gebruikt in deep learning pipelines maar toegepast in traditionele NLP of pretrainingsfilters;
1234
from nltk.stem import PorterStemmer stemmer = PorterStemmer() print(stemmer.stem("running"))
copy
  • Padding/Truncatie: zie het bovenstaande voorbeeld met max_length.
1234
from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("gpt2") inputs = tokenizer("Short text.", max_length=10, padding="max_length", truncation=True, return_tensors="pt")
copy
Note
Opmerking

Bouw modulaire preprocessingspipelines met reproduceerbaarheid als uitgangspunt. Gebruik DVC, wandb artifacts of huggingface/datasets met streaming + caching.

Strategieën voor datasplitsing

Effectieve datasplitsing is essentieel voor generalisatie, vooral bij generatieve modellering waar overfitting op modes of memorisatie vaak voorkomt.

Train/Validatie/Test splitsing

  • Conventionele verhoudingen: 80/10/10 of 70/15/15 afhankelijk van de datasetgrootte;
  • Inhoudsbewuste splitsing: splitsen op basis van klasse (visie), onderwerp (tekst).
  • Toepassingsvoorbeeld:
    • Training: stuurt modeloptimalisatie aan;
    • Validatie: begeleidt checkpointing, vroegtijdig stoppen en metriekafstemming (bijv. FID);
    • Test: volledig achtergehouden tot de uiteindelijke modelbenchmarking.

Voorbeeld met gebruik van train_test_split:

Voor Hugging Face Datasets:

Kruisvalidering en Bootstrapping

  • Voor domeinen met weinig middelen of zero-shot, gebruik K-fold CV (bijv. K=5 of 10);
  • In diffusie modellen, gebruik bootstrapped FID/LPIPS om de stabiliteit van generatie te evalueren;
  • Visuele of perceptuele inspectie dient numerieke validatie te begeleiden.

Voorbeeld K-fold opzet:

Veelgebruikte datasets

De keuze van de juiste dataset hangt af van modaliteit, dataschaal, licentievoorwaarden en het specifieke generatieve doel (bijvoorbeeld onvoorwaardelijke generatie, conditionele synthese of stijltransfer).

Computer Vision-datasets

  • CIFAR-10: 60.000 laag-resolutie 32×32 RGB-afbeeldingen in 10 klassen. Lichtgewicht, ideaal voor snelle prototyping, unittests en benchmarking van trainingsloops voor image GANs;
  • CelebA: meer dan 200.000 uitgelijnde gezichten van beroemdheden, geannoteerd met 40 binaire attributen. Veelgebruikt voor attributengebaseerde generatie, identiteit-behoudende gezichtsaanpassing en encoder-decoder modellen;
  • LSUN: grootschalige scenedataset met miljoenen afbeeldingen in categorieën zoals slaapkamers, kerken en eetkamers. Essentieel voor hoge-resolutie synthese en progressieve GAN-training;
  • ImageNet: meer dan 14 miljoen hoogwaardige afbeeldingen gelabeld over 20.000 klassen. Voornamelijk gebruikt voor transfer learning, pretraining van diffusie modellen en als basisdataset voor stijlgestuurde generatie.

Tekstdatasets

  • WikiText: schone Wikipedia-artikelen (WikiText-2: 2M tokens, WikiText-103: 100M+). Waardevol voor het evalueren van taalmodellering en het fijn afstemmen van decoder-only modellen zoals GPT;
  • BookCorpus: meer dan 11.000 gratis romans. Essentieel voor narratieve generatie, long-context transformers en pretraining van fundamentele modellen (zoals BERT, GPT-2);
  • Common Crawl / C4: petabyte-schaal meertalige webdata. C4 is een gededupliceerde, gefilterde variant, samengesteld voor hoogwaardige taalmodeltraining (zoals T5);
  • The Pile: 825GB aan diverse data (boeken, ArXiv, StackExchange, GitHub, enz.). Ontworpen om GPT-achtige modellen te trainen die concurreren met OpenAI’s LLMs.

Samenvatting

  • Selecteer datasets op basis van kwaliteit, licentie, schaal en afstemming op generatieve doelstellingen;
  • Pas preprocessingspipelines toe die zijn afgestemd op elke modaliteit met behulp van robuuste, productieklare tools;
  • Zorg voor strikte splitsingsstrategieën ter ondersteuning van reproduceerbaarheid, voorkom datalekken en maak eerlijke evaluatie mogelijk.

1. Waarom is datakwaliteit belangrijker dan kwantiteit bij het trainen van generatieve AI-modellen?

2. Wat is een veelvoorkomende uitdaging bij het verzamelen van diverse data voor het trainen van generatieve modellen?

3. Wat is het primaire doel van data-augmentatie in de context van generatieve AI-training?

question mark

Waarom is datakwaliteit belangrijker dan kwantiteit bij het trainen van generatieve AI-modellen?

Select the correct answer

question mark

Wat is een veelvoorkomende uitdaging bij het verzamelen van diverse data voor het trainen van generatieve modellen?

Select the correct answer

question mark

Wat is het primaire doel van data-augmentatie in de context van generatieve AI-training?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 1

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Awesome!

Completion rate improved to 4.76

bookGegevensverzameling en Preprocessen

Veeg om het menu te tonen

Het trainen van generatieve modellen vereist niet alleen een goede architectuur en verliesfuncties, maar ook schone, goed gestructureerde en diverse data. Deze sectie introduceert hoogwaardige datasets voor visuele, tekstuele en audio-modaliteiten, biedt gedetailleerde preprocessingsmethoden die geschikt zijn voor moderne generatieve pipelines, en bespreekt robuuste strategieën voor het splitsen van data met praktische hulpmiddelen.

Gegevensverzameling

Het verzamelen van data voor generatief modelleren is afhankelijk van het domein, de beschikbaarheid van bronnen, schaal en licenties. Voor tekst- en visuele data zijn veelvoorkomende bronnen open datasets, gescrapete content en gestructureerde repositories (zoals academische archieven, sociale media of e-commerceplatforms).

Webscraping-technieken

Wanneer datasets niet direct beschikbaar zijn, kan data van het web worden verzameld met scraping-tools. Webscraping maakt het mogelijk om programmatisch informatie uit HTML-pagina's te extraheren. Dit is een krachtige methode voor het verzamelen van echte, ongestructureerde data wanneer API's niet beschikbaar zijn. Scraping brengt echter technische en ethische verantwoordelijkheden met zich mee.

Scraping-methoden omvatten doorgaans:

  • HTTP-verzoeken versturen om webpagina's op te halen. Hiermee wordt toegang verkregen tot de ruwe HTML-inhoud van een pagina;
  • HTML-inhoud parseren om gestructureerde data te extraheren. Tools zoals BeautifulSoup zetten ongestructureerde HTML om in toegankelijke tags en elementen;
  • Navigeren door dynamische pagina's met browserautomatisering. Voor websites die zwaar op JavaScript leunen, zijn tools zoals Selenium nodig om de inhoud volledig weer te geven;
  • Opgeslagen data bewaren in bruikbare formaten zoals CSV of JSON. Dit zorgt voor compatibiliteit met latere preprocessing- en modeltrainingsstappen.

Hieronder staan twee veelvoorkomende scraping-strategieën:

Tekst scrapen met BeautifulSoup

BeautifulSoup is een Python-bibliotheek die wordt gebruikt om statische HTML-pagina's te parseren.

1234567891011
import requests from bs4 import BeautifulSoup url = "https://docs.python.org/3/" response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") # Extract paragraphs paragraphs = [p.text for p in soup.find_all('p')] text = "\n".join(paragraphs) print(text)
copy

Afbeeldingen scrapen met Selenium

Selenium automatiseert een browser om inhoud te scrapen van pagina's die met JavaScript zijn gerenderd.

123456789101112131415161718
# INSTALL SELENIUM # THIS CODE DOWNLOAD IMAGES (I NEED JUST VIZUALIZATION) from selenium import webdriver import time import urllib.request url = "https://example.com/gallery" driver = webdriver.Chrome() driver.get(url) time.sleep(2) images = driver.find_elements("tag name", "img") for idx, img in enumerate(images): src = img.get_attribute('src') if src: urllib.request.urlretrieve(src, f"image_{idx}.jpg") driver.quit()
copy
Note
Opmerking

Controleer altijd de gebruiksvoorwaarden van een website voordat u gaat scrapen. Gebruik beleefde aanvraagintervallen en respecteer robots.txt. Onjuist scrapen kan leiden tot IP-blokkades of juridische gevolgen.

In GenAI-contexten is webscraping vaak een voorloper bij het samenstellen van pretrainingsdatasets, met name voor domeinspecifieke of laag-beschikbare talen. Tools zoals Scrapy, playwright of browserloze API's worden ook veelvuldig ingezet voor grootschalige taken.

Preprocessingtechnieken

Datapreprocessing moet worden afgestemd op de modaliteit, het modeltype en de kwaliteitsvereisten. Voor generatieve modellen op productieniveau bevatten pipelines vaak domeinspecifieke transformaties, resolutieaanpassingen en contentgebaseerde filtering.

Afbeelding Voorverwerking

  • Resizen: datasetresolutie afstemmen op modelinput (bijv. 64x64 voor vroege GANs, 512x512 voor diffusie­modellen);
  • Normalisatie: schaalt pixelwaarden naar een standaardbereik, doorgaans [−1, 1] of [0, 1];
  • Kleurruimteverwerking: kleurconsistentie waarborgen — converteren naar RGB of grijswaarden. Voor conditionele generatie alfakanalen behouden indien aanwezig;
  • Data-augmentatie: introduceert variatie tijdens training via transformaties.

Tekstvoorverwerking

  • Opschonen: verwijdert speciale tekens, overtollige spaties en ruis;
12345
import re text = "Example text — with symbols!" cleaned = re.sub(r"[^\w\s]", "", text) cleaned = re.sub(r"\s+", " ", cleaned).strip() print(cleaned)
copy
  1. r"[^\w\s]":

    • \w: komt overeen met elk alfanumeriek teken (letters A-Z, a-z, cijfers 0-9) en underscore _;
    • \s: komt overeen met elk witruimtekarakter (spaties, tabs, nieuwe regels);
    • [^...]: een negatieve tekenklasse—komt overeen met alles wat niet binnen de haakjes staat;
    • Betekenis: dit patroon komt overeen met alle tekens behalve letters, cijfers, underscores en witruimte. Het verwijdert dus interpunctie en symbolen (zoals , !, enz.).
  2. r"\s+":

    • \s: komt overeen met elk witruimtekarakter;
    • +: komt overeen met één of meer van het voorgaande teken;
    • Betekenis: dit vervangt meerdere opeenvolgende witruimtes door één enkele spatie.
  3. .strip(): verwijdert voor- en achterwaartse witruimte uit de uiteindelijke opgeschoonde string.

Voor meer informatie over RegEx-syntaxis, zie de documentatie.

  • Omzetten naar kleine letters: standaardiseert tekst naar kleine letters voor consistentie. Selectief toepassen, omdat modellen zoals BERT hoofdlettergevoelig of niet-hoofdlettergevoelig kunnen zijn;
12
text = "This Is A Sentence." print(text.lower())
copy
  • Tokenisatie: splitst tekst in tokens of subwoorden voor modellering;
1234
from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("gpt2") encodings = tokenizer(["Example text."], padding="max_length", truncation=True, max_length=128, return_tensors="pt")
copy
  • Stemming/Lemmatizatie: zelden gebruikt in deep learning pipelines maar toegepast in traditionele NLP of pretrainingsfilters;
1234
from nltk.stem import PorterStemmer stemmer = PorterStemmer() print(stemmer.stem("running"))
copy
  • Padding/Truncatie: zie het bovenstaande voorbeeld met max_length.
1234
from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("gpt2") inputs = tokenizer("Short text.", max_length=10, padding="max_length", truncation=True, return_tensors="pt")
copy
Note
Opmerking

Bouw modulaire preprocessingspipelines met reproduceerbaarheid als uitgangspunt. Gebruik DVC, wandb artifacts of huggingface/datasets met streaming + caching.

Strategieën voor datasplitsing

Effectieve datasplitsing is essentieel voor generalisatie, vooral bij generatieve modellering waar overfitting op modes of memorisatie vaak voorkomt.

Train/Validatie/Test splitsing

  • Conventionele verhoudingen: 80/10/10 of 70/15/15 afhankelijk van de datasetgrootte;
  • Inhoudsbewuste splitsing: splitsen op basis van klasse (visie), onderwerp (tekst).
  • Toepassingsvoorbeeld:
    • Training: stuurt modeloptimalisatie aan;
    • Validatie: begeleidt checkpointing, vroegtijdig stoppen en metriekafstemming (bijv. FID);
    • Test: volledig achtergehouden tot de uiteindelijke modelbenchmarking.

Voorbeeld met gebruik van train_test_split:

Voor Hugging Face Datasets:

Kruisvalidering en Bootstrapping

  • Voor domeinen met weinig middelen of zero-shot, gebruik K-fold CV (bijv. K=5 of 10);
  • In diffusie modellen, gebruik bootstrapped FID/LPIPS om de stabiliteit van generatie te evalueren;
  • Visuele of perceptuele inspectie dient numerieke validatie te begeleiden.

Voorbeeld K-fold opzet:

Veelgebruikte datasets

De keuze van de juiste dataset hangt af van modaliteit, dataschaal, licentievoorwaarden en het specifieke generatieve doel (bijvoorbeeld onvoorwaardelijke generatie, conditionele synthese of stijltransfer).

Computer Vision-datasets

  • CIFAR-10: 60.000 laag-resolutie 32×32 RGB-afbeeldingen in 10 klassen. Lichtgewicht, ideaal voor snelle prototyping, unittests en benchmarking van trainingsloops voor image GANs;
  • CelebA: meer dan 200.000 uitgelijnde gezichten van beroemdheden, geannoteerd met 40 binaire attributen. Veelgebruikt voor attributengebaseerde generatie, identiteit-behoudende gezichtsaanpassing en encoder-decoder modellen;
  • LSUN: grootschalige scenedataset met miljoenen afbeeldingen in categorieën zoals slaapkamers, kerken en eetkamers. Essentieel voor hoge-resolutie synthese en progressieve GAN-training;
  • ImageNet: meer dan 14 miljoen hoogwaardige afbeeldingen gelabeld over 20.000 klassen. Voornamelijk gebruikt voor transfer learning, pretraining van diffusie modellen en als basisdataset voor stijlgestuurde generatie.

Tekstdatasets

  • WikiText: schone Wikipedia-artikelen (WikiText-2: 2M tokens, WikiText-103: 100M+). Waardevol voor het evalueren van taalmodellering en het fijn afstemmen van decoder-only modellen zoals GPT;
  • BookCorpus: meer dan 11.000 gratis romans. Essentieel voor narratieve generatie, long-context transformers en pretraining van fundamentele modellen (zoals BERT, GPT-2);
  • Common Crawl / C4: petabyte-schaal meertalige webdata. C4 is een gededupliceerde, gefilterde variant, samengesteld voor hoogwaardige taalmodeltraining (zoals T5);
  • The Pile: 825GB aan diverse data (boeken, ArXiv, StackExchange, GitHub, enz.). Ontworpen om GPT-achtige modellen te trainen die concurreren met OpenAI’s LLMs.

Samenvatting

  • Selecteer datasets op basis van kwaliteit, licentie, schaal en afstemming op generatieve doelstellingen;
  • Pas preprocessingspipelines toe die zijn afgestemd op elke modaliteit met behulp van robuuste, productieklare tools;
  • Zorg voor strikte splitsingsstrategieën ter ondersteuning van reproduceerbaarheid, voorkom datalekken en maak eerlijke evaluatie mogelijk.

1. Waarom is datakwaliteit belangrijker dan kwantiteit bij het trainen van generatieve AI-modellen?

2. Wat is een veelvoorkomende uitdaging bij het verzamelen van diverse data voor het trainen van generatieve modellen?

3. Wat is het primaire doel van data-augmentatie in de context van generatieve AI-training?

question mark

Waarom is datakwaliteit belangrijker dan kwantiteit bij het trainen van generatieve AI-modellen?

Select the correct answer

question mark

Wat is een veelvoorkomende uitdaging bij het verzamelen van diverse data voor het trainen van generatieve modellen?

Select the correct answer

question mark

Wat is het primaire doel van data-augmentatie in de context van generatieve AI-training?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 1
some-alt