Datainnsamling og Forhåndsbehandling
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 domenet, tilgjengelighet av kilder, omfang og lisensiering. For tekst- og bildedata er vanlige kilder åpne datasett, skrapet innhold og strukturerte databaser (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. 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. Nettsteder med mye JavaScript 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 forbehandling 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()
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 pretreningsdatasett, 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.
Forbehandling av bilder
- Endring av størrelse: tilpass datasettets oppløsning til modellens inndata (f.eks. 64x64 for tidlige GAN-er, 512x512 for diffusjonsmodeller);
- Normalisering: skalerer pikselverdier til et standard intervall, vanligvis [−1, 1] eller [0, 1];
- Fargehåndtering: sikrer fargekonsistens — konverter til RGB eller gråtoner. For betinget generering beholdes alfakanaler hvis de er til stede;
- Datautvidelse: introduserer variasjon under trening gjennom transformasjoner.
Forhåndsbehandling av tekst
- 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, tabulator, 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 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 etterfølgende 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 som mål. 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:
For Hugging Face Datasets:
Kryssvalidering og bootstrapping
- For domener med lite eller ingen data, 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:
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. Hyppig 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: Rensede 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 narrativ generering, 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 ved hjelp av 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 forbindelse 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
Awesome!
Completion rate improved to 4.76
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 domenet, tilgjengelighet av kilder, omfang og lisensiering. For tekst- og bildedata er vanlige kilder åpne datasett, skrapet innhold og strukturerte databaser (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. 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. Nettsteder med mye JavaScript 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 forbehandling 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()
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 pretreningsdatasett, 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.
Forbehandling av bilder
- Endring av størrelse: tilpass datasettets oppløsning til modellens inndata (f.eks. 64x64 for tidlige GAN-er, 512x512 for diffusjonsmodeller);
- Normalisering: skalerer pikselverdier til et standard intervall, vanligvis [−1, 1] eller [0, 1];
- Fargehåndtering: sikrer fargekonsistens — konverter til RGB eller gråtoner. For betinget generering beholdes alfakanaler hvis de er til stede;
- Datautvidelse: introduserer variasjon under trening gjennom transformasjoner.
Forhåndsbehandling av tekst
- 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, tabulator, 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 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 etterfølgende 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 som mål. 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:
For Hugging Face Datasets:
Kryssvalidering og bootstrapping
- For domener med lite eller ingen data, 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:
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. Hyppig 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: Rensede 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 narrativ generering, 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 ved hjelp av 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 forbindelse med trening av generativ KI?
Takk for tilbakemeldingene dine!