Gemma-Formatierung und Systemanleitung

Formatierung für die Anweisungsabstimmung

IT-Modelle werden mit einem bestimmten Formatierer trainiert, der versieht alle Beispiele für die Feinabstimmung von Anweisungen mit zusätzlichen Informationen, sowohl unter Trainings- und Inferenzzeit. Der Formatierer hat zwei Zwecke:

  1. Rollen in einer Unterhaltung angeben, z. B. system, user oder Assistant-Rollen.
  2. Abgrenzen einer Unterhaltung, insbesondere in mehreren Runden Gespräch.

Unten werden die von Gemma verwendeten Kontrolltokens und ihre Anwendungsfälle angegeben. Hinweis dass die Kontroll-Tokens in unserem Tokenizer reserviert und für ihn spezifisch sind.

  • Token, das angibt, wann ein Nutzer an der Reihe ist: user
  • Token zum Kennzeichnen einer Modellfahrt: model
  • Token, das den Beginn der Dialogrunde anzeigt: <start_of_turn>
  • Token zur Anzeige des Endes der Dialogrunde: <end_of_turn>

Hier ist ein Beispieldialog:

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

Das Token "<end_of_turn>\n" ist das Abbiegetrennzeichen und das Präfix der Eingabeaufforderung ist "<start_of_turn>model\n". Wenn Sie also das Modell auffordern möchten, Fragen wie „Was ist die Cramer's Regel?“ stellen, sollten Sie stattdessen die wie folgt aussehen:

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

Wenn Sie die grundlegenden vortrainierten Gemma-Modelle mit Ihren eigenen können Sie ein beliebiges Schema für Kontrolltokens verwenden, solange es einheitlich ist. zwischen Trainings- und Inferenz-Anwendungsfällen.

Systemanweisungen

Für überwachte Feinabstimmungen und bestärkendes Lernen vom Menschen Feedback (RLHF) haben, wurden die Modelle nicht mit Systemanweisungen trainiert. Als sind die einzigen relevanten Formatierungstokens für Gemma <start_of_turn>, <end_of_turn>, user und model. Beispiel:

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

FIM-Aufgaben formatieren

Die Varianten CodeGemma 2B und 7B die speziell für Aufgaben zur Code-Füllung optimiert sind.

Insbesondere werden sie mit vier Formatierungssteuerungstokens trainiert, die Sie verwenden, um Modell-Prompts für FIM-Programmieraufgaben (Fill-in-the-Middle) zu erstellen.

KontextToken
FIM-Präfix <|fim_prefix|>
FIM-Suffix <|fim_suffix|>
FIM mittig <|fim_middle|>
Dateitrennzeichen <|file_separator|>

Verwende die FIM-Tokens, um die Cursorposition und den umgebenden Kontext zu definieren damit CodeGemma den Code einfüllt. Verwenden Sie das Dateitrennzeichen-Token für Kontexte mit mehreren Dateien.

Beispiel – FIM-Prompt erstellen

In diesem Abschnitt wird das Beispiel in Keras CodeGemma wiederverwendet. wie Sie einen Prompt für FIM-Aufgaben erstellen.

Betrachten wir den folgenden Code:

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

| gibt die Position des Cursors an, an der der Code eingefügt werden muss. abgeschlossen. Beachten Sie, dass sich vor dem Cursor ein Leerzeichen befindet und dass die Zeilen 1 und 2 mit Zeilenumbrüchen am Ende.

Das Präfix lautet dann

import

mit einem Leerzeichen am Ende.

Das Suffix lautet:

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

mit einer neuen Zeile am Anfang.

Der Prompt sollte so aufgebaut sein:

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

Hinweis:

  • Zwischen den FIM-Tokens und dem Präfix dürfen keine zusätzlichen Leerzeichen stehen und Suffix
  • Das mittlere FIM-Token sollte sich am Ende befinden, um das Modell zum Fortfahren vorzubereiten Ausfüllen
  • Das Präfix oder Suffix kann leer sein, je nachdem, wo sich der Cursor sich aktuell in der Datei befindet oder wie viel Kontext Sie dem Modell zur Verfügung stellen möchten. mit

Modellausgabe verstehen

Die Modellantwort für das obige Beispiel würde so aussehen:

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

Das Modell wiederholt den Eingabe-Prompt und stellt sys als Codevervollständigung bereit.

Wenn Sie die CodeGemma-Modelle für FIM-Aufgaben verwenden, streamen Sie Antworttokens und verwenden die FIM- oder Dateitrennzeichen-Tokens als Trennzeichen, um das Streaming zu stoppen und die der daraus resultierenden Codevervollständigung.