Pemformatan untuk penyesuaian petunjuk
Model yang disesuaikan dengan petunjuk (IT) dilatih dengan formator tertentu yang menambahkan anotasi pada semua contoh penyesuaian petunjuk dengan informasi tambahan, baik pada waktu pelatihan maupun inferensi. Formatter memiliki dua tujuan:
- Menunjukkan peran dalam percakapan, seperti peran sistem, pengguna, atau asisten.
- Menjelaskan giliran dalam percakapan, terutama dalam percakapan multi-giliran.
Di bawah ini, kami menentukan token kontrol yang digunakan oleh Gemma dan kasus penggunaannya. Perhatikan bahwa token kontrol dicadangkan dan khusus untuk tokenizer kami.
- Token untuk menunjukkan giliran pengguna:
user
- Token untuk menunjukkan giliran model:
model
- Token untuk menunjukkan awal giliran dialog:
<start_of_turn>
- Token untuk menunjukkan akhir giliran dialog:
<end_of_turn>
Berikut adalah contoh 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"
adalah pemisah belokan, dan awalan perintah adalah
"<start_of_turn>model\n"
. Artinya, jika ingin meminta model
dengan pertanyaan seperti, "Apa itu Aturan Cramer?", Anda harus memberi makan
model sebagai berikut:
"<start_of_turn>user
What is Cramer's Rule?<end_of_turn>
<start_of_turn>model"
Perhatikan bahwa jika ingin menyesuaikan model Gemma terlatih dengan data Anda sendiri, Anda dapat menggunakan skema tersebut untuk token kontrol, selama konsisten antara kasus penggunaan pelatihan dan inferensi.
Petunjuk sistem
Untuk penyesuaian yang diawasi (SFT) dan reinforcement learning dari masukan manusia (RLHF), model tidak dilatih dengan petunjuk sistem. Akibatnya, satu-satunya token pemformatan yang relevan untuk Gemma adalah <start_of_turn>
,
<end_of_turn>
, user
, dan model
. Contoh:
<start_of_turn>user
What is Cramer's Rule?<end_of_turn>
<start_of_turn>model
Cramer's Rule is ...<end_of_turn>
Pemformatan untuk tugas FIM
Varian CodeGemma 2B dan 7B disesuaikan secara khusus untuk tugas pengisian kode.
Secara khusus, model ini dilatih dengan empat token kontrol pemformatan yang dapat Anda gunakan untuk membantu membuat perintah model untuk tugas coding isi tengah (FIM).
Konteks | Token |
---|---|
Awalan FIM | <|fim_prefix|> |
Akhiran FIM | <|fim_suffix|> |
Tengah FIM | <|fim_middle|> |
Pemisah file | <|file_separator|> |
Gunakan token FIM untuk menentukan lokasi kursor dan konteks di sekitarnya agar CodeGemma dapat melakukan pengisian kode. Gunakan token pemisah file untuk konteks multi-file.
Contoh - Membuat perintah FIM
Bagian ini menggunakan kembali contoh di panduan memulai Keras CodeGemma untuk menunjukkan cara membuat perintah untuk tugas FIM.
Pertimbangkan kode berikut:
import |⏎ # Line 1
if __name__ == '__main__':⏎ # Line 2
sys.exit(0) # Line 3
|
menunjukkan lokasi kursor, tempat kode perlu
selesai. Perhatikan bahwa ada spasi sebelum kursor dan baris 1 dan 2
memiliki carriage return di bagian akhir.
Awalannya adalah,
import
dengan satu spasi di akhir.
Akhirannya adalah:
⏎
if __name__ == '__main__':⏎
sys.exit(0)
dengan baris baru di awal.
Perintah harus dibuat sebagai:
<|fim_prefix|>import <|fim_suffix|>⏎
if __name == '__main__':⏎
sys.exit(0)<|fim_middle|>
Perhatikan bahwa:
- Tidak boleh ada spasi kosong tambahan di antara token FIM dan awalan dan akhiran
- Token tengah FIM harus berada di bagian akhir untuk menyiapkan model agar terus mengisi data
- Awalan atau akhiran dapat kosong, bergantung pada posisi kursor saat ini dalam file, atau jumlah konteks yang ingin Anda berikan ke model
Memahami output model
Respons model untuk contoh di atas adalah:
<|fim_prefix|>import <|fim_suffix|>⏎
if __name__ == "__main__":\n sys.exit(0)<|fim_middle|>sys\n<|file_separator|>
Model mengulangi perintah input dan memberikan sys
sebagai penyelesaian kode.
Saat menggunakan model CodeGemma untuk tugas FIM, streaming token respons dan gunakan token pemisah file atau FIM sebagai pemisah untuk menghentikan streaming dan mendapatkan penyelesaian kode yang dihasilkan.