Datainnsamling og Forhåndsbehandling
Sveip for å vise menyen
Trening av generative modeller krever ikke bare god arkitektur og tapsfunksjoner, men også rene, velstrukturerte og varierte data. Denne seksjonen introduserer høykvalitets datasett innen bilde-, tekst- og lydmodaliteter, gir detaljerte forhåndsbehandlingsteknikker tilpasset moderne generative arbeidsflyter, og diskuterer robuste strategier for datasplitting med praktiske verktøy.
Datainnsamling
Innsamling av data for generativ modellering avhenger av domene, tilgjengelighet av kilder, skala og lisensiering. For tekst- og bildedata er vanlige kilder åpne datasett, skrapet innhold og strukturerte arkiver (f.eks. akademiske arkiver, sosiale medier eller e-handelsplattformer).
Webskrapingsteknikker
Når datasett ikke er lett tilgjengelige, kan data samles inn fra nettet ved hjelp av skrapeverktøy. Webskraping gjør det mulig å programmere utvinning av informasjon fra HTML-sider. Det er en kraftig tilnærming for å samle inn virkelige, ustrukturerte data når API-er ikke er tilgjengelige. Skraping medfører imidlertid både tekniske og etiske ansvar.
Skrapemetoder innebærer vanligvis:
- Sende HTTP-forespørsler for å hente nettsider. Dette gir tilgang til det rå HTML-innholdet på en side;
- Parsing av HTML-innhold for å trekke ut strukturert data. Verktøy som BeautifulSoup konverterer ustrukturert HTML til tilgjengelige tagger og elementer;
- Navigering av dynamiske sider ved bruk av nettleserautomatisering. JavaScript-tunge nettsteder krever verktøy som Selenium for å gjengi innholdet fullt ut;
- Lagring av uttrukket data i brukbare formater som CSV eller JSON. Dette sikrer kompatibilitet med senere forhåndsbehandling og modelltrinn.
Nedenfor er to vanlige skrapingsstrategier:
Skraping av tekst med BeautifulSoup
BeautifulSoup er et Python-bibliotek som brukes til å 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)
Skraping av bilder med Selenium
Selenium automatiserer en nettleser for å hente innhold fra sider som gjengis 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()
Gå alltid gjennom nettstedets bruksvilkår før du skraper. Bruk høflige forespørselsrater og respekter robots.txt. Feilaktig skraping kan føre til IP-blokkering eller juridiske konsekvenser.
I GenAI-sammenhenger er nettskraping ofte et forarbeid til å bygge pretrening-datasett, spesielt for domenespesifikke eller lavressursspråk. Verktøy som Scrapy, playwright eller browserless API-er brukes også ofte for storskala oppgaver.
Forbehandlingsteknikker
Dataprosessering må tilpasses modalitet, modelltype og kvalitetskrav. For generativ modellering i produksjonskvalitet inkluderer prosessene ofte domenespesifikke transformasjoner, tilpasning av oppløsning og innholdsbasert filtrering.
Bilde-forbehandling
- Endring av størrelse: tilpass datasettets oppløsning til modellens inndata (for eksempel 64x64 for tidlige GAN-er, 512x512 for diffusjonsmodeller);
from PIL import Image
img = Image.open("example.jpg")
resized = img.resize((256, 256))
resized.save("resized.jpg")
- Normalisering: skalerer pikselverdier til et standard intervall, vanligvis [−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]
])
- Fargehåndtering: sikre fargekonsistens — konverter til RGB eller gråtoner. For betinget generering, behold alfakanaler hvis de finnes;
from PIL import Image
img = Image.open("example.png").convert("RGB")
img.save("rgb_image.jpg")
- Datautvidelse: introduserer variasjon under trening via transformasjoner.
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
- Rensing: fjerner spesialtegn, overflødige mellomrom og støy;
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 (bokstaver A-Z, a-z, sifre 0-9) og understrek_;\s: matcher ethvert blanktegn (mellomrom, tabulatorer, linjeskift);[^...]: en negert tegnklasse—matcher alt som ikke er oppført inni;- Betydning: dette mønsteret matcher alle tegn unntatt bokstaver, sifre, understrek og blanktegn. Det fjerner altså tegnsetting og symboler (som
—,!, osv.).
-
r"\s+":\s: matcher ethvert blanktegn;+: matcher ett eller flere av det foregående tegnet;- Betydning: dette erstatter flere påfølgende blanktegn med ett enkelt mellomrom.
-
.strip(): fjerner innledende og avsluttende blanktegn fra den ferdig rensede strengen.
For mer informasjon om RegEx-syntaks, se dokumentasjonen.
- Konvertering til små bokstaver: standardiserer tekst til små bokstaver for konsistens. Bør brukes selektivt, fordi modeller som BERT er cased/uncased;
12text = "This Is A Sentence." print(text.lower())
- Tokenisering: deler tekst inn i tokens eller delord for 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: sjelden brukt i dyp læring, men benyttes i tradisjonell NLP eller pretrening-filtre;
1234from nltk.stem import PorterStemmer stemmer = PorterStemmer() print(stemmer.stem("running"))
- Utfylling/trunkering: se eksempelet 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")
Bygg modulære forhåndsbehandlingspipelines med reproduserbarhet i fokus. Bruk DVC, wandb artifacts eller huggingface/datasets med streaming + caching.
Strategier for datasplitting
Effektiv datasplitting er avgjørende for generalisering, spesielt i generative modeller hvor overtilpasning til moduser eller memorisering er vanlig.
Train/Validation/Test-splitt
- Konvensjonelle forhold: 80/10/10 eller 70/15/15 avhengig av datasettets størrelse;
- Innholdsbevisst splitting: stratifiser splitting etter klasse (visjon), tema (tekst).
- Bruksområde:
- Trening: styrer modelloptimalisering;
- Validering: styrer lagring av sjekkpunkter, tidlig stopp og metrikktuning (f.eks. FID);
- Test: holdes helt tilbake til endelig modellbenchmarking.
Eksempel ved bruk av 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"]
Kryssvalidering og bootstrapping
- For lavressurs- eller nullskudd-domener, bruk K-fold kryssvalidering (f.eks. K=5 eller 10);
- I diffusjonsmodeller, bruk bootstrappet FID/LPIPS for å evaluere generasjonsstabilitet;
- Visuell eller perseptuell inspeksjon bør ledsage numerisk validering.
Eksempel på K-fold-oppsett:
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]}")
Vanlig brukte datasett
Valg av riktig datasett avhenger av modalitet, dataskala, lisensiering og det spesifikke generative målet (f.eks. ubetinget generering, betinget syntese eller stiloverføring).
Datasett for datamaskinsyn
- CIFAR-10: 60 000 lavoppløselige 32×32 RGB-bilder fordelt på 10 klasser. Lettvektsdatasett, ideelt for rask prototyping, enhetstesting og benchmarking av treningssløyfer for bilde-GAN;
- CelebA: Over 200 000 justerte kjendisansikter annotert med 40 binære attributter. Ofte brukt i attributt-betinget generering, identitetsbevarende ansiktsredigering og encoder-decoder-modeller;
- LSUN: Storskala scenedatasett med millioner av bilder i kategorier som soverom, kirker og spisestuer. Viktig for høyoppløselig syntese og progressiv GAN-trening;
- ImageNet: Over 14 millioner bilder av høy kvalitet merket på tvers av 20 000 klasser. Brukes hovedsakelig til overføringslæring, pretrening av diffusjonsmodeller og som grunnlag for stilbasert generering.
Tekstdatasett
- WikiText: Renskrevne Wikipedia-artikler (WikiText-2: 2 millioner tokens, WikiText-103: over 100 millioner). Verdifullt for evaluering av språkmodellering og finjustering av dekoder-baserte modeller som GPT;
- BookCorpus: Over 11 000 gratis romaner. Kritisk for generering av narrativ stil, langkontekst-transformere og pretrening av grunnmodeller (f.eks. BERT, GPT-2);
- Common Crawl / C4: Flerspråklige nettdata i petabyte-skala. C4 er en deduplisert, filtrert variant kuratert for høykvalitets trening av språkmodeller (f.eks. T5);
- The Pile: 825 GB med variert data (bøker, ArXiv, StackExchange, GitHub, osv.). Utviklet for å trene GPT-lignende modeller konkurransedyktig med OpenAIs LLM-er.
Sammendrag
- Velg datasett basert på kvalitet, lisensiering, omfang og samsvar med generative mål;
- Bruk forhåndsbehandlingspipelines tilpasset hver modalitet med robuste, produksjonsklare verktøy;
- Sikre grundige delingsstrategier for å støtte reproduserbarhet, unngå lekkasje og muliggjøre rettferdig evaluering.
1. Hvorfor er datakvalitet viktigere enn kvantitet ved trening av generative AI-modeller?
2. Hva er en vanlig utfordring ved innsamling av mangfoldige data for trening av generative modeller?
3. Hva er hovedmålet med datautvidelse i sammenheng med trening av generativ KI?
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår