Raccolta e Pre-Elaborazione dei Dati
L'addestramento di modelli generativi richiede non solo un'architettura adeguata e funzioni di perdita efficaci, ma anche dati puliti, ben strutturati e diversificati. Questa sezione presenta dataset di alta qualità nei domini visivo, testuale e audio, fornisce tecniche di pre-elaborazione dettagliate adatte alle pipeline generative moderne e illustra strategie robuste di suddivisione dei dati con strumenti pratici.
Raccolta dei dati
La raccolta dei dati per la modellazione generativa dipende dal dominio, dalla disponibilità delle fonti, dalla scala e dalle licenze. Per i dati testuali e visivi, le fonti comuni includono dataset aperti, contenuti estratti e repository strutturati (ad esempio, archivi accademici, social media o piattaforme di e-commerce).
Tecniche di Web Scraping
Quando i dataset non sono facilmente disponibili, i dati possono essere raccolti dal web utilizzando strumenti di scraping. Il web scraping consente di estrarre informazioni in modo programmatico dalle pagine HTML. Si tratta di un approccio potente per raccogliere dati reali e non strutturati quando le API non sono disponibili. Tuttavia, lo scraping comporta responsabilità sia tecniche che etiche.
Le metodologie di scraping generalmente includono:
- Invio di richieste HTTP per recuperare le pagine web. Questo permette di accedere al contenuto HTML grezzo di una pagina;
- Parsing del contenuto HTML per estrarre dati strutturati. Strumenti come BeautifulSoup convertono HTML non strutturato in tag ed elementi accessibili;
- Navigazione di pagine dinamiche tramite automazione del browser. I siti web ricchi di JavaScript richiedono strumenti come Selenium per visualizzare completamente il contenuto;
- Memorizzazione dei dati estratti in formati utilizzabili come CSV o JSON. Questo garantisce la compatibilità con le successive fasi di preprocessamento e addestramento del modello.
Di seguito sono riportate due strategie comuni di scraping:
Estrazione di testo con BeautifulSoup
BeautifulSoup è una libreria Python utilizzata per analizzare pagine HTML statiche.
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)
Estrazione di immagini con Selenium
Selenium automatizza un browser per estrarre contenuti da pagine generate tramite 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()
Verificare sempre i termini di servizio di un sito web prima di effettuare scraping. Utilizzare frequenze di richiesta moderate e rispettare il file robots.txt. Uno scraping improprio può comportare il blocco dell'indirizzo IP o conseguenze legali.
Nei contesti GenAI, il web scraping rappresenta spesso una fase preliminare per la creazione di dataset di pre-addestramento, in particolare per lingue specifiche di dominio o a bassa disponibilità di risorse. Strumenti come Scrapy, playwright o API browserless sono frequentemente utilizzati anche per attività su larga scala.
Tecniche di Preprocessing
Il preprocessing dei dati deve essere adattato alla modalità, al tipo di modello e ai vincoli di qualità. Per la modellazione generativa a livello produttivo, le pipeline includono spesso trasformazioni specifiche per il dominio, adattamento della risoluzione e filtraggio basato sul contenuto.
Preprocessing delle immagini
- Ridimensionamento: adattamento della risoluzione del dataset all'input del modello (ad esempio, 64x64 per i primi GAN, 512x512 per i modelli di diffusione);
- Normalizzazione: scala i valori dei pixel a un intervallo standard, tipicamente [−1, 1] o [0, 1];
- Gestione dello spazio colore: garantisce la coerenza cromatica — conversione in RGB o scala di grigi. Per la generazione condizionata, mantenimento dei canali alfa se presenti;
- Aumento dei dati: introduce variazioni durante l'addestramento tramite trasformazioni.
Preprocessing del testo
- Pulizia: rimuove caratteri speciali, spazi bianchi in eccesso e rumore;
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: corrisponde a qualsiasi carattere alfanumerico (lettere A-Z, a-z, cifre 0-9) e underscore_;\s: corrisponde a qualsiasi carattere di spazio bianco (spazi, tabulazioni, ritorni a capo);[^...]: classe di caratteri negata—corrisponde a tutto ciò che non è elencato all'interno;- Significato: questo pattern corrisponde a tutti i caratteri tranne lettere, cifre, underscore e spazi bianchi. Quindi rimuove punteggiatura e simboli (come
—,!, ecc.).
-
r"\s+":\s: corrisponde a qualsiasi carattere di spazio bianco;+: corrisponde a uno o più del token precedente;- Significato: questo sostituisce più caratteri di spazio bianco consecutivi con uno spazio singolo.
-
.strip(): rimuove gli spazi bianchi iniziali e finali dalla stringa pulita finale.
Per ulteriori informazioni sulla sintassi RegEx, consultare la documentazione.
- Conversione in minuscolo: standardizzazione del testo in minuscolo per coerenza. Applicare in modo selettivo, poiché modelli come BERT sono case sensitive/non case sensitive;
12text = "This Is A Sentence." print(text.lower())
- Tokenizzazione: suddivisione del testo in token o sottoparole per la modellizzazione;
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/Lemmatizzazione: raro nelle pipeline di deep learning ma utilizzato nei tradizionali flussi NLP o nei filtri di pre-addestramento;
1234from nltk.stem import PorterStemmer stemmer = PorterStemmer() print(stemmer.stem("running"))
- Padding/Troncamento: vedere l'esempio sopra con
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")
Costruzione di pipeline di pre-elaborazione modulari con attenzione alla riproducibilità. Utilizzo di DVC, wandb artifacts o huggingface/datasets con streaming + caching.
Strategie di suddivisione dei dati
Una suddivisione efficace dei dati è fondamentale per la generalizzazione, soprattutto nella modellazione generativa dove l'overfitting alle modalità o la memorizzazione sono frequenti.
Suddivisione Train/Validation/Test
- Rapporti convenzionali: 80/10/10 o 70/15/15 a seconda della dimensione del dataset;
- Suddivisione consapevole del contenuto: suddividere in modo stratificato per classe (vision), argomento (testo).
- Caso d'uso:
- Training: ottimizzazione del modello;
- Validation: guida il salvataggio dei checkpoint, l'early stopping e la regolazione delle metriche (ad es. FID);
- Test: completamente escluso fino al benchmarking finale del modello.
Esempio con train_test_split:
Per i Datasets di Hugging Face:
Cross-Validation e Bootstrapping
- Per domini a bassa risorsa o zero-shot, utilizzo di K-fold CV (ad esempio, K=5 o 10);
- Nei modelli di diffusione, utilizzo di FID/LPIPS bootstrappati per valutare la stabilità della generazione;
- L'ispezione visiva o percettiva deve accompagnare la validazione numerica.
Esempio di configurazione K-fold:
Dataset comunemente utilizzati
La scelta del dataset appropriato dipende dalla modalità, dalla scala dei dati, dalle licenze e dall'obiettivo generativo specifico (ad esempio, generazione incondizionata, sintesi condizionata o trasferimento di stile).
Dataset per Computer Vision
- CIFAR-10: 60.000 immagini RGB a bassa risoluzione 32×32 suddivise in 10 classi. Leggero, ideale per prototipazione rapida, unit test e benchmarking dei cicli di addestramento per GAN di immagini;
- CelebA: oltre 200.000 volti di celebrità allineati e annotati con 40 attributi binari. Utilizzato frequentemente per generazione condizionata da attributi, editing del volto con mantenimento dell'identità e modelli encoder-decoder;
- LSUN: dataset di scene su larga scala contenente milioni di immagini in categorie come camere da letto, chiese e sale da pranzo. Fondamentale per la sintesi ad alta risoluzione e l'addestramento progressivo di GAN;
- ImageNet: oltre 14 milioni di immagini di alta qualità etichettate in 20.000 classi. Utilizzato principalmente per il transfer learning, il pretraining di modelli di diffusione e come dataset di base per la generazione guidata dallo stile.
Dataset di Testo
- WikiText: articoli di Wikipedia puliti (WikiText-2: 2 milioni di token, WikiText-103: oltre 100 milioni). Utile per la valutazione del language modeling e il fine-tuning di modelli decoder-only come GPT;
- BookCorpus: oltre 11.000 romanzi gratuiti. Fondamentale per la generazione in stile narrativo, transformer a lungo contesto e pretraining di modelli fondamentali (ad esempio, BERT, GPT-2);
- Common Crawl / C4: dati web multilingue su scala petabyte. C4 è una variante deduplicata e filtrata, curata per l'addestramento di modelli linguistici di alta qualità (ad esempio, T5);
- The Pile: 825 GB di dati eterogenei (libri, ArXiv, StackExchange, GitHub, ecc.). Progettato per addestrare modelli in stile GPT competitivi con i LLM di OpenAI.
Riepilogo
- Selezione dei dataset in base a qualità, licenza, scala e coerenza con gli obiettivi generativi;
- Applicazione di pipeline di pre-elaborazione specifiche per ciascuna modalità utilizzando strumenti robusti e di livello produttivo;
- Adozione di strategie rigorose di suddivisione per garantire la riproducibilità, evitare contaminazioni e consentire una valutazione equa.
1. Perché la qualità dei dati è più importante della quantità nell'addestramento di modelli di AI generativa?
2. Qual è una sfida comune nella raccolta di dati diversificati per l'addestramento di modelli generativi?
3. Qual è l'obiettivo principale dell'aumento dei dati nel contesto dell'addestramento di AI generativa?
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Awesome!
Completion rate improved to 4.76
Raccolta e Pre-Elaborazione dei Dati
Scorri per mostrare il menu
L'addestramento di modelli generativi richiede non solo un'architettura adeguata e funzioni di perdita efficaci, ma anche dati puliti, ben strutturati e diversificati. Questa sezione presenta dataset di alta qualità nei domini visivo, testuale e audio, fornisce tecniche di pre-elaborazione dettagliate adatte alle pipeline generative moderne e illustra strategie robuste di suddivisione dei dati con strumenti pratici.
Raccolta dei dati
La raccolta dei dati per la modellazione generativa dipende dal dominio, dalla disponibilità delle fonti, dalla scala e dalle licenze. Per i dati testuali e visivi, le fonti comuni includono dataset aperti, contenuti estratti e repository strutturati (ad esempio, archivi accademici, social media o piattaforme di e-commerce).
Tecniche di Web Scraping
Quando i dataset non sono facilmente disponibili, i dati possono essere raccolti dal web utilizzando strumenti di scraping. Il web scraping consente di estrarre informazioni in modo programmatico dalle pagine HTML. Si tratta di un approccio potente per raccogliere dati reali e non strutturati quando le API non sono disponibili. Tuttavia, lo scraping comporta responsabilità sia tecniche che etiche.
Le metodologie di scraping generalmente includono:
- Invio di richieste HTTP per recuperare le pagine web. Questo permette di accedere al contenuto HTML grezzo di una pagina;
- Parsing del contenuto HTML per estrarre dati strutturati. Strumenti come BeautifulSoup convertono HTML non strutturato in tag ed elementi accessibili;
- Navigazione di pagine dinamiche tramite automazione del browser. I siti web ricchi di JavaScript richiedono strumenti come Selenium per visualizzare completamente il contenuto;
- Memorizzazione dei dati estratti in formati utilizzabili come CSV o JSON. Questo garantisce la compatibilità con le successive fasi di preprocessamento e addestramento del modello.
Di seguito sono riportate due strategie comuni di scraping:
Estrazione di testo con BeautifulSoup
BeautifulSoup è una libreria Python utilizzata per analizzare pagine HTML statiche.
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)
Estrazione di immagini con Selenium
Selenium automatizza un browser per estrarre contenuti da pagine generate tramite 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()
Verificare sempre i termini di servizio di un sito web prima di effettuare scraping. Utilizzare frequenze di richiesta moderate e rispettare il file robots.txt. Uno scraping improprio può comportare il blocco dell'indirizzo IP o conseguenze legali.
Nei contesti GenAI, il web scraping rappresenta spesso una fase preliminare per la creazione di dataset di pre-addestramento, in particolare per lingue specifiche di dominio o a bassa disponibilità di risorse. Strumenti come Scrapy, playwright o API browserless sono frequentemente utilizzati anche per attività su larga scala.
Tecniche di Preprocessing
Il preprocessing dei dati deve essere adattato alla modalità, al tipo di modello e ai vincoli di qualità. Per la modellazione generativa a livello produttivo, le pipeline includono spesso trasformazioni specifiche per il dominio, adattamento della risoluzione e filtraggio basato sul contenuto.
Preprocessing delle immagini
- Ridimensionamento: adattamento della risoluzione del dataset all'input del modello (ad esempio, 64x64 per i primi GAN, 512x512 per i modelli di diffusione);
- Normalizzazione: scala i valori dei pixel a un intervallo standard, tipicamente [−1, 1] o [0, 1];
- Gestione dello spazio colore: garantisce la coerenza cromatica — conversione in RGB o scala di grigi. Per la generazione condizionata, mantenimento dei canali alfa se presenti;
- Aumento dei dati: introduce variazioni durante l'addestramento tramite trasformazioni.
Preprocessing del testo
- Pulizia: rimuove caratteri speciali, spazi bianchi in eccesso e rumore;
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: corrisponde a qualsiasi carattere alfanumerico (lettere A-Z, a-z, cifre 0-9) e underscore_;\s: corrisponde a qualsiasi carattere di spazio bianco (spazi, tabulazioni, ritorni a capo);[^...]: classe di caratteri negata—corrisponde a tutto ciò che non è elencato all'interno;- Significato: questo pattern corrisponde a tutti i caratteri tranne lettere, cifre, underscore e spazi bianchi. Quindi rimuove punteggiatura e simboli (come
—,!, ecc.).
-
r"\s+":\s: corrisponde a qualsiasi carattere di spazio bianco;+: corrisponde a uno o più del token precedente;- Significato: questo sostituisce più caratteri di spazio bianco consecutivi con uno spazio singolo.
-
.strip(): rimuove gli spazi bianchi iniziali e finali dalla stringa pulita finale.
Per ulteriori informazioni sulla sintassi RegEx, consultare la documentazione.
- Conversione in minuscolo: standardizzazione del testo in minuscolo per coerenza. Applicare in modo selettivo, poiché modelli come BERT sono case sensitive/non case sensitive;
12text = "This Is A Sentence." print(text.lower())
- Tokenizzazione: suddivisione del testo in token o sottoparole per la modellizzazione;
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/Lemmatizzazione: raro nelle pipeline di deep learning ma utilizzato nei tradizionali flussi NLP o nei filtri di pre-addestramento;
1234from nltk.stem import PorterStemmer stemmer = PorterStemmer() print(stemmer.stem("running"))
- Padding/Troncamento: vedere l'esempio sopra con
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")
Costruzione di pipeline di pre-elaborazione modulari con attenzione alla riproducibilità. Utilizzo di DVC, wandb artifacts o huggingface/datasets con streaming + caching.
Strategie di suddivisione dei dati
Una suddivisione efficace dei dati è fondamentale per la generalizzazione, soprattutto nella modellazione generativa dove l'overfitting alle modalità o la memorizzazione sono frequenti.
Suddivisione Train/Validation/Test
- Rapporti convenzionali: 80/10/10 o 70/15/15 a seconda della dimensione del dataset;
- Suddivisione consapevole del contenuto: suddividere in modo stratificato per classe (vision), argomento (testo).
- Caso d'uso:
- Training: ottimizzazione del modello;
- Validation: guida il salvataggio dei checkpoint, l'early stopping e la regolazione delle metriche (ad es. FID);
- Test: completamente escluso fino al benchmarking finale del modello.
Esempio con train_test_split:
Per i Datasets di Hugging Face:
Cross-Validation e Bootstrapping
- Per domini a bassa risorsa o zero-shot, utilizzo di K-fold CV (ad esempio, K=5 o 10);
- Nei modelli di diffusione, utilizzo di FID/LPIPS bootstrappati per valutare la stabilità della generazione;
- L'ispezione visiva o percettiva deve accompagnare la validazione numerica.
Esempio di configurazione K-fold:
Dataset comunemente utilizzati
La scelta del dataset appropriato dipende dalla modalità, dalla scala dei dati, dalle licenze e dall'obiettivo generativo specifico (ad esempio, generazione incondizionata, sintesi condizionata o trasferimento di stile).
Dataset per Computer Vision
- CIFAR-10: 60.000 immagini RGB a bassa risoluzione 32×32 suddivise in 10 classi. Leggero, ideale per prototipazione rapida, unit test e benchmarking dei cicli di addestramento per GAN di immagini;
- CelebA: oltre 200.000 volti di celebrità allineati e annotati con 40 attributi binari. Utilizzato frequentemente per generazione condizionata da attributi, editing del volto con mantenimento dell'identità e modelli encoder-decoder;
- LSUN: dataset di scene su larga scala contenente milioni di immagini in categorie come camere da letto, chiese e sale da pranzo. Fondamentale per la sintesi ad alta risoluzione e l'addestramento progressivo di GAN;
- ImageNet: oltre 14 milioni di immagini di alta qualità etichettate in 20.000 classi. Utilizzato principalmente per il transfer learning, il pretraining di modelli di diffusione e come dataset di base per la generazione guidata dallo stile.
Dataset di Testo
- WikiText: articoli di Wikipedia puliti (WikiText-2: 2 milioni di token, WikiText-103: oltre 100 milioni). Utile per la valutazione del language modeling e il fine-tuning di modelli decoder-only come GPT;
- BookCorpus: oltre 11.000 romanzi gratuiti. Fondamentale per la generazione in stile narrativo, transformer a lungo contesto e pretraining di modelli fondamentali (ad esempio, BERT, GPT-2);
- Common Crawl / C4: dati web multilingue su scala petabyte. C4 è una variante deduplicata e filtrata, curata per l'addestramento di modelli linguistici di alta qualità (ad esempio, T5);
- The Pile: 825 GB di dati eterogenei (libri, ArXiv, StackExchange, GitHub, ecc.). Progettato per addestrare modelli in stile GPT competitivi con i LLM di OpenAI.
Riepilogo
- Selezione dei dataset in base a qualità, licenza, scala e coerenza con gli obiettivi generativi;
- Applicazione di pipeline di pre-elaborazione specifiche per ciascuna modalità utilizzando strumenti robusti e di livello produttivo;
- Adozione di strategie rigorose di suddivisione per garantire la riproducibilità, evitare contaminazioni e consentire una valutazione equa.
1. Perché la qualità dei dati è più importante della quantità nell'addestramento di modelli di AI generativa?
2. Qual è una sfida comune nella raccolta di dati diversificati per l'addestramento di modelli generativi?
3. Qual è l'obiettivo principale dell'aumento dei dati nel contesto dell'addestramento di AI generativa?
Grazie per i tuoi commenti!