Deduplicazione

·

4 min

Paper originale

Questo articolo è stato scritto al 100% da un’AI

La deduplicazione è il processo che individua ed elimina i contenuti ripetuti all’interno di un dataset. Nel mondo dei modelli linguistici è uno dei passaggi di pulizia più importanti: si applica ai dati di addestramento, ai dati sintetici generati da un modello, ai documenti indicizzati in un sistema RAG.

Intuitivamente sembra un’operazione banale: si cercano due testi uguali e se ne tiene uno. In realtà la parte interessante sono i doppioni che uguali non sono, ma dicono la stessa cosa.

Perché i doppioni sono un problema

Un testo che compare cento volte pesa cento volte di più durante l’addestramento. Il modello finisce per sovra-imparare quei contenuti, a volte memorizzandoli parola per parola, e dedica meno attenzione al resto. Ci sono poi tre effetti pratici:

  • Costo: addestrare su dati ripetuti significa pagare calcolo per informazioni già viste.
  • Varietà: un dataset pieno di ripetizioni rappresenta il mondo in modo più povero di quanto suggeriscano le sue dimensioni.
  • Test falsati: se un esempio del set di test compare anche tra i dati di addestramento, il modello sembra più bravo di quanto sia. Si parla di contaminazione.

Tre livelli di somiglianza

Le tecniche di deduplicazione si distinguono per il tipo di somiglianza che riescono a riconoscere.

1. Duplicati esatti. Si normalizza il testo (minuscole, spazi, punteggiatura) e se ne calcola un’impronta numerica, l’hash. Due testi con la stessa impronta sono identici, e se ne tiene uno solo. È veloce anche su miliardi di documenti, ma riconosce solo le copie perfette.

2. Quasi-duplicati per parole. Ogni testo viene spezzato in piccole sequenze di parole o caratteri (gli n-gram), e si misura quante sequenze due testi hanno in comune, ad esempio con l’indice di Jaccard. Sopra una certa soglia, i due testi si considerano doppioni. Confrontare ogni testo con tutti gli altri diventa impraticabile su grandi volumi, per questo si usano tecniche come MinHash e LSH (Locality-Sensitive Hashing), che trovano le coppie simili senza fare tutti i confronti.

3. Quasi-duplicati per significato. Ogni testo viene trasformato in un embedding, un vettore che ne rappresenta il significato, e si misura la distanza tra i vettori. Due testi molto vicini dicono la stessa cosa, anche con parole completamente diverse. È il metodo più potente e anche il più costoso, perché richiede di calcolare un embedding per ogni testo.

Esempi concreti

Ecco cosa riconosce ciascun livello, partendo dalla frase “Vorrei il rimborso della lavatrice”.

Testo confrontatoEsattaPer parolePer significato
“vorrei il rimborso della lavatrice!”✓✓✓
“Vorrei il rimborso per la lavatrice”—✓✓
“Rivoglio i soldi spesi per la lavatrice”——✓
“La lavatrice fa un rumore strano”———

Il primo caso diventa identico dopo la normalizzazione. Il secondo cambia una sola parola. Il terzo è una parafrasi: parole diverse, stesso significato. L’ultimo parla della stessa lavatrice, ma chiede tutt’altro.

Quando si applica

  • Prima del pre-training: il web è pieno di pagine copiate, testi boilerplate, articoli ripubblicati su più siti. Deduplicare è uno dei primi passaggi nella costruzione di un corpus.
  • Nei dati sintetici: un modello che genera esempi tende a ripetersi. La deduplicazione si fa a fine generazione oppure durante, scartando ogni nuovo esempio troppo simile a quelli già raccolti.
  • Nei sistemi RAG: se lo stesso documento è indicizzato in più versioni, la ricerca restituisce più copie dello stesso passaggio e occupa spazio che servirebbe a informazioni diverse.
  • Tra addestramento e test: si controlla che nessun esempio del test compaia tra i dati di addestramento, per misurare le prestazioni in modo onesto.

Il nodo della soglia

Per i livelli 2 e 3 bisogna decidere quanto devono essere simili due testi per considerarli doppioni. Con una soglia troppo permissiva restano molte ripetizioni. Con una soglia troppo severa si buttano anche testi simili ma utili, come due richieste di rimborso per prodotti diversi. Non esiste un valore giusto in assoluto: si sceglie guardando a mano un campione di coppie scartate e verificando che siano davvero doppioni.

Un limite da tenere a mente

La deduplicazione toglie le ripetizioni, ma non aggiunge varietà. Un dataset di mille messaggi tutti diversi tra loro, ma tutti sulle lavatrici e tutti con lo stesso tono, supera qualsiasi controllo sui doppioni e resta comunque povero. Per accorgersene serve misurare la diversità dell’intero dataset, e per risolverlo serve tornare a raccogliere o generare dati nuovi.