Petunjuk format dan sistem Gemma

Pemformatan untuk penyesuaian petunjuk

Model yang disesuaikan dengan instruksi (IT) dilatih dengan pemformat tertentu yang menganotasi semua contoh penyesuaian instruksi dengan informasi tambahan, baik pada waktu pelatihan maupun inferensi. Pemformat memiliki dua tujuan:

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

Di bawah ini, kami menentukan token kontrol yang digunakan oleh Gemma dan kasus penggunaannya. Perlu diperhatikan bahwa token kontrol sudah dipesan dan dikhususkan untuk tokenizer kami.

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

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

Perhatikan bahwa jika ingin meningkatkan kualitas model Gemma dasar yang telah dilatih dengan data Anda sendiri, Anda dapat menggunakan skema tersebut untuk token kontrol, selama skema tersebut konsisten antara kasus penggunaan pelatihan dan inferensi Anda.

Petunjuk sistem

Untuk supervised fine-tuning (SFT) dan reinforcement learning from human feedback (RLHF), model tersebut 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, modul ini dilatih pada empat token kontrol pemformatan yang dapat Anda gunakan untuk membantu membuat perintah model untuk tugas coding fill-in-the-middle (FIM).

Konteks Token
Awalan FIM `<
Akhiran FIM `<
FIM tengah `<
Pemisah file `<

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 prompt FIM

Bagian ini menggunakan kembali contoh di panduan memulai Keras CodeGemma untuk menunjukkan cara membuat prompt untuk tugas FIM.

Pertimbangkan kode berikut:

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

| menunjukkan lokasi kursor tempat kode harus diselesaikan. Perhatikan bahwa ada spasi sebelum kursor, serta baris 1 dan 2 memiliki enter di bagian akhir.

Jadi awalannya adalah,

import

dengan satu spasi di bagian akhir.

Akhiran adalah:

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

dengan baris 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 dengan awalan dan akhiran
  • Token tengah FIM harus berada di akhir untuk menyiapkan model agar terus mengisi
  • Awalan atau akhiran bisa kosong, bergantung pada lokasi kursor saat ini berada dalam file, atau seberapa banyak 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 ini mengulangi prompt input dan menyediakan sys sebagai penyelesaian kode.

Saat menggunakan model CodeGemma untuk tugas FIM, gunakan token respons stream dan gunakan FIM atau token pemisah file sebagai pembatas untuk menghentikan streaming dan mendapatkan penyelesaian kode yang dihasilkan.