إرشادات حول تنسيق 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)

تمّت تحسين الصيغتَين 2B و7B من CodeGemma خصيصًا لمهام ملء الرموز.

وعلى وجه التحديد، يتم تدريبها على أربعة رموز تحكم في التنسيق يمكنك استخدامها للمساعدة في إنشاء طلبات نموذجية لمهام الترميز باستخدام ميزة "ملء الفراغات".

السياقالرمز المميز
بادئة 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 كفاصلات لإيقاف البث والحصول على رمز الإكمال الناتج.