Gegevensverzameling 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.
1234567891011import 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()
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 diffusiemodellen);
- 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;
12345import re text = "Example text — with symbols!" cleaned = re.sub(r"[^\w\s]", "", text) cleaned = re.sub(r"\s+", " ", cleaned).strip() print(cleaned)
-
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.).
-
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.
-
.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;
12text = "This Is A Sentence." print(text.lower())
- Tokenisatie: splitst tekst in tokens of subwoorden voor modellering;
1234from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("gpt2") encodings = tokenizer(["Example text."], padding="max_length", truncation=True, max_length=128, return_tensors="pt")
- Stemming/Lemmatizatie: zelden gebruikt in deep learning pipelines maar toegepast in traditionele NLP of pretrainingsfilters;
1234from nltk.stem import PorterStemmer stemmer = PorterStemmer() print(stemmer.stem("running"))
- Padding/Truncatie: zie het bovenstaande voorbeeld met
max_length.
1234from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("gpt2") inputs = tokenizer("Short text.", max_length=10, padding="max_length", truncation=True, return_tensors="pt")
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?
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Awesome!
Completion rate improved to 4.76
Gegevensverzameling 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.
1234567891011import 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()
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 diffusiemodellen);
- 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;
12345import re text = "Example text — with symbols!" cleaned = re.sub(r"[^\w\s]", "", text) cleaned = re.sub(r"\s+", " ", cleaned).strip() print(cleaned)
-
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.).
-
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.
-
.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;
12text = "This Is A Sentence." print(text.lower())
- Tokenisatie: splitst tekst in tokens of subwoorden voor modellering;
1234from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("gpt2") encodings = tokenizer(["Example text."], padding="max_length", truncation=True, max_length=128, return_tensors="pt")
- Stemming/Lemmatizatie: zelden gebruikt in deep learning pipelines maar toegepast in traditionele NLP of pretrainingsfilters;
1234from nltk.stem import PorterStemmer stemmer = PorterStemmer() print(stemmer.stem("running"))
- Padding/Truncatie: zie het bovenstaande voorbeeld met
max_length.
1234from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("gpt2") inputs = tokenizer("Short text.", max_length=10, padding="max_length", truncation=True, return_tensors="pt")
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?
Bedankt voor je feedback!