Petunjuk format dan sistem Gemma

Pemformatan untuk petunjuk tuning

Model Instruction-tuned (IT) dilatih dengan pemformat khusus yang menganotasi semua contoh tuning instruksi dengan informasi tambahan, baik pada pada waktu pelatihan dan inferensi. Pemformat memiliki dua tujuan:

  1. Menunjukkan peran dalam percakapan, seperti sistem, pengguna, atau Peran asisten.
  2. Menggambarkan giliran dalam percakapan, terutama dalam percakapan multi-giliran percakapan.

Di bawah ini, kami menentukan token kontrol yang digunakan oleh Gemma dan kasus penggunaannya. Catatan tempat token kontrol dicadangkan dan khusus untuk tokenizer kita.

  • Token untuk menunjukkan giliran pengguna: user
  • Token untuk menunjukkan perubahan model: model
  • Token untuk menunjukkan awal putaran 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 perintahnya adalah "<start_of_turn>model\n". Artinya, jika ingin meminta model dengan pertanyaan seperti, "Apa itu Aturan Cramer?", Anda harus memasukkan model sebagai berikut:

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

Perhatikan bahwa jika Anda ingin meningkatkan kualitas model dasar Gemma yang telah dilatih sebelumnya dengan data, Anda dapat menggunakan skema apa pun untuk token kontrol, asalkan skema itu antara kasus penggunaan pelatihan dan inferensi Anda.

Petunjuk sistem

Untuk supervised fine-tuning (SFT) dan reinforcement learning dari manusia masukan (RLHF), model tidak dilatih dengan instruksi sistem. Sebagai seorang hasil, 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 secara khusus disesuaikan untuk tugas pengisian kode.

Secara khusus, mereka dilatih pada empat token kontrol pemformatan yang bisa Anda digunakan untuk membantu membangun prompt model untuk tugas {i>fill-in-the-middle<i} (FIM).

KonteksToken
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 {i>CodeGemma<i} untuk melakukan pengisian kode. Gunakan token pemisah file untuk konteks multi-file.

Contoh - Membuat perintah FIM

Bagian ini menggunakan kembali contoh dalam Keras CodeGemma panduan memulai untuk menampilkan cara membuat {i>prompt <i} untuk tugas FIM.

Pertimbangkan kode berikut:

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

| menunjukkan lokasi kursor yang merupakan tempat kode harus berada selesai. Perhatikan bahwa ada spasi sebelum kursor dan baris 1 dan 2 memiliki enter di akhir.

Awalannya adalah,

import

dengan satu spasi di bagian akhir.

Akhiran adalah:

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

dengan garis baru di awal.

Prompt harus dibuat sebagai:

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

Perhatikan bahwa:

  • Tidak boleh ada spasi kosong tambahan antara token FIM dan awalan dan akhiran
  • Token tengah FIM harus berada di akhir untuk mempersiapkan model agar dapat melanjutkan mengisi
  • Awalan atau akhiran dapat kosong bergantung pada lokasi kursor saat ini ada dalam file, atau berapa banyak konteks yang ingin Anda berikan pada model dengan

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 FIM atau file sebagai {i> delimiter<i} untuk menghentikan {i>streaming<i} dan mendapatkan penyelesaian kode yang dihasilkan.