SetFit Apprendimento Efficienti a Pochi Esempi Senza Promemoria

SetFit Apprendimento efficiente a pochi esempi senza promemoria.

SetFit è significativamente più efficiente in termini di campioni e robusto al rumore rispetto alla semplice messa a punto.

L’apprendimento con pochi esempi utilizzando modelli di linguaggio preaddestrati si è rivelato una soluzione promettente al problema degli scienziati dei dati: gestire dati con pochi o nessun’etichetta 😱.

In collaborazione con i nostri partner di ricerca presso Intel Labs e UKP Lab, Hugging Face è entusiasta di presentare SetFit: un framework efficiente per la messa a punto rapida con pochi esempi di Sentence Transformers. SetFit raggiunge alte prestazioni con pochi dati etichettati – ad esempio, con solo 8 esempi etichettati per classe nel dataset di sentiment analysis Customer Reviews (CR), SetFit è competitivo con la messa a punto RoBERTa Large sull’intero set di addestramento di 3k esempi 🤯!

Rispetto ad altri metodi di apprendimento con pochi esempi, SetFit presenta diverse caratteristiche uniche:

🗣 Nessun prompt o verbalizzatore: Le tecniche attuali per la messa a punto con pochi esempi richiedono prompt o verbalizzatori realizzati manualmente per convertire gli esempi in un formato adatto al modello di linguaggio sottostante. SetFit elimina del tutto i prompt generando embedding completi direttamente da un piccolo numero di esempi di testo etichettati.

🏎 Addestramento rapido: SetFit non richiede modelli di grandi dimensioni come T0 o GPT-3 per raggiungere alte prestazioni. Di conseguenza, solitamente è un ordine di grandezza (o più) più veloce da addestrare ed eseguire l’inferenza.

🌎 Supporto multilingue: SetFit può essere utilizzato con qualsiasi Sentence Transformer su Hub, il che significa che è possibile classificare il testo in più lingue semplicemente mettendo a punto un checkpoint multilingue.

Per ulteriori dettagli, consulta il nostro articolo, i dati e il codice. In questo post del blog, spiegheremo come funziona SetFit e come addestrare i tuoi modelli personalizzati. Diamo un’occhiata!

Come funziona?

SetFit è progettato con efficienza e semplicità in mente. SetFit prima mette a punto un modello di Sentence Transformer su un numero limitato di esempi etichettati (di solito 8 o 16 per classe). Successivamente, viene addestrato un classificatore sugli embedding generati dal Sentence Transformer messo a punto.

Processo di addestramento in due fasi di SetFit

SetFit sfrutta la capacità di Sentence Transformers di generare embedding densi basati su frasi accoppiate. Nella fase iniziale di messa a punto, utilizza i dati di input etichettati limitati con un addestramento contrastivo, in cui vengono creati coppie positive e negative selezionando esempi all’interno e all’esterno della stessa classe. Il modello Sentence Transformer viene quindi addestrato su queste coppie (o triplette) e genera vettori densi per ogni esempio. Nella seconda fase, il classificatore viene addestrato sugli embedding codificati con le rispettive etichette di classe. Durante l’inferenza, l’esempio non visto passa attraverso il Sentence Transformer messo a punto, generando un embedding che, quando viene alimentato al classificatore, restituisce una previsione dell’etichetta di classe.

E semplicemente sostituendo il modello di base Sentence Transformer con un modello multilingue, SetFit può funzionare senza problemi in contesti multilingue. Nei nostri esperimenti, le prestazioni di SetFit mostrano risultati promettenti nella classificazione in tedesco, giapponese, mandarino, francese e spagnolo, sia in ambienti in lingua che in contesti linguistici incrociati.

Benchmarking SetFit

Anche se basato su modelli molto più piccoli rispetto ai metodi esistenti con pochi esempi, SetFit raggiunge prestazioni pari o migliori rispetto ai regimi di apprendimento con pochi esempi all’avanguardia su una varietà di benchmark. Su RAFT, un benchmark di classificazione con pochi esempi, SetFit Roberta (utilizzando il modello all-roberta-large-v1 con 355 milioni di parametri) supera PET e GPT-3. Si posiziona appena al di sotto delle prestazioni umane medie e del modello T-few da 11 miliardi di parametri – un modello 30 volte più grande di SetFit Roberta. SetFit supera anche la linea di base umana in 7 delle 11 attività RAFT.

Metodi di rilievo nella classifica RAFT (aggiornata a settembre 2022)

Su altri dataset, SetFit mostra robustezza su una varietà di attività. Come mostrato nella figura sottostante, con soli 8 esempi per classe, supera tipicamente PERFECT, ADAPET e i transformer vanilla messi a punto. SetFit ottiene anche risultati comparabili a T-Few 3B, nonostante sia privo di prompt e 27 volte più piccolo.

Confronto delle prestazioni di Setfit rispetto ad altri metodi su 3 dataset di classificazione.

Allenamento e inferenza veloci

Confronto dei costi di allenamento e delle prestazioni medie per T-Few 3B e SetFit (MPNet), con 8 esempi etichettati per classe.

Dato che SetFit raggiunge un’alta precisione con modelli relativamente piccoli, è estremamente veloce da allenare e a costi molto inferiori. Ad esempio, l’allenamento di SetFit su un NVIDIA V100 con 8 esempi etichettati richiede solo 30 secondi, a un costo di $0.025. In confronto, l’allenamento di T-Few 3B richiede un NVIDIA A100 e richiede 11 minuti, a un costo di circa $0.7 per lo stesso esperimento – un fattore di 28 volte di più. In effetti, SetFit può essere eseguito su una singola GPU come quelle trovate su Google Colab e puoi persino allenare SetFit su CPU in pochi minuti! Come mostrato nella figura sopra, l’accelerazione di SetFit si accompagna a prestazioni del modello comparabili. Guadagni simili vengono ottenuti anche per l’inferenza e la distillazione del modello SetFit può portare a velocizzazioni di 123 volte 🤯.

Allenamento del proprio modello

Per rendere SetFit accessibile alla comunità, abbiamo creato una piccola libreria setfit che ti consente di allenare i tuoi modelli con poche righe di codice. La prima cosa da fare è installarla eseguendo il seguente comando:

pip install setfit

Successivamente, importiamo SetFitModel e SetFitTrainer, due classi principali che semplificano il processo di allenamento di SetFit:

from datasets import load_dataset
from sentence_transformers.losses import CosineSimilarityLoss

from setfit import SetFitModel, SetFitTrainer

Ora, scarichiamo un dataset di classificazione di testo dal Hugging Face Hub. Utilizzeremo il dataset SentEval-CR, che è un dataset di recensioni dei clienti:

dataset = load_dataset("SetFit/SentEval-CR")

Per simulare uno scenario del mondo reale con solo pochi esempi etichettati, campioniamo 8 esempi per classe dal set di allenamento:

# Seleziona N esempi per classe (8 in questo caso)
train_ds = dataset["train"].shuffle(seed=42).select(range(8 * 2))
test_ds = dataset["test"]

Ora che abbiamo un dataset, il passo successivo è caricare un modello Sentence Transformer preaddestrato dal Hub e istanziare un SetFitTrainer. Qui utilizziamo il modello paraphrase-mpnet-base-v2, che abbiamo trovato ottimo per molti dataset:

# Carica il modello SetFit dal Hub
model = SetFitModel.from_pretrained("sentence-transformers/paraphrase-mpnet-base-v2")

# Crea il trainer
trainer = SetFitTrainer(
    model=model,
    train_dataset=train_ds,
    eval_dataset=test_ds,
    loss_class=CosineSimilarityLoss,
    batch_size=16,
    num_iterations=20, # Numero di coppie di testo da generare per l'apprendimento contrastivo
    num_epochs=1 # Numero di epoche da utilizzare per l'apprendimento contrastivo
)

L’ultimo passaggio è allenare e valutare il modello:

# Allena e valuta!
trainer.train()
metrics = trainer.evaluate()

E questo è tutto – hai ora allenato il tuo primo modello SetFit! Non dimenticare di caricare il tuo modello allenato sul Hub 🙂

# Carica il modello sul Hub
# Assicurati di aver effettuato l'accesso con huggingface-cli login prima
trainer.push_to_hub("il-mio-eccezionale-modello-setfit")

Mentre questo esempio ha mostrato come farlo con un tipo specifico di modello di base, qualsiasi modello Sentence Transformer potrebbe essere sostituito per ottenere prestazioni e compiti diversi. Ad esempio, l’utilizzo di un corpo multilingue di Sentence Transformer può estendere la classificazione a pochi esempi a impostazioni multilingue.

Passi successivi

Abbiamo dimostrato che SetFit è un metodo efficace per compiti di classificazione a pochi esempi. Nei prossimi mesi, esploreremo quanto bene il metodo si generalizza a compiti come l’inferenza del linguaggio naturale e la classificazione dei token. Nel frattempo, siamo entusiasti di vedere come i professionisti del settore applicano SetFit ai loro casi d’uso – se hai domande o feedback, apri una segnalazione sul nostro repository GitHub 🤗.

Buon apprendimento a pochi esempi!