Formattazione dell'ottimizzazione delle istruzioni
I modelli ottimizzati per le istruzioni (IT) vengono addestrati con uno specifico formattatore che annota tutti gli esempi di ottimizzazione delle istruzioni con informazioni aggiuntive, entrambi durante l'addestramento e l'inferenza. Il formattatore ha due scopi:
- Indicare i ruoli in una conversazione, ad esempio sistema, utente o i ruoli di assistente.
- Delineare i turni in una conversazione, soprattutto in più turni conversazione.
Di seguito specifichiamo i token di controllo utilizzati da Gemma e i relativi casi d'uso. Nota che i token di controllo siano riservati e specifici per il nostro tokenizzatore.
- Token per indicare il turno di un utente:
user
- Token per indicare il turno di un modello:
model
- Token per indicare l'inizio della svolta del dialogo:
<start_of_turn>
- Token per indicare la fine della svolta del dialogo:
<end_of_turn>
Ecco una finestra di dialogo di esempio:
<start_of_turn>user
knock knock<end_of_turn>
<start_of_turn>model
who is there<end_of_turn>
<start_of_turn>user
Gemma<end_of_turn>
<start_of_turn>model
Gemma who?<end_of_turn>
Il token "<end_of_turn>\n"
è il separatore di svolta, mentre il prefisso del prompt è
"<start_of_turn>model\n"
. Ciò significa che se vuoi chiedere al modello
con una domanda come "Qual è la regola di Cramer?", dovresti invece fornire ai
modello come segue:
"<start_of_turn>user
What is Cramer's Rule?<end_of_turn>
<start_of_turn>model"
Tieni presente che se vuoi perfezionare i modelli Gemma preaddestrati di base con dati, puoi utilizzare uno qualsiasi di questi schemi per i token di controllo, purché sia coerente tra i casi d'uso di addestramento e inferenza.
Istruzioni di sistema
Sia per il perfezionamento supervisionato (SFT) che per l'apprendimento per rinforzo da parte di esseri umani
(RLHF), il modello non è stato addestrato con le istruzioni di sistema. Come
risultato, gli unici token di formattazione pertinenti per Gemma sono <start_of_turn>
,
<end_of_turn>
, user
e model
. Ad esempio:
<start_of_turn>user
What is Cramer's Rule?<end_of_turn>
<start_of_turn>model
Cramer's Rule is ...<end_of_turn>
Formattazione delle attività FIM
Le varianti CodeGemma 2B e 7B sono ottimizzati in modo specifico per le attività di compilazione del codice.
Nello specifico, vengono addestrati su quattro token di controllo della formattazione che puoi per costruire prompt del modello per attività di programmazione FIM (fill-in-the- middle).
Contesto | Token |
---|---|
Prefisso FIM | <|fim_prefix|> |
Suffisso FIM | <|fim_suffix|> |
FIM centrale | <|fim_middle|> |
Separatore file | <|file_separator|> |
Utilizza i token FIM per definire la posizione del cursore e il contesto circostante che CodeGemma esegua il riempimento del codice. Utilizza il token separatore di file per contesti multifile.
Esempio: crea un prompt FIM
Questa sezione riutilizza l'esempio nel file Keras CodeGemma rapida per mostrare a creare un prompt per attività FIM.
Considera il seguente codice:
import |⏎ # Line 1
if __name__ == '__main__':⏎ # Line 2
sys.exit(0) # Line 3
|
indica la posizione del cursore, ovvero dove deve trovarsi il codice
completata. Tieni presente che c'è uno spazio prima del cursore e che le righe 1 e 2
ritorni a capo alla fine.
Il prefisso è
import
con uno spazio alla fine.
Il suffisso è:
⏎
if __name__ == '__main__':⏎
sys.exit(0)
con una nuova riga all'inizio.
Il prompt dovrebbe essere costruito come:
<|fim_prefix|>import <|fim_suffix|>⏎
if __name == '__main__':⏎
sys.exit(0)<|fim_middle|>
Ricorda:
- Non devono essere presenti spazi bianchi aggiuntivi tra i token FIM e il prefisso. e suffisso
- Il token centrale FIM deve essere alla fine per preparare il modello a continuare compilare
- Il prefisso o il suffisso potrebbero essere vuoti a seconda di dove si trova il cursore si trova attualmente nel file o a quanto contesto vuoi fornire al modello con
Informazioni sull'output del modello
La risposta del modello per l'esempio precedente sarebbe:
<|fim_prefix|>import <|fim_suffix|>⏎
if __name__ == "__main__":\n sys.exit(0)<|fim_middle|>sys\n<|file_separator|>
Il modello ripete il prompt di input e fornisce sys
come completamento del codice.
Quando utilizzi i modelli CodeGemma per le attività FIM, invia i token di risposta in streaming e utilizza il token FIM o il separatore di file come delimitatori per interrompere il flusso di dati e ottenere il completamento del codice risultante.