Gemma-Formatierung und Systemanleitung

Formatierung zur Abstimmung der Anweisungen

IT-Modelle werden mit einem speziellen Formatierer trainiert, der alle Beispiele zur Anweisungsabstimmung mit zusätzlichen Informationen annotiert, sowohl zum Zeitpunkt des Trainings als auch der Inferenz. Der Formatter hat zwei Zwecke:

  1. Rollen in einer Unterhaltung angeben, z. B. system-, user- oder assistant-Rollen
  2. Das Abgrenzen von Abzweigungen in einer Unterhaltung, insbesondere in einer Unterhaltung mit mehreren Schritten.

Unten finden Sie die von Gemma verwendeten Kontrolltokens und ihre Anwendungsfälle. Beachten Sie, dass die Steuertokens in unserem Tokenizer reserviert und spezifisch für unseren Tokenizer sind.

  • Token, das anzeigt, dass ein Nutzer am Zug ist: user
  • Token für eine Modellabführung: model
  • Token für den Beginn der Dialogrunde: <start_of_turn>
  • Token für das Ende 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 Eingabeaufforderungspräfix lautet "<start_of_turn>model\n". Wenn Sie also das Modell mit einer Frage wie „Was ist die Cramer-Regel?“ auffordern möchten, müssen Sie stattdessen Folgendes in das Modell eingeben:

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

Wenn Sie die vortrainierten Basismodellen von Gemma mit Ihren eigenen Daten optimieren möchten, können Sie ein solches Schema für Steuertokens verwenden, solange es zwischen den Anwendungsfällen für Trainings und Inferenz konsistent ist.

Systemanweisung

Sowohl für überwachtes Feinabstimmung (überwachtes Feinabstimmung) als auch für Reinforcement Learning from Human Feedback (RLHF) wurden die Modelle nicht mit Systemanweisungen trainiert. Daher 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>

Formatierung für FIM-Aufgaben

Die Varianten 2B und 7B von CodeGemma sind speziell auf Aufgaben zur Codeausfüllung abgestimmt.

Insbesondere werden sie mit vier Formatierungskontrolltokens trainiert, mit denen Sie Modell-Prompts für FIM-Codierungsaufgaben (Fill-in-the-Middle) erstellen können.

Kontext Token
FIM-Präfix `<
FIM-Suffix `<
FIM (Mitte) `<
Dateitrennzeichen `<

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

Beispiel – FIM-Prompt erstellen

In diesem Abschnitt wird das Beispiel aus der Keras CodeGemma-Kurzanleitung verwendet, um Ihnen zu zeigen, 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

Das | gibt die Position des Cursors an, an der der Code vervollständigt werden muss. Vor dem Cursor befindet sich ein Leerzeichen und die Zeilen 1 und 2 haben am Ende Zeilenumbrüche.

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 und Suffix dürfen keine zusätzlichen Leerzeichen stehen.
  • Das mittlere FIM-Token sollte am Ende stehen, um das Modell vorzubereiten und weiter auszufüllen.
  • Das Präfix oder Suffix kann leer sein, je nachdem, wo sich der Cursor derzeit in der Datei befindet oder wie viel Kontext Sie dem Modell bereitstellen möchten.

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 die Eingabeaufforderung und stellt sys als Codevervollständigung bereit.

Wenn Sie die CodeGemma-Modelle für FIM-Aufgaben verwenden, streamen Sie Antworttokens und verwenden Sie die FIM- oder Dateitrennzeichen als Trennzeichen, um das Streaming zu beenden und die resultierende Codevervollständigung zu erhalten.