Datainindsamling 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 lyd, giver detaljerede forbehandlingsteknikker til moderne generative pipelines og diskuterer robuste strategier for datasplitning med praktiske værktøjer.
Datainnsamling
Indsamling af data til generativ modellering afhænger af domæne, tilgængelighed af kilder, skala og licensering. For tekst- og visionsdata omfatter almindelige kilder åbne datasæt, scraped indhold og strukturerede arkiver (f.eks. akademiske arkiver, sociale medier eller e-handelsplatforme).
Webscraping-teknikker
Når datasæt ikke er umiddelbart tilgængelige, kan data indsamles fra internettet ved hjælp af scraping-værktøjer. Webscraping muliggør programmatisk udtrækning af information fra HTML-sider. Det er en effektiv metode til at indsamle virkelighedsnære, ustrukturerede data, når API'er ikke er tilgængelige. Dog medfører scraping både tekniske og etiske ansvar.
Scraping-metoder omfatter typisk:
- Afsendelse af HTTP-forespørgsler for at hente websider. Dette giver 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æk 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)
Billedhentning med Selenium
Selenium automatiserer en browser til at hente 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-blokering 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 browserløse API'er anvendes også hyppigt til storskalaopgaver.
Forbehandlingsteknikker
Databehandling skal tilpasses modalitet, modeltype og kvalitetskrav. For generativ modellering i produktion omfatter pipelines ofte domænespecifikke transformationer, opløsningstilpasning 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, behold alfakanaler hvis de er til stede;
from PIL import Image
img = Image.open("example.png").convert("RGB")
img.save("rgb_image.jpg")
- Data augmentation: 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 case-insensitive;
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"))
- Padding/Trunkering: 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 datasplit
Effektiv datasplit er afgørende for generalisering, især i generativ modellering hvor overfitting til modes eller memorisering er almindeligt.
Train/Validation/Test Split
- Konventionelle forhold: 80/10/10 eller 70/15/15 afhængigt af datasættets størrelse;
- Indholdsbevidst split: stratificer splits efter klasse (vision), emne (tekst).
- Anvendelsestilfælde:
- Træning: styrer modeloptimering;
- Validering: guider checkpointing, early stopping og metrikjustering (f.eks. FID);
- Test: holdes helt tilbage indtil endelig modelbenchmarking.
Eksempel med 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, anvend 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]}")
Almindeligt 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 kendisansigter annoteret med 40 binære attributter. Hyppigt anvendt til attribut-betinget generering, identitetsbevarende ansigtsredigering og encoder-decoder-modeller;
- LSUN: Stort scenedatasæ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 af høj kvalitet annoteret på tværs af 20.000 klasser. Anvendes primært til transfer learning, pretraining 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 narrativ generering, transformer-modeller med lang kontekst og pretraining af grundmodeller (f.eks. BERT, GPT-2);
- Common Crawl / C4: Webdata i petabyte-skala på flere sprog. C4 er en deduplikeret, filtreret variant kurateret til sprogmodellering af høj kvalitet (f.eks. T5);
- The Pile: 825GB forskelligartede data (bøger, ArXiv, StackExchange, GitHub m.m.). Designet til at træne GPT-lignende modeller konkurrencedygtigt med OpenAI’s LLMs.
Resumé
- Udvælg datasæt baseret på kvalitet, licensforhold, skala og overensstemmelse med generative mål;
- Anvend forbehandlings-pipelines tilpasset hver modalitet ved brug af robuste, produktionsklare værktøjer;
- Sikr stringente 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 diversificerede 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