Formatowanie Gemma i instrukcje dotyczące systemu

Formatowanie na potrzeby dostrajania instrukcji

Modele dostrojone pod kątem instrukcji (IT) są trenowane z użyciem określonego formatera, który wszystkie przykłady dostrajania zawierają dodatkowe informacje, zarówno na stronie w czasie trenowania i wnioskowania. Narzędzie formatujące ma 2 cele:

  1. Wskazywanie ról w wątku, np. systemu, użytkownika lub asystenta.
  2. zdefiniowanie zakrętów w rozmowie, zwłaszcza w trybie wieloetapowym, rozmowy.

Poniżej przedstawiamy tokeny kontrolne używane przez Gemma i ich przypadki użycia. Notatka w których tokeny kontrolne są zarezerwowane i specyficzne dla naszego tokenizatora.

  • Token oznaczający zmianę użytkownika: user
  • Token wskazujący zmianę modelu: model
  • Token wskazujący początek zakrętu okna dialogowego: <start_of_turn>
  • Token wskazujący koniec tury okna: <end_of_turn>

Oto przykładowy dialog:

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

Token "<end_of_turn>\n" jest separatorem zakrętów, a prefiks promptu to "<start_of_turn>model\n" Oznacza to, że jeśli chcesz wywołać prompt dla modelu typu „Co to jest reguła Cramera?” model w następujący sposób:

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

Pamiętaj, że jeśli chcesz dostroić własne, wytrenowane modele Gemma, danych, możesz używać dowolnego schematu do obsługi tokenów kontrolnych, o ile jest on spójny między trenowaniem a przypadkami użycia wnioskowania.

Instrukcje systemowe

Do nadzorowanego dostrajania (SFT) i uczenia się przez wzmacnianie przez użytkowników (RLHF), modele nie zostały wytrenowane za pomocą instrukcji systemowych. Jako jedynymi odpowiednimi tokenami formatowania Gemma są <start_of_turn>, <end_of_turn>, user i model. Na przykład:

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

Formatowanie zadań FIM

Warianty CodeGemma 2B i 7B są specjalnie dostosowane pod kątem zadań uzupełniania kodu.

Są one trenowane na 4 tokenach sterujących formatowaniem, służą do tworzenia promptów w modelu na potrzeby zadań związanych z kodowaniem w środkowej części (FIM).

KontekstToken
Prefiks FIM <|fim_prefix|>
Sufiks FIM <|fim_suffix|>
Środek FIM <|fim_middle|>
Separator plików <|file_separator|>

Użyj tokenów FIM, aby określić położenie kursora i okna wokół niego. ją, by CodeGemma mogła uzupełnić kod. Używaj tokena separatora plików dla kontekst wieloplikowy.

Przykład: tworzenie promptu FIM

W tej sekcji wykorzystano przykład z kodu Keras CodeGemma krótkie wprowadzenie jak utworzyć prompt dla zadań FIM.

Przeanalizuj ten kod:

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

| wskazuje położenie kursora, czyli miejsce, w którym musi znaleźć się kod. . Zwróć uwagę, że przed kursorem znajduje się spacja, a wiersze 1 i 2 mają na końcu znaki przejścia do nowej linii.

Przedrostek brzmi:

import

z jedną spacją na końcu.

Sufiks to:

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

z nowym wierszem na początku.

Prompt powinien mieć formę:

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

Uwaga:

  • Między tokenami FIM a prefiksem nie może być dodatkowych spacji i sufiks
  • Środkowy token FIM powinien znajdować się na końcu, aby przygotować model do kontynuowania wypełniam
  • Prefiks lub sufiks może być pusty w zależności od tego, gdzie kursor lub to, ile kontekstu chcesz udostępnić modelowi. z

Interpretowanie danych wyjściowych modelu

Odpowiedź modelu w powyższym przykładzie to:

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

Model powtarza prompt wejściowy i podaje sys jako uzupełnienie kodu.

Jeśli używasz modeli CodeGemma do zadań FIM, wysyłaj strumieniowo tokeny odpowiedzi i używaj tokeny FIM lub separatora plików jako separatory, aby zatrzymać strumieniowanie i pobrać w wyniku uzupełnienia kodu.