Il problema
Le conversazioni reali raramente consistono in una sola domanda e una sola risposta. Una chat di supporto potrebbe arrivare a dieci scambi: un saluto, una domanda di chiarimento, due risposte parziali e una soluzione finale. Alcune di queste risposte dell'assistente meritano di essere apprese, altre no. Un formato di addestramento deve esprimere sia il contesto completo sia la scelta di quali risposte contino.
Approccio 1: pesi per messaggio
Alcuni formati consentono a ogni messaggio dell'assistente di avere un peso. L'intera conversazione è un unico record; le risposte contrassegnate con weight: 1 vengono apprese, mentre quelle contrassegnate con weight: 0 fungono solo da contesto — lette, ma non valutate.
{"messages": [
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hello! How can I help?", "weight": 0},
{"role": "user", "content": "Export my report as PDF"},
{"role": "assistant", "content": "Open the report, click Export → PDF…", "weight": 1}
]}Questa è l'opzione efficiente. Ogni record viene elaborato una volta, tutti i target in una conversazione ne condividono il contesto e la scelta di cosa apprendere è esatta.
Approccio 2: un record per target
I formati privi di pesi possono solo indicare: “ecco una conversazione; impara le risposte dell'assistente”. Per apprendere una risposta specifica, la conversazione viene interrotta subito dopo di essa e trascritta come record a sé stante. Una conversazione con tre obiettivi diventa tre record, ognuno più lungo del precedente.
{"messages": [
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hello! How can I help?"},
{"role": "user", "content": "Export my report as PDF"},
{"role": "assistant", "content": "Open the report, click Export → PDF…"}
]}Ci sono due effetti collaterali. Qualsiasi risposta precedente dell'assistente all'interno di un record viene anch'essa appresa, poiché il formato non può contrassegnarla solo come contesto, incluse le risposte che non sono state scelte. Inoltre, la parte iniziale della conversazione appare in diversi record, quindi viene elaborata, e pagata, più volte.
- Una conversazione prevede quattro scambi di circa 250 token ciascuno. Le risposte 2 e 4 sono i target; le risposte 1 e 3 non lo sono.
- Con i pesi: un record di circa 1.000 token. Le risposte 2 e 4 vengono apprese una volta ciascuna; la 1 e la 3 fungono da contesto.
- Senza pesi: un record interrotto dopo la risposta 2 (circa 500 token) e uno interrotto dopo la risposta 4 (circa 1.000 token) — 1.500 token in totale, il 50% in più.
- Ogni risposta dell'assistente in un record viene appresa: le risposte 1 e 2 due volte, le risposte 3 e 4 una volta. Le risposte 1 e 3, anche se non scelte, vengono comunque apprese.
Quando è importante
La differenza è minima quando le conversazioni sono brevi o ogni risposta dell'assistente è valida. Diventa rilevante quando le conversazioni sono lunghe, quando le prime risposte sono scadenti (un primo tentativo errato corretto in seguito) o quando si omettono deliberatamente delle risposte. Con un provider che supporta i pesi si ottiene esattamente ciò che si è scelto; con uno che non li supporta, vale la pena correggere le risposte deboli prima dell'addestramento.
Errori comuni
- Presumere che una risposta non contrassegnata non verrà mai appresa, a prescindere dal formato del provider.
- Lasciare una risposta iniziale errata in una lunga conversazione quando il provider non può escluderla.
- Confrontare il conteggio dei token tra provider senza tenere conto del contesto ripetuto.
- Suddividere i record di una singola conversazione tra addestramento e convalida; per questo motivo la suddivisione viene effettuata per conversazione.
Riferimenti e letture di approfondimento
Le fonti esterne si aprono in una nuova scheda.
- 01SFT TrainerHugging Face TRL docs · huggingface.coAddestramento esclusivo sui turni dell'assistente all'interno di un'intera conversazione.
- 02Chat templatesHugging Face Transformers docs · huggingface.coCome le chat multi-turno vengono strutturate per un modello e come vengono individuati i turni dell'assistente.
- 03Supervised fine-tuningOpenAI API docs · developers.openai.comI dati di addestramento in formato chat di un provider, inclusi gli esempi multi-turno.
- 04Prepare supervised fine-tuning data for Gemini modelsGoogle Cloud documentation · docs.cloud.google.comIl formato dei contenuti con i ruoli dell'utente e del modello.