Preparare i dati per ottimizzare un modello di completamento della chat
L'ottimizzazione prevede la combinazione di un modello di base appropriato da usare come base e con un set di dati di training che include richieste di esempio e risposte che il modello può apprendere. Questa unità illustra il formato dei dati di training, la preparazione dei set di dati dai dati reali e la generazione di dati sintetici per l'ottimizzazione.
Comprendere il formato dei dati di formazione
Quando si decide di ottimizzare un modello linguistico, è necessario identificare il set di dati che è possibile usare per ottimizzare il modello.
Analogamente a qualsiasi modello di Machine Learning, la qualità del set di dati incide notevolmente sulla qualità del modello. Anche se sono necessari meno dati rispetto a quando si esegue il training di un modello linguistico da zero, potrebbero comunque essere necessari dati sufficienti per ottimizzare la coerenza del comportamento del modello desiderato. La quantità di dati necessari dipende dal caso d'uso.
Quando si ottimizza un modello linguistico per il completamento della chat, i dati usati per ottimizzare il modello sono una raccolta di conversazioni di esempio. In particolare, i dati devono contenere tre componenti:
- Il messaggio di sistema
- Il messaggio dell'utente
- Risposta dell'assistente
Le tre variabili si trovano in un file JSON Lines o JSONL. Ad esempio, una riga in un set di dati di questo tipo potrebbe essere simile alla seguente:
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
Preparare i set di dati dai dati reali
Il set di dati deve mostrare il comportamento ideale del modello. È possibile creare questo set di dati in base alla cronologia della chat di un'applicazione di chat di cui si dispone. Alcuni aspetti da tenere presenti quando si usano dati reali sono i seguenti:
- Rimuovere eventuali dati personali o sensibili.
- Non concentrarsi solo sulla creazione di un set di dati di training di grandi dimensioni, ma assicurarsi anche che il set di dati includa esempi diversificati.
È possibile includere più turni di una conversazione in una singola riga nel set di dati. Se si desidera ottimizzare solo messaggi dell'assistente specifici, è possibile usare la coppia chiave-valore weight. Quando il peso è impostato su 0, il messaggio viene ignorato, mentre quando è impostato su 1, il messaggio viene incluso per l'addestramento.
Esempio di un formato di file di chat a più turni con pesi:
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
Generare dati sintetici per l'ottimizzazione
La creazione manuale di set di dati di training di alta qualità può richiedere molto tempo e costi elevati. Microsoft Foundry offre funzionalità di generazione di dati sintetici che consentono di creare dati di training da documenti di riferimento o specifiche api.
La generazione di dati sintetici è particolarmente utile quando:
- I dati reali sono scarsi o difficili da raccogliere
- È necessario mantenere la privacy mantenendo al tempo stesso una struttura utile
- Si vogliono generare dati specifici del dominio da documenti o codice esistenti
- Si vuole ridurre il costo rispetto alla raccolta manuale dei dati
Scegliere generatori di dati sintetici
Microsoft Foundry offre due tipi di generatori di dati sintetici:
Generatore semplice di domande e risposte: converte i documenti di settore (PDF, Markdown o testo normale fino a 20 MB) in coppie di domande e risposte per il perfezionamento. È possibile configurare il tipo di domanda:
- Risposta lunga: genera domande che richiedono un ragionamento analitico nella risposta al modello
- Risposta breve: genera domande incentrate sulla brevità effettiva
Generatore di utilizzo strumenti: crea conversazioni a più turni con chiamate a strumenti in base alla superficie dell'API. Richiede una specifica OpenAPI 3.0.x o 3.1.x valida (formato JSON, fino a 20 MB) che descrive le API che si vuole che il modello impari a chiamare come strumenti.
Generare dati sintetici nel portale
Per generare dati sintetici in Microsoft Foundry:
- Passare a Dati > Generazione dati sintetici nel portale
- Selezionare Genera dati
- Scegliere un tipo di attività (utilizzo semplice di domande e risposte o strumenti)
- Configurare i parametri di generazione, se applicabile
- Caricare il file di riferimento
- Specificare il numero di campioni da generare (compreso tra 50 e 1.000)
- Selezionare il modello da usare per la generazione di dati
- Facoltativamente, abilitare una divisione 80/20 tra training e convalida
- Inviare il lavoro
Il set di dati generato viene formattato automaticamente come file JSONL compatibili con i flussi di lavoro di ottimizzazione di Microsoft Foundry. È possibile scaricare il set di dati per la revisione o usarlo direttamente nell'ottimizzazione.
Applicare le procedure consigliate per i dati sintetici
Per ottenere risultati ottimali quando si usano dati sintetici:
- Usare file di riferimento di alta qualità: la qualità del file di riferimento influisce direttamente sui dati generati. Usare documenti pertinenti e ben strutturati con formattazione chiara ed evitare un rumore eccessivo o informazioni irrilevanti.
- Iniziare con dimensioni ridotte e iterazioni: iniziare con una dimensione di campione più piccola per valutare la qualità, quindi aumentare le prestazioni dopo aver esaminato e affinato l'approccio.
- Combinare dati reali: quando possibile, combinare dati sintetici con esempi reali per migliorare le prestazioni del modello e la generalizzazione.
- Sperimentare gli iperparametri: quando si ottimizzano i dati sintetici, è necessario modificare le frequenze di apprendimento e altri parametri in modo diverso rispetto ai dati reali per evitare l'overfitting.
- Monitorare le prestazioni: valutare regolarmente il modello ottimizzato per le attività reali per assicurarsi che soddisfi i requisiti.
Quando si prepara il set di dati per ottimizzare un modello linguistico, è necessario comprendere i comportamenti del modello desiderati, creare un set di dati in formato JSONL (manualmente o tramite la generazione sintetica) e assicurarsi che gli esempi inclusi siano di qualità elevata e diversificati. Preparando attentamente il set di dati, è possibile che il modello ottimizzato migliori le prestazioni dell'applicazione di chat.