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:
- Wskazywanie ról w wątku, np. systemu, użytkownika lub asystenta.
- 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).
Kontekst | Token |
---|---|
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.