Formatowanie na potrzeby dostrajania instrukcji
Modele dostosowywane do instrukcji (IT) są trenowane za pomocą specjalnego formatera, który do wszystkich przykładów dostrajania instrukcji dołącza dodatkowe informacje, zarówno w czasie treningu, jak i wykonywania wnioskowania. Formatowanie służy do 2 celów:
- Wskazywanie ról w rozmowie, takich jak system, użytkownik czy asystent.
- oddzielanie od siebie poszczególnych wypowiedzi w rozmowie, zwłaszcza w rozmowie wieloetapowej;
Poniżej przedstawiamy tokeny kontrolne używane przez Gemma oraz ich przypadki użycia. Pamiętaj, że tokeny kontrolne są zarezerwowane w tokenizerze i są specyficzne dla niego.
- Token wskazujący kolejność użytkownika:
user
- Token wskazujący kolejność modelu:
model
- Token wskazujący początek okna dialogowego:
<start_of_turn>
- Token wskazujący koniec tury dialogu:
<end_of_turn>
Oto przykład dialogu:
<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"
to separator zdań, a prefiks prompta to "<start_of_turn>model\n"
. Oznacza to, że jeśli chcesz zadać modelowi pytanie, np. „Co to jest reguła Cramera?”, podaj mu dane w taki sposób:
"<start_of_turn>user
What is Cramer's Rule?<end_of_turn>
<start_of_turn>model"
Pamiętaj, że jeśli chcesz dostosować wstępnie wytrenowane modele Gemma do własnych danych, możesz użyć dowolnego schematu dla tokenów kontrolnych, o ile jest on spójny w przypadku przypadków użycia treningu i wykorzystywania wnioskowania.
Instrukcje systemowe
W przypadku dostrajania nadzorowanego (SFT) i uczenia się przez wzmacnianie na podstawie opinii użytkowników (RLHF) modele nie były trenowane przy użyciu instrukcji systemowych. W rezultacie jedynymi odpowiednimi tokenami formatowania dla 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
Wersje CodeGemma 2B i 7B są specjalnie dostosowane do zadań polegających na wypełnianiu kodu.
W szczególności są one trenowane na podstawie 4 tokenów sterujących formatowaniem, które możesz wykorzystać do tworzenia promptów modelu na potrzeby zadań polegających na uzupełnianiu kodu.
Kontekst | Token |
---|---|
Prefiks FIM | <|fim_prefix|> |
Sufiks FIM | <|fim_suffix|> |
FIM środkowy | <|fim_middle|> |
Separator pliku | <|file_separator|> |
Użyj tokenów FIM, aby określić położenie kursora i otaczający go kontekst, aby CodeGemma mogła wypełnić kod. Użyj tokena separatora plików w kontekście wielu plików.
Przykład: tworzenie promptu FIM
W tej sekcji używamy przykładu z Keras CodeGemma quickstart, aby pokazać, jak tworzyć prompty do zadań FIM.
Rozważ ten kod:
import |⏎ # Line 1
if __name__ == '__main__':⏎ # Line 2
sys.exit(0) # Line 3
|
wskazuje kursor, w którym miejscu należy wpisać kod. Zwróć uwagę, że przed kursorem jest spacja, a wiersze 1 i 2 mają na końcu powrotu karetki.
Prefiks jest wtedy,
import
z jedną spacją na końcu.
Sufiks:
⏎
if __name__ == '__main__':⏎
sys.exit(0)
z nową linią na początku.
Prośba powinna być sformułowana w ten sposób:
<|fim_prefix|>import <|fim_suffix|>⏎
if __name == '__main__':⏎
sys.exit(0)<|fim_middle|>
Uwaga:
- Nie może być dodatkowych spacji między tokenami FIM a preiksem i sufiksem.
- Token środkowy FIM powinien znajdować się na końcu, aby model mógł kontynuować wypełnianie
- W zależności od tego, gdzie kursor znajduje się w pliku, lub od tego, ile kontekstu chcesz przekazać modelowi, prefiks lub sufiks może być pusty.
Interpretowanie danych wyjściowych modelu
Odpowiedź modelu w przypadku tego przykładu:
<|fim_prefix|>import <|fim_suffix|>⏎
if __name__ == "__main__":\n sys.exit(0)<|fim_middle|>sys\n<|file_separator|>
Model powtarza prompt i podaje sys
jako uzupełnienie kodu.
Jeśli używasz modeli CodeGemma do zadań FIM, przesyłaj tokeny odpowiedzi strumieniowo i używaj tokenów FIM lub separatorów plików jako ograniczników, aby zatrzymać przesyłanie strumieniowe i uzyskać wynikową funkcję uzupełniania kodu.