Talimat ayarlama için biçimlendirme
Talimat ayarlı (IT) modeller, hem eğitim hem de çıkarım sırasında tüm talimat ayarı örneklerini ek bilgilerle açıklayan belirli bir düzenleyici ile eğitilir. Düzenleyicinin iki amacı vardır:
- Bir sohbette sistem, kullanıcı veya asistan rolleri gibi rolleri belirtme.
- Özellikle çok katılımlı sohbetlerde konuşma sırasını belirtme
Gemma tarafından kullanılan kontrol jetonlarını ve kullanım alanlarını aşağıda bulabilirsiniz. Kontrol jetonlarının, dize ayırıcımızda ayrılmış ve dize ayırıcımıza özgü olduğunu unutmayın.
- Kullanıcı sırasını belirten jeton:
user
- Model dönüşümünü belirten jeton:
model
- Diyalog sırasının başlangıcını belirten jeton:
<start_of_turn>
- Diyalog sırasının sonunu belirten jeton:
<end_of_turn>
Aşağıda örnek bir diyalog verilmiştir:
<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>
"<end_of_turn>\n"
jetonu, sıra ayırıcıdır ve istem ön eki "<start_of_turn>model\n"
'dur. Yani modele "Cramer Kuralı nedir?" gibi bir soru sormak istiyorsanız modele şu şekilde bilgi vermeniz gerekir:
"<start_of_turn>user
What is Cramer's Rule?<end_of_turn>
<start_of_turn>model"
Önceden eğitilmiş Gemma modellerinde kendi verilerinizle hassas ayar yapmak istiyorsanız eğitim ve çıkarım kullanım alanlarınız arasında tutarlı olduğu sürece kontrol jetonları için bu tür bir şemayı kullanabileceğinizi unutmayın.
Sistem talimatları
Hem gözetimli ince ayar (SFT) hem de insan geri bildiriminden pekiştirmeli öğrenme (RLHF) için modeller sistem talimatlarıyla eğitilmedi. Sonuç olarak, Gemma için geçerli olan tek biçimlendirme jetonları <start_of_turn>
, <end_of_turn>
, user
ve model
'dır. Örneğin:
<start_of_turn>user
What is Cramer's Rule?<end_of_turn>
<start_of_turn>model
Cramer's Rule is ...<end_of_turn>
FIM görevleri için biçimlendirme
CodeGemma 2B ve 7B varyantları, kod doldurma görevleri için özel olarak ayarlanmıştır.
Daha açık belirtmek gerekirse, bu modeller, boşluk doldurma (FIM) kodlama görevleri için model istemleri oluşturmaya yardımcı olmak amacıyla kullanabileceğiniz dört biçimlendirme kontrol jetonu üzerinde eğitilir.
Bağlam | Jeton |
---|---|
FIM öneki | <|fim_prefix|> |
FIM soneki | <|fim_suffix|> |
FIM orta | <|fim_middle|> |
Dosya ayırıcı | <|file_separator|> |
CodeGemma'nın kod doldurmasını gerçekleştirmesi için imlecin konumunu ve etrafındaki bağlamı tanımlamak üzere FIM jetonlarını kullanın. Birden fazla dosya içeren bağlamlar için dosya ayırıcı jetonunu kullanın.
Örnek: FIM istemi oluşturma
Bu bölümde, FIM görevleri için istemi nasıl oluşturacağınızı göstermek amacıyla Keras CodeGemma hızlı başlangıç kılavuzundaki örnek yeniden kullanılmaktadır.
Aşağıdaki kodu ele alalım:
import |⏎ # Line 1
if __name__ == '__main__':⏎ # Line 2
sys.exit(0) # Line 3
|
, imlecin konumunu gösterir. Bu konumda kodun tamamlanması gerekir. İmlecin önünde bir boşluk olduğunu ve 1. ile 2. satırların sonunda satır başı karakteri olduğunu unutmayın.
Önek ise
import
sonuna bir boşluk eklenir.
Son ek:
⏎
if __name__ == '__main__':⏎
sys.exit(0)
Başında yeni bir satır olacak şekilde.
İstem şu şekilde oluşturulmalıdır:
<|fim_prefix|>import <|fim_suffix|>⏎
if __name == '__main__':⏎
sys.exit(0)<|fim_middle|>
Unutmayın:
- FIM jetonları ile ön ek ve son ek arasında fazladan boşluk olmamalıdır.
- Modeli doldurmaya devam etmesi için FIM orta jetonu sonda olmalıdır.
- İmlecin dosyada şu anda bulunduğu yere veya modele ne kadar bağlam bilgisi sağlamak istediğinize bağlı olarak ön ek veya son ek boş olabilir.
Model çıktısını anlama
Yukarıdaki örnek için model yanıtı şu şekilde olur:
<|fim_prefix|>import <|fim_suffix|>⏎
if __name__ == "__main__":\n sys.exit(0)<|fim_middle|>sys\n<|file_separator|>
Model, giriş istemini tekrarlar ve kod tamamlama olarak sys
sağlar.
FIM görevleri için CodeGemma modellerini kullanırken yanıt jetonlarını aktarın ve aktarımı durdurup sonuçta ortaya çıkan kod tamamlamasını almak için FIM veya dosya ayırıcı jetonlarını ayırıcı olarak kullanın.