Datainnsamling og Forbehandling
Stryg for at vise menuen
Træning af generative modeller kræver ikke kun god arkitektur og tabsfunktioner, men også rene, velstrukturerede og varierede data. Dette afsnit introducerer høj-kvalitets datasæt inden for vision-, tekst- og lydmodaliteter, giver detaljerede forbehandlingsteknikker tilpasset moderne generative pipelines og diskuterer robuste strategier for datasplitning med praktiske værktøjer.
Dataindsamling
Indsamling af data til generativ modellering afhænger af domæne, tilgængelighed af kilder, skala og licensering. For tekst- og billeddata omfatter almindelige kilder åbne datasæt, skrabet indhold og strukturerede databaser (f.eks. akademiske arkiver, sociale medier eller e-handelsplatforme).
Webscraping-teknikker
Når datasæt ikke er let tilgængelige, kan data indsamles fra internettet ved hjælp af scraping-værktøjer. Webscraping gør det muligt programmatisk at udtrække information fra HTML-sider. Det er en effektiv metode til at indsamle virkelige, ustrukturerede data, når API'er ikke er tilgængelige. Dog medfører scraping både tekniske og etiske ansvar.
Scraping-metoder involverer typisk:
- Afsendelse af HTTP-forespørgsler for at hente websider. Dette muliggør adgang til en sides rå HTML-indhold;
- Parsing af HTML-indhold for at udtrække strukturerede data. Værktøjer som BeautifulSoup konverterer ustruktureret HTML til tilgængelige tags og elementer;
- Navigering på dynamiske sider ved hjælp af browserautomatisering. JavaScript-tunge websites kræver værktøjer som Selenium for fuld rendering af indhold;
- Lagring af udtrukne data i anvendelige formater som CSV eller JSON. Dette sikrer kompatibilitet med senere forbehandling og modeltræning.
Nedenfor ses to almindelige scraping-strategier:
Udtrækning af tekst med BeautifulSoup
BeautifulSoup er et Python-bibliotek, der bruges til at parse statiske HTML-sider.
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)
Scraping af billeder med Selenium
Selenium automatiserer en browser til at udtrække indhold fra sider, der gengives med JavaScript.
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()
Gennemgå altid en hjemmesides servicevilkår, før du scraper. Brug høflige forespørgselsrater og respekter robots.txt. Forkert scraping kan føre til IP-blokeringer eller juridiske konsekvenser.
I GenAI-sammenhænge er web scraping ofte et forstadie til opbygning af pretræningsdatasæt, især for domænespecifikke eller lavressourcesprog. Værktøjer som Scrapy, playwright eller browserless API'er anvendes også ofte til storskalaopgaver.
Forbehandlingsteknikker
Forbehandling af data skal tilpasses modalitet, modeltype og kvalitetskrav. Til generativ modellering i produktion omfatter pipelines ofte domænespecifikke transformationer, tilpasning af opløsning og indholdsbaseret filtrering.
Billedforbehandling
- Ændring af størrelse: tilpas datasættets opløsning til modelinput (f.eks. 64x64 for tidlige GANs, 512x512 for diffusionsmodeller);
from PIL import Image
img = Image.open("example.jpg")
resized = img.resize((256, 256))
resized.save("resized.jpg")
- Normalisering: skalerer pixelværdier til et standardinterval, typisk [−1, 1] eller [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]
])
- Farverumshåndtering: sikrer farvekonsistens — konverter til RGB eller gråtoner. For betinget generering beholdes alfakanaler, hvis de er til stede;
from PIL import Image
img = Image.open("example.png").convert("RGB")
img.save("rgb_image.jpg")
- Dataforøgelse: introducerer variation under træning via transformationer.
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(),
])
Tekstforbehandling
- Rensning: fjerner specialtegn, ekstra mellemrum og støj;
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: matcher ethvert alfanumerisk tegn (bogstaver A-Z, a-z, cifre 0-9) og underscore_;\s: matcher ethvert blanktegn (mellemrum, tabulatorer, linjeskift);[^...]: en negationsklasse—matcher alt, der ikke er angivet indeni;- Betydning: dette mønster matcher alle tegn undtagen bogstaver, cifre, underscores og blanktegn. Det fjerner altså tegnsætning og symboler (som
—,!, osv.).
-
r"\s+":\s: matcher ethvert blanktegn;+: matcher et eller flere af det foregående tegn;- Betydning: dette erstatter flere på hinanden følgende blanktegn med et enkelt mellemrum.
-
.strip(): fjerner indledende og afsluttende blanktegn fra den endelige rensede streng.
For mere information om RegEx-syntaks, se dokumentationen.
- Konvertering til små bogstaver: standardiserer tekst til små bogstaver for konsistens. Anvendes selektivt, da modeller som BERT kan være case-sensitive eller ej;
12text = "This Is A Sentence." print(text.lower())
- Tokenisering: opdeler tekst i tokens eller delord til 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/Lemmatization: sjældent anvendt i dybdelærings-pipelines, men bruges i traditionel NLP eller prætræningsfiltre;
1234from nltk.stem import PorterStemmer stemmer = PorterStemmer() print(stemmer.stem("running"))
- Udfyldning/Afkortning: se eksemplet ovenfor med
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")
Opbyg modulære forbehandlings-pipelines med fokus på reproducerbarhed. Brug DVC, wandb artifacts eller huggingface/datasets med streaming + caching.
Strategier for datasplitning
Effektiv datasplitning er afgørende for generalisering, især i generative modeller, hvor overfitting til modes eller memorisering er almindeligt.
Træning/Validering/Test-split
- Konventionelle forhold: 80/10/10 eller 70/15/15 afhængigt af datasættets størrelse;
- Indholdsbevidst splitning: stratificer splits efter klasse (vision), emne (tekst).
- Anvendelsestilfælde:
- Træning: driver modeloptimering;
- Validering: styrer checkpointing, tidlig stop og metrikjustering (f.eks. FID);
- Test: holdes helt tilbage indtil endelig modelbenchmarking.
Eksempel ved brug af 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
For 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"]
Krydsvalidering og bootstrapping
- For lav-ressource eller zero-shot domæner, brug K-fold CV (f.eks. K=5 eller 10);
- I diffusionsmodeller anvendes bootstrappet FID/LPIPS til at evaluere genereringsstabilitet;
- Visuel eller perceptuel inspektion bør ledsage numerisk validering.
Eksempel på K-fold opsætning:
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]}")
Ofte anvendte datasæt
Valg af det rette datasæt afhænger af modalitet, dataskala, licensforhold og det specifikke generative formål (f.eks. ubetinget generering, betinget syntese eller stiloverførsel).
Computer vision datasæt
- CIFAR-10: 60.000 lavopløselige 32×32 RGB-billeder fordelt på 10 klasser. Letvægtsdatasæt, ideelt til hurtig prototyping, enhedstest og benchmarking af træningsloops for billed-GANs;
- CelebA: Over 200.000 justerede kendisportrætter annoteret med 40 binære attributter. Hyppigt anvendt til attribut-betinget generering, identitetsbevarende ansigtsredigering og encoder-decoder modeller;
- LSUN: Stort scenesæt med millioner af billeder i kategorier som soveværelser, kirker og spisestuer. Væsentligt for højopløselig syntese og progressiv GAN-træning;
- ImageNet: Over 14 millioner billeder i høj kvalitet mærket på tværs af 20.000 klasser. Anvendes primært til transfer learning, prætræning af diffusionsmodeller og som grunddatasæt for stilstyret generering.
Tekstdatasæt
- WikiText: rensede Wikipedia-artikler (WikiText-2: 2M tokens, WikiText-103: 100M+). Værdifuldt til evaluering af sprogmodellering og finjustering af decoder-only modeller som GPT;
- BookCorpus: over 11.000 gratis romaner. Kritisk for generering i narrativ stil, long-context transformers og pretræning af grundlæggende modeller (f.eks. BERT, GPT-2);
- Common Crawl / C4: webdata i petabyte-skala på flere sprog. C4 er en deduplikeret, filtreret variant kurateret til træning af sprogmodeller i høj kvalitet (f.eks. T5);
- The Pile: 825GB af varieret data (bøger, ArXiv, StackExchange, GitHub, osv.). Designet til at træne GPT-lignende modeller konkurrencedygtigt med OpenAI’s LLMs.
Opsummering
- Udvælg datasæt baseret på kvalitet, licens, skala og overensstemmelse med generative mål;
- Anvend forbehandlings-pipelines tilpasset hver modalitet ved brug af robuste, produktionsklare værktøjer;
- Sikr grundige opdelingsstrategier for at understøtte reproducerbarhed, undgå lækage og muliggøre retfærdig evaluering.
1. Hvorfor er datakvalitet vigtigere end mængde ved træning af generative AI-modeller?
2. Hvad er en almindelig udfordring ved indsamling af forskelligartede data til træning af generative modeller?
3. Hvad er det primære mål med dataforøgelse i forbindelse med træning af generativ AI?
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat