Indsamling og Forbehandling af Data
Træning af generative modeller kræver ikke kun god arkitektur og tabsfunktioner, men også rene, velstrukturerede og varierede datasæt. Dette afsnit introducerer datasæt af høj kvalitet inden for vision, tekst og lyd, giver detaljerede forbehandlingsteknikker til moderne generative pipelines og diskuterer robuste strategier for datasplit 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, skrabet 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 virkelige, 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 af 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)
Billedindhentning med Selenium
Selenium automatiserer en browser til at indsamle 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 scraping. Brug høflige forespørgselsrater og respekter robots.txt. Forkert scraping kan føre til IP-blokeringer eller juridiske konsekvenser.
I GenAI-sammenhænge fungerer web scraping ofte som 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å hyppigt til storskalaopgaver.
Forbehandlingsteknikker
Databehandling skal tilpasses modalitet, modeltype og kvalitetskrav. Til generativ modellering i produktionskvalitet 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);
- Normalisering: skalerer pixelværdier til et standardinterval, typisk [−1, 1] eller [0, 1];
- Farverumshåndtering: sikrer farvekonsistens — konverter til RGB eller gråtoner. For betinget generering, behold alfakanaler hvis til stede;
- Dataforøgelse: introducerer variation under træning via transformationer.
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 sammenhængende blanktegn med et enkelt mellemrum.
-
.strip(): fjerner indledende og afsluttende blanktegn fra den endelige rensede streng.
For yderligere 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/Truncation: 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.
Datasplitningsstrategier
Effektiv datasplitning er afgørende for generalisering, især i generative modeller, 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 splitning: stratificer splits efter klasse (vision), emne (tekst).
- Anvendelsestilfælde:
- Træning: driver modeloptimering;
- Validering: styrer checkpointing, early stopping og metrikjustering (f.eks. FID);
- Test: holdes helt tilbage indtil endelig modelbenchmarking.
Eksempel ved brug af train_test_split:
For Hugging Face Datasets:
Krydsvalidering og Bootstrapping
- For lav-ressource eller zero-shot domæner, anvend K-fold CV (f.eks. K=5 eller 10);
- I diffusionsmodeller, brug bootstrappet FID/LPIPS til at evaluere genereringsstabilitet;
- Visuel eller perceptuel inspektion bør ledsage numerisk validering.
Eksempel på K-fold opsætning:
Almindeligt anvendte datasæt
Valg af det rette datasæt afhænger af modalitet, dataskala, licensforhold og det specifikke generative må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 attributbetinget generering, identitetsbevarende ansigtsredigering og encoder-decoder-modeller;
- LSUN: Storskala 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, prætræning af diffusionsmodeller og som grunddatasæt for stilstyret generering.
Tekstdatasæt
- WikiText: Rensede Wikipedia-artikler (WikiText-2: 2 millioner tokens, WikiText-103: over 100 millioner). 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 prætræning 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 træning af sprogmodeller af høj kvalitet (f.eks. T5);
- The Pile: 825 GB diversificeret data (bøger, ArXiv, StackExchange, GitHub m.m.). Udviklet til træning af GPT-lignende modeller på niveau 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
Awesome!
Completion rate improved to 4.76
Indsamling og Forbehandling af Data
Stryg for at vise menuen
Træning af generative modeller kræver ikke kun god arkitektur og tabsfunktioner, men også rene, velstrukturerede og varierede datasæt. Dette afsnit introducerer datasæt af høj kvalitet inden for vision, tekst og lyd, giver detaljerede forbehandlingsteknikker til moderne generative pipelines og diskuterer robuste strategier for datasplit 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, skrabet 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 virkelige, 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 af 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)
Billedindhentning med Selenium
Selenium automatiserer en browser til at indsamle 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 scraping. Brug høflige forespørgselsrater og respekter robots.txt. Forkert scraping kan føre til IP-blokeringer eller juridiske konsekvenser.
I GenAI-sammenhænge fungerer web scraping ofte som 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å hyppigt til storskalaopgaver.
Forbehandlingsteknikker
Databehandling skal tilpasses modalitet, modeltype og kvalitetskrav. Til generativ modellering i produktionskvalitet 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);
- Normalisering: skalerer pixelværdier til et standardinterval, typisk [−1, 1] eller [0, 1];
- Farverumshåndtering: sikrer farvekonsistens — konverter til RGB eller gråtoner. For betinget generering, behold alfakanaler hvis til stede;
- Dataforøgelse: introducerer variation under træning via transformationer.
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 sammenhængende blanktegn med et enkelt mellemrum.
-
.strip(): fjerner indledende og afsluttende blanktegn fra den endelige rensede streng.
For yderligere 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/Truncation: 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.
Datasplitningsstrategier
Effektiv datasplitning er afgørende for generalisering, især i generative modeller, 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 splitning: stratificer splits efter klasse (vision), emne (tekst).
- Anvendelsestilfælde:
- Træning: driver modeloptimering;
- Validering: styrer checkpointing, early stopping og metrikjustering (f.eks. FID);
- Test: holdes helt tilbage indtil endelig modelbenchmarking.
Eksempel ved brug af train_test_split:
For Hugging Face Datasets:
Krydsvalidering og Bootstrapping
- For lav-ressource eller zero-shot domæner, anvend K-fold CV (f.eks. K=5 eller 10);
- I diffusionsmodeller, brug bootstrappet FID/LPIPS til at evaluere genereringsstabilitet;
- Visuel eller perceptuel inspektion bør ledsage numerisk validering.
Eksempel på K-fold opsætning:
Almindeligt anvendte datasæt
Valg af det rette datasæt afhænger af modalitet, dataskala, licensforhold og det specifikke generative må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 attributbetinget generering, identitetsbevarende ansigtsredigering og encoder-decoder-modeller;
- LSUN: Storskala 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, prætræning af diffusionsmodeller og som grunddatasæt for stilstyret generering.
Tekstdatasæt
- WikiText: Rensede Wikipedia-artikler (WikiText-2: 2 millioner tokens, WikiText-103: over 100 millioner). 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 prætræning 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 træning af sprogmodeller af høj kvalitet (f.eks. T5);
- The Pile: 825 GB diversificeret data (bøger, ArXiv, StackExchange, GitHub m.m.). Udviklet til træning af GPT-lignende modeller på niveau 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!