Datenerfassung und -Vorverarbeitung
Swipe um das Menü anzuzeigen
Das Training generativer Modelle erfordert nicht nur eine geeignete Architektur und Verlustfunktionen, sondern auch saubere, gut strukturierte und vielfältige Daten. Dieser Abschnitt stellt hochwertige Datensätze aus den Bereichen Bild, Text und Audio vor, bietet detaillierte Vorverarbeitungstechniken für moderne generative Pipelines und behandelt robuste Strategien zur Datenaufteilung mit praxisnahen Werkzeugen.
Datenerfassung
Die Datenerfassung für generatives Modellieren hängt von der Domäne, der Verfügbarkeit der Quellen, dem Umfang und den Lizenzbedingungen ab. Für Text- und Bilddaten zählen offene Datensätze, gesammelte Inhalte und strukturierte Repositorien (z. B. akademische Archive, soziale Medien oder E-Commerce-Plattformen) zu den gängigen Quellen.
Techniken des Web-Scrapings
Wenn Datensätze nicht direkt verfügbar sind, können Daten mithilfe von Scraping-Tools aus dem Web gesammelt werden. Web-Scraping ermöglicht das programmgesteuerte Extrahieren von Informationen aus HTML-Seiten. Es ist eine leistungsstarke Methode zur Sammlung realer, unstrukturierter Daten, wenn keine APIs zur Verfügung stehen. Allerdings gehen mit dem Scraping sowohl technische als auch ethische Verantwortlichkeiten einher.
Typische Scraping-Methoden umfassen:
- Senden von HTTP-Anfragen zum Abrufen von Webseiten. Dies ermöglicht den Zugriff auf den Roh-HTML-Inhalt einer Seite;
- Parsen von HTML-Inhalten zur Extraktion strukturierter Daten. Werkzeuge wie BeautifulSoup wandeln unstrukturiertes HTML in zugängliche Tags und Elemente um;
- Navigation durch dynamische Seiten mittels Browser-Automatisierung. JavaScript-lastige Webseiten erfordern Tools wie Selenium, um Inhalte vollständig darzustellen;
- Speichern der extrahierten Daten in verwendbaren Formaten wie CSV oder JSON. Dies gewährleistet die Kompatibilität mit späteren Schritten der Vorverarbeitung und des Modelltrainings.
Nachfolgend sind zwei gängige Scraping-Strategien aufgeführt:
Text-Scraping mit BeautifulSoup
BeautifulSoup ist eine Python-Bibliothek, die zum Parsen statischer HTML-Seiten verwendet wird.
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)
Bilder mit Selenium scrapen
Selenium automatisiert einen Browser, um Inhalte von Seiten zu extrahieren, die mit JavaScript gerendert werden.
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()
Vor dem Scrapen immer die Nutzungsbedingungen einer Website prüfen. Höfliche Anfrageraten verwenden und robots.txt respektieren. Unsachgemäßes Scraping kann zu IP-Sperren oder rechtlichen Konsequenzen führen.
Im Kontext von GenAI ist Web Scraping häufig ein vorbereitender Schritt beim Aufbau von Pretraining-Datensätzen, insbesondere für domänenspezifische oder ressourcenarme Sprachen. Werkzeuge wie Scrapy, playwright oder browserlose APIs werden ebenfalls häufig für groß angelegte Aufgaben eingesetzt.
Vorverarbeitungstechniken
Die Datenvorverarbeitung muss an die Modalität, den Modelltyp und die Qualitätsanforderungen angepasst werden. Für produktionsreife generative Modellierung umfassen Pipelines häufig domänenspezifische Transformationen, Auflösungsanpassungen und inhaltsbasierte Filterung.
Bildvorverarbeitung
- Größenanpassung: Anpassung der Datensatzauflösung an die Modelleingabe (z. B. 64x64 für frühe GANs, 512x512 für Diffusionsmodelle);
from PIL import Image
img = Image.open("example.jpg")
resized = img.resize((256, 256))
resized.save("resized.jpg")
- Normalisierung: Skalierung der Pixelwerte auf einen Standardbereich, typischerweise [−1, 1] oder [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]
])
- Farbraumverarbeitung: Sicherstellung der Farbkonstanz — Umwandlung in RGB oder Graustufen. Für bedingte Generierung Beibehaltung von Alpha-Kanälen, falls vorhanden;
from PIL import Image
img = Image.open("example.png").convert("RGB")
img.save("rgb_image.jpg")
- Datenaugmentation: führt während des Trainings durch Transformationen Variationen ein.
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(),
])
Textvorverarbeitung
- Bereinigung: entfernt Sonderzeichen, überflüssige Leerzeichen und Störfaktoren;
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: entspricht jedem alphanumerischen Zeichen (Buchstaben A-Z, a-z, Ziffern 0-9) und Unterstrich_;\s: entspricht jedem Leerraumzeichen (Leerzeichen, Tabulatoren, Zeilenumbrüche);[^...]: eine negierte Zeichenklasse—entspricht allem, was nicht innerhalb der Klammern steht;- Bedeutung: Dieses Muster entspricht allen Zeichen außer Buchstaben, Ziffern, Unterstrichen und Leerzeichen. Es entfernt also Satzzeichen und Symbole (wie
—,!, usw.).
-
r"\s+":\s: entspricht jedem Leerraumzeichen;+: entspricht einem oder mehreren der vorherigen Zeichen;- Bedeutung: Dies ersetzt mehrere aufeinanderfolgende Leerraumzeichen durch ein einzelnes Leerzeichen.
-
.strip(): entfernt führende und nachfolgende Leerzeichen aus dem bereinigten String.
Weitere Informationen zur RegEx-Syntax finden Sie in der Dokumentation.
- Kleinschreibung: Vereinheitlichung des Textes auf Kleinbuchstaben für Konsistenz. Selektive Anwendung empfohlen, da Modelle wie BERT zwischen Groß-/Kleinschreibung unterscheiden können;
12text = "This Is A Sentence." print(text.lower())
- Tokenisierung: unterteilt Text in Token oder Subwörter zur Modellierung;
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/Lemmatisierung: selten in Deep-Learning-Pipelines, aber in traditionellem NLP oder Pretraining-Filtern verwendet;
1234from nltk.stem import PorterStemmer stemmer = PorterStemmer() print(stemmer.stem("running"))
- Padding/Truncation: siehe Beispiel oben mit
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")
Modulare Vorverarbeitungspipelines mit Fokus auf Reproduzierbarkeit erstellen. Verwendung von DVC, wandb artifacts oder huggingface/datasets mit Streaming und Caching empfohlen.
Strategien zur Datenaufteilung
Effektive Datenaufteilung ist entscheidend für die Generalisierungsfähigkeit, insbesondere im generativen Modellieren, wo Überanpassung an Modi oder Auswendiglernen häufig auftritt.
Aufteilung in Training/Validierung/Test
- Konventionelle Verhältnisse: 80/10/10 oder 70/15/15 abhängig von der Datensatzgröße;
- Inhaltsbasierte Aufteilung: Aufteilung nach Klasse (Vision), Thema (Text) stratifizieren.
- Anwendungsfall:
- Training: Optimierung des Modells;
- Validierung: Steuerung von Checkpointing, Early Stopping und Metrikabstimmung (z. B. FID);
- Test: Vollständig zurückgehalten bis zum abschließenden Modell-Benchmarking.
Beispiel mit 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
Für 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"]
Kreuzvalidierung und Bootstrapping
- Für Low-Resource- oder Zero-Shot-Domänen Einsatz von K-facher Kreuzvalidierung (z. B. K=5 oder 10);
- Bei Diffusionsmodellen Verwendung von bootstrapped FID/LPIPS zur Bewertung der Generierungsstabilität;
- Visuelle oder perzeptuelle Überprüfung sollte die numerische Validierung ergänzen.
Beispiel für K-fache Kreuzvalidierung:
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]}")
Häufig verwendete Datensätze
Die Auswahl des geeigneten Datensatzes hängt von Modalität, Datenumfang, Lizenzierung und dem spezifischen generativen Ziel ab (z. B. unbedingte Generierung, bedingte Synthese oder Stiltransfer).
Computer-Vision-Datensätze
- CIFAR-10: 60.000 niedrig aufgelöste 32×32-RGB-Bilder in 10 Klassen. Leichtgewichtig, ideal für schnelles Prototyping, Unittests und Benchmarking von Trainingsschleifen für Bild-GANs;
- CelebA: Über 200.000 ausgerichtete Prominentengesichter, annotiert mit 40 binären Attributen. Häufig verwendet für attributbasierte Generierung, identitätsbewahrende Gesichtsmanipulation und Encoder-Decoder-Modelle;
- LSUN: Groß angelegter Szenen-Datensatz mit Millionen von Bildern in Kategorien wie Schlafzimmer, Kirchen und Speiseräume. Essenziell für hochauflösende Synthese und progressives GAN-Training;
- ImageNet: Über 14 Millionen hochwertige Bilder, klassifiziert in 20.000 Klassen. Hauptsächlich verwendet für Transferlernen, Diffusionsmodell-Vortraining und als Basisdatensatz für stilgesteuerte Generierung.
Textdatensätze
- WikiText: Saubere Wikipedia-Artikel (WikiText-2: 2 Mio. Tokens, WikiText-103: über 100 Mio.). Wertvoll zur Bewertung von Sprachmodellierung und Feinabstimmung von Decoder-only-Modellen wie GPT;
- BookCorpus: Über 11.000 frei verfügbare Romane. Kritisch für narrativ orientierte Generierung, Transformer mit langem Kontext und Vortraining von Grundmodellen (z. B. BERT, GPT-2);
- Common Crawl / C4: Multilinguale Webdaten im Petabyte-Bereich. C4 ist eine deduplizierte, gefilterte Variante, kuratiert für hochwertiges Sprachmodelltraining (z. B. T5);
- The Pile: 825 GB vielfältige Daten (Bücher, ArXiv, StackExchange, GitHub usw.). Entwickelt, um GPT-ähnliche Modelle wettbewerbsfähig zu OpenAIs LLMs zu trainieren.
Zusammenfassung
- Auswahl von Datensätzen basierend auf Qualität, Lizenzierung, Umfang und Übereinstimmung mit den generativen Zielen;
- Anwendung von auf jede Modalität zugeschnittenen Vorverarbeitungspipelines unter Verwendung robuster, produktionsreifer Werkzeuge;
- Sicherstellung rigoroser Aufteilungsstrategien zur Unterstützung der Reproduzierbarkeit, Vermeidung von Datenlecks und Ermöglichung einer fairen Bewertung.
1. Warum ist die Datenqualität beim Training generativer KI-Modelle wichtiger als die Datenmenge?
2. Was ist eine häufige Herausforderung bei der Sammlung vielfältiger Daten für das Training generativer Modelle?
3. Was ist das Hauptziel der Datenaugmentation im Kontext des Trainings generativer KI?
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen