Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Gegevensverzameling en -Voorverwerking | Generatieve Modellen Bouwen en Trainen
Diepe Generatieve Modellen met Python

Gegevensverzameling en -Voorverwerking

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 beeld-, tekst- en audiotoepassingen, biedt gedetailleerde preprocessingsmethoden die geschikt zijn voor moderne generatieve pipelines, en bespreekt robuuste strategieën voor het splitsen van data met praktische hulpmiddelen.

Gegevensverzameling

DataCollect

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

Webscrapingtechnieken

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

Scrapingmethoden omvatten doorgaans:

  • HTTP-verzoeken versturen om webpagina's op te halen. Dit geeft toegang 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. Websites die zwaar op JavaScript leunen vereisen tools zoals Selenium om de inhoud volledig te renderen;
  • Opgeslagen data opslaan in bruikbare formaten zoals CSV of JSON. Dit zorgt voor compatibiliteit met latere preprocessing- en modeltrainingstappen.

Hieronder staan twee veelgebruikte scrapingstrategieë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)

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()
Note
Opmerking

Controleer altijd de gebruiksvoorwaarden van een website voordat je 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 eerste stap bij het samenstellen van pretraining-datasets, vooral voor domeinspecifieke of laag-resourcetalige toepassingen. Tools zoals Scrapy, playwright of browserloze API's worden ook vaak gebruikt voor grootschalige taken.

Preprocessing-technieken

afbeelding

Gegevensvoorverwerking moet worden afgestemd op de modaliteit, het modeltype en de kwaliteitsvereisten. Voor generatieve modellen op productieniveau bevatten pipelines vaak domeinspecifieke transformaties, resolutie-aanpassingen en op inhoud gebaseerde filtering.

Voorverwerking van afbeeldingen

  • Formaat aanpassen: datasetresolutie afstemmen op modelinput (bijv. 64x64 voor vroege GANs, 512x512 voor diffusie-modellen);
from PIL import Image

img = Image.open("example.jpg")
resized = img.resize((256, 256))
resized.save("resized.jpg")
  • Normalisatie: schaalt pixelwaarden naar een standaardbereik, meestal [−1, 1] of [0, 1];
from torchvision import transforms

transform = transforms.Compose([
    transforms.Resize((256, 256)),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.5]*3, std=[0.5]*3)  # RGB to [-1, 1]
])
  • Kleurruimteverwerking: zorgt voor kleurconsistentie — converteren naar RGB of grijswaarden. Voor conditionele generatie, alfakanalen behouden indien aanwezig;
from PIL import Image

img = Image.open("example.png").convert("RGB")
img.save("rgb_image.jpg")
  • Data-augmentatie: introduceert variatie tijdens training via transformaties.
import albumentations as A
from albumentations.pytorch import ToTensorV2

transform = A.Compose([
    A.RandomResizedCrop(256, 256),
    A.HorizontalFlip(),
    A.ColorJitter(),
    A.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5)),
    ToTensorV2(),
])

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)
  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 spatie.
  3. .strip(): verwijdert voor- en achterliggende 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())
  • 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")
  • Stemming/Lemmatization: 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"))
  • Opvullen/Afkappen: 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")
Note
Opmerking

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

Strategieën voor het splitsen van data

Effectief splitsen van data is essentieel voor generalisatie, vooral bij generatieve modellering waar overfitting op modi of memorisatie vaak voorkomt.

Train/Validatie/Test splitsing

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

Voorbeeld met train_test_split:

from sklearn.model_selection import train_test_split

# Example: splitting an image dataset (paths or features)
train_paths, val_paths = train_test_split(image_paths, test_size=0.1, random_state=42)
train_paths, test_paths = train_test_split(train_paths, test_size=0.111, random_state=42)  # 0.111 to get ~10% test

Voor Hugging Face Datasets:

from datasets import load_dataset

dataset = load_dataset("wikitext", "wikitext-2-raw-v1")
split_dataset = dataset["train"].train_test_split(test_size=0.2, seed=42)
train_val = split_dataset["train"].train_test_split(test_size=0.1, seed=42)

train_set = train_val["train"]
val_set = train_val["test"]
test_set = split_dataset["test"]

Kruisvalidering en Bootstrapping

kruisvalidering
  • 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 de generatie te evalueren;
  • Visuele of perceptuele inspectie dient numerieke validatie te begeleiden.

Voorbeeld van een K-fold opzet:

from sklearn.model_selection import KFold
import numpy as np

kf = KFold(n_splits=5, shuffle=True, random_state=42)
for fold, (train_idx, val_idx) in enumerate(kf.split(data)):
    print(f"Fold {fold}: Train indices {train_idx[:5]}, Val indices {val_idx[:5]}")

Veelgebruikte datasets

De keuze van de juiste dataset hangt af van modaliteit, dataschaal, licenties en het specifieke generatieve doel (bijv. 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 snel prototypen, unit testing en benchmarking van trainingsloops voor image GANs;
  • CelebA: 200K+ uitgelijnde beroemdheidsgezichten geannoteerd met 40 binaire attributen. Veelgebruikt bij attribuut-geconditioneerde generatie, identiteit-behoudende gezichtsaanpassing en encoder-decoder modellen;
  • LSUN: grootschalige scene-dataset met miljoenen afbeeldingen in categorieën zoals slaapkamers, kerken en eetkamers. Essentieel voor hoge-resolutie synthese en progressieve GAN-training;
  • ImageNet: meer dan 14M hoogwaardige afbeeldingen gelabeld over 20K klassen. Voornamelijk gebruikt voor transfer learning, diffusie model pretraining 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 (bijv. BERT, GPT-2);
  • Common Crawl / C4: petabyte-schaal meertalige webdata. C4 is een gededupliceerde, gefilterde variant samengesteld voor hoogwaardige taalmodeltraining (bijv. 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

  • Kies datasets op basis van kwaliteit, licenties, schaal en afstemming op generatieve doelen;
  • Pas preprocessingspipelines toe die zijn afgestemd op elke modaliteit met robuuste, productieklare tools;
  • Zorg voor rigoureuze splitsingsstrategieën om reproduceerbaarheid te ondersteunen, lekkage te voorkomen en eerlijke evaluatie mogelijk te maken.

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?

Selecteer het correcte antwoord

question mark

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

Selecteer het correcte antwoord

question mark

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

Selecteer het correcte antwoord

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.

Sectie 3. Hoofdstuk 1
some-alt