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 delen introduserer høykvalitets datasett innen bilde-, tekst- og lydmodaliteter, gir detaljerte forhåndsprosesseringsteknikker 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, omfang og lisensiering. For tekst- og bildedata er vanlige kilder åpne datasett, skrapet innhold og strukturerte arkiver (for eksempel akademiske arkiver, sosiale medier eller e-handelsplattformer).
Nett-skrapingsteknikker
Når datasett ikke er lett tilgjengelige, kan data samles inn fra nettet ved hjelp av skrapeverktøy. Nett-skraping gjør det mulig å programmere utvinning av informasjon fra HTML-sider. Dette er en kraftig metode 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åndsprosessering og modelltrening.
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()
Gjennomgå alltid et nettsteds bruksvilkår før du skraper data. Bruk høflige forespørselsrater og respekter robots.txt. Feilaktig skraping kan føre til IP-blokkering eller juridiske konsekvenser.
I GenAI-sammenheng 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
Forhåndsbehandling av data må tilpasses modalitet, modelltype og kvalitetskrav. For generativ modellering i produksjon omfatter datastrømmer ofte domenespesifikke transformasjoner, tilpasning av oppløsning og filtrering basert på innhold.
Forhåndsbehandling av bilder
- Endring av størrelse: tilpass datasettets oppløsning til modellens input (f.eks. 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 standardområde, 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: sikrer 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, ekstra 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 alle alfanumeriske tegn (bokstaver A-Z, a-z, sifre 0-9) og understrek_;\s: matcher alle 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. Dermed fjernes tegnsetting og symboler (som
—,!, osv.).
-
r"\s+":\s: matcher alle 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.
- Små bokstaver: standardiserer tekst til små bokstaver for konsistens. Bruk selektivt, fordi modeller som BERT kan være case-sensitiv eller ikke;
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 dype læringspipelines, 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åndsprosesseringspipelines 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 der 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 checkpointing, tidlig stopp og justering av metrikker (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 CV (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 i 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 attributtbetinget 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 transfer learning, pretrening av diffusjonsmodeller og som grunnlag for stilbasert generering.
Tekstdatasett
- WikiText: rene Wikipedia-artikler (WikiText-2: 2M tokens, WikiText-103: 100M+). 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: 825GB med variert data (bøker, ArXiv, StackExchange, GitHub, osv.). Utformet for å trene GPT-lignende modeller konkurransedyktig med OpenAIs LLM-er.
Sammendrag
- Velg datasett basert på kvalitet, lisensiering, skala og samsvar med generative mål;
- Bruk forhåndsprosesseringspipelines 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 AI?
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