Format de la gemma et instructions système

Mise en forme pour le réglage des instructions

Les modèles informatiques sont entraînés avec un formateur spécifique qui annote tous les exemples de réglage d'instructions avec des informations supplémentaires, l'entraînement et l'inférence. L'outil de mise en forme a deux fonctions:

  1. Indiquer des rôles dans une conversation, tels que system (système), user (utilisateur) ou assistant.
  2. Délimiter le tour d'une conversation, en particulier dans le cas d'un multitour conversationnelle.

Nous indiquons ci-dessous les jetons de contrôle utilisés par Gemma et leurs cas d'utilisation. Remarque que les jetons de contrôle sont réservés et spécifiques à notre fonction de tokenisation.

  • Jeton indiquant le tour de l'utilisateur: user
  • Jeton indiquant un tour de modèle: model
  • Jeton indiquant le début du tour de dialogue: <start_of_turn>
  • Jeton indiquant la fin du tour de dialogue: <end_of_turn>

Voici un exemple de boîte de dialogue:

<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>

Le jeton "<end_of_turn>\n" est le séparateur de tour et le préfixe de l'invite est "<start_of_turn>model\n" Autrement dit, si vous souhaitez que le modèle avec une question comme "Qu'est-ce que la règle de Cramer ?", vous devriez plutôt alimenter comme suit:

"<start_of_turn>user
What is Cramer's Rule?<end_of_turn>
<start_of_turn>model"

Notez que si vous souhaitez affiner les modèles Gemma de base pré-entraînés avec vos propres modèles, des données, vous pouvez utiliser n'importe quel schéma pour les jetons de contrôle, à condition qu'il soit cohérent entre les cas d'utilisation d'entraînement et d'inférence.

Instructions système

Pour l'affinage supervisé (SFT) et l'apprentissage par renforcement (RLHF), les modèles n'ont pas été entraînés à l'aide d'instructions système. En tant que résultat, les seuls jetons de formatage pertinents pour Gemma sont <start_of_turn>, <end_of_turn>, user et model. Exemple :

<start_of_turn>user
What is Cramer's Rule?<end_of_turn>
<start_of_turn>model
Cramer's Rule is ...<end_of_turn>

Formatage pour les tâches FIM

Les variantes 2B et 7B de CodeGemma sont spécialement conçus pour les tâches de remplissage de code.

Plus précisément, ils sont entraînés sur quatre jetons de contrôle du formatage pour vous aider à construire des requêtes de modèle pour les tâches de codage FIM.

ContexteJeton
Préfixe FIM <|fim_prefix|>
Suffixe FIM <|fim_suffix|>
FIM (intermédiaire) <|fim_middle|>
Séparateur de fichiers <|file_separator|>

Utilisez les jetons FIM pour définir l'emplacement du curseur et le contexte environnant autour pour que CodeGemma effectue le remplissage du code. Utilisez le jeton de séparateur de fichiers pour contextes multifichiers.

Exemple - Construire une requête FIM

Cette section réutilise l'exemple dans le code Gemma de Keras CodeGemma de démarrage rapide pour afficher comment construire une invite pour des tâches FIM.

Prenons l'exemple de code suivant :

import |⏎ # Line 1
if __name__ == '__main__':⏎ # Line 2
   sys.exit(0) # Line 3

| indique l'emplacement du curseur, c'est-à-dire l'endroit où le code doit se trouver. terminé. Notez qu'il y a un espace avant le curseur et que les lignes 1 et 2 avoir des retours chariot à la fin.

Le préfixe est alors,

import

avec un espace à la fin.

Le suffixe est:

⏎
if __name__ == '__main__':⏎
   sys.exit(0)

par une nouvelle ligne au début.

La requête doit être construite comme suit:

<|fim_prefix|>import <|fim_suffix|>⏎
if __name == '__main__':⏎
   sys.exit(0)<|fim_middle|>

Remarques :

  • Il ne doit pas y avoir d'espaces supplémentaires entre les jetons FIM et le préfixe et le suffixe
  • Le jeton FIM central doit se trouver à la fin pour préparer le modèle à continuer remplir
  • Le préfixe ou le suffixe peut être vide selon l'emplacement du curseur se trouve actuellement dans le fichier, ou la quantité de contexte que vous voulez fournir au modèle par

Comprendre la sortie du modèle

Dans l'exemple ci-dessus, la réponse du modèle serait la suivante:

<|fim_prefix|>import <|fim_suffix|>⏎
if __name__ == "__main__":\n    sys.exit(0)<|fim_middle|>sys\n<|file_separator|>

Le modèle répète la requête d'entrée et fournit sys comme saisie automatique de code.

Lorsque vous utilisez les modèles CodeGemma pour des tâches FIM, diffusez les jetons de réponse et utilisez les jetons FIM ou de séparateur de fichiers comme délimiteurs pour arrêter la diffusion et obtenir le l'achèvement du code qui en résulte.