فرمت Gemma و دستورالعمل های سیستم

قالب بندی برای تنظیم دستورالعمل

مدل‌های تنظیم‌شده با دستورالعمل (IT) با یک قالب‌کننده خاص آموزش داده می‌شوند که همه نمونه‌های تنظیم دستورالعمل را با اطلاعات اضافی، هم در زمان آموزش و هم در زمان استنتاج، حاشیه‌نویسی می‌کند. فرمت کننده دو هدف دارد:

  1. نشان دادن نقش‌ها در مکالمه، مانند نقش‌های سیستم ، کاربر یا دستیار .
  2. مشخص کردن چرخش در یک مکالمه، به ویژه در یک مکالمه چند نوبتی.

در زیر، توکن های کنترلی استفاده شده توسط Gemma و موارد استفاده آنها را مشخص می کنیم. توجه داشته باشید که توکن‌های کنترل در توکنایزر ما رزرو شده‌اند و مخصوص آن هستند.

  • نشانه برای نشان دادن نوبت کاربر: user
  • نشانه برای نشان دادن چرخش مدل: model
  • نشانه ای برای نشان دادن شروع چرخش گفتگو: <start_of_turn>
  • نشانه ای برای نشان دادن پایان چرخش گفتگو: <end_of_turn>

در اینجا یک دیالوگ نمونه است:

<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" جداکننده نوبت است و پیشوند اعلان "<start_of_turn>model\n" است. این به این معنی است که اگر می‌خواهید از مدل سؤالی مانند "قانون کرامر چیست؟" بپرسید، باید مدل را به صورت زیر تغذیه کنید:

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

توجه داشته باشید که اگر می‌خواهید مدل‌های Gemma پیش‌آموزش‌شده پایه را با داده‌های خود تنظیم کنید، می‌توانید از هر طرحواره‌ای برای توکن‌های کنترلی استفاده کنید، تا زمانی که بین موارد استفاده آموزشی و استنتاج شما سازگار باشد.

دستورالعمل های سیستم

برای هر دو تنظیم دقیق نظارت شده (SFT) و یادگیری تقویتی از بازخورد انسانی (RLHF)، مدل ها با دستورالعمل های سیستم آموزش داده نشدند. در نتیجه، تنها نشانه‌های قالب‌بندی مرتبط برای Gemma عبارتند از <start_of_turn> ، <end_of_turn> ، user و model . مثلا:

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

قالب بندی برای وظایف FIM

انواع CodeGemma 2B و 7B مخصوصاً برای وظایف تکمیل کد تنظیم شده اند.

به طور خاص، آنها بر روی چهار نشانه کنترل قالب‌بندی آموزش دیده‌اند که می‌توانید از آنها برای کمک به ساخت اعلان‌های مدل برای وظایف کدگذاری پر کردن وسط (FIM) استفاده کنید.

متن نوشته رمز
پیشوند FIM <|fim_prefix|>
پسوند FIM <|fim_suffix|>
FIM وسط <|fim_middle|>
جداکننده فایل <|file_separator|>

از نشانه های FIM برای تعریف مکان مکان نما و زمینه اطراف آن برای CodeGemma برای تکمیل کد استفاده کنید. از نشانه جداکننده فایل برای زمینه های چند فایلی استفاده کنید.

مثال - یک اعلان FIM بسازید

این بخش از مثال در شروع سریع Keras CodeGemma استفاده مجدد می کند تا به شما نشان دهد که چگونه یک درخواست برای وظایف FIM بسازید.

کد زیر را در نظر بگیرید:

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

| مکان مکان نما را نشان می دهد که در آن کد باید تکمیل شود. توجه داشته باشید که قبل از مکان نما یک فاصله وجود دارد و خطوط 1 و 2 در انتها دارای کابری هستند.

پس پیشوند این است که

import

با یک فاصله در انتها

پسوند این است:

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

با یک خط جدید در شروع

اعلان باید به صورت زیر ساخته شود:

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

توجه داشته باشید که:

  • نباید هیچ فاصله سفید اضافی بین نشانه های FIM و پیشوند و پسوند وجود داشته باشد
  • نشانه میانی FIM باید در انتها باشد تا مدل پر شود
  • پیشوند یا پسوند بسته به اینکه مکان نما در حال حاضر در کجای فایل قرار دارد یا اینکه چه مقدار زمینه را می خواهید به مدل ارائه دهید می تواند خالی باشد.

درک خروجی مدل

پاسخ مدل برای مثال بالا این خواهد بود:

<|fim_prefix|>import <|fim_suffix|>⏎
if __name__ == "__main__":\n    sys.exit(0)<|fim_middle|>sys\n<|file_separator|>

مدل اعلان ورودی را تکرار می کند و sys به عنوان تکمیل کد ارائه می دهد.

هنگام استفاده از مدل‌های CodeGemma برای وظایف FIM، توکن‌های پاسخ را استریم کنید و از FIM یا نشانه‌های جداکننده فایل به‌عنوان جداکننده برای توقف پخش و دریافت کد به‌دست‌آمده استفاده کنید.