Padding Large Language Models — Esempi con Llama 2

Padding Large Language Models — Esempi Llama 2

Migliori pratiche per il riempimento degli esempi di addestramento per i modelli di lingua causali

Immagine dell'autore - Basata su un'immagine da Pixabay

Il riempimento è uno degli aspetti meno documentati dei modelli di lingua di grandi dimensioni (LLM). Perché? Semplicemente perché di solito i LLM vengono pre-addestrati senza riempimento.

Tuttavia, per il fine-tuning dei LLM su set di dati personalizzati, il riempimento è necessario. Non riuscire a riempire correttamente gli esempi di addestramento può comportare diversi tipi di comportamenti inaspettati: perdita nulla o infinita durante l’addestramento, sovra-generazione o output vuoto durante l’inferenza, sono tutti sintomi di un riempimento errato.

In questo articolo, spiego prima cos’è il riempimento e perché è necessario. Poi, mostro come trovare la strategia di riempimento corretta per un LLM pre-addestrato senza riempimento. Propongo due soluzioni diverse per aggiungere il supporto al riempimento ai LLM utilizzando Transformers di Hugging Face.

Verso la fine dell’articolo, fornisco anche esempi che mostrano come riempire correttamente gli esempi di addestramento per Llama 2.

Dopo aver letto questo articolo, dovresti essere in grado di capire da solo come riempire gli esempi di addestramento per i LLM senza dover leggere la loro documentazione o tutorial.

Riempire e raggruppare

Cos’è il riempimento e perché lo facciamo?

Prendiamo un esempio che vogliamo utilizzare per il fine-tuning di un LLM.

esempio = "Tu non sei un chatbot."

Dobbiamo trasformare questo esempio in una sequenza di token. Le librerie, come Transformers, di solito effettuano la tokenizzazione seguendo questi passaggi:

  • Segmentare l’esempio in sotto-parole secondo un dato vocabolario:
esempio = ["▁Tu", "▁non", "▁sei", "▁un", "▁chat", "bot", "."]
  • Sostituire le parole con il loro indice dal vocabolario per ottenere una sequenza di interi:
esempio = [887, 526, 451, 263, 13563, 7451, 29889]
  • Aggiungere token speciali alla sequenza: token BOS, token EOS, token UNK, token PAD, ecc.
esempio = [1, 887, 526, 451, 263, 13563, 7451, 29889]

Nota: Per questo esempio, utilizzo il tokenizer di Llama 2. Vedremo di seguito nel dettaglio come farlo.