إرشادات حول تنسيق Gemma ونظامها

تنسيق ضبط التعليمات

يتم تدريب نماذج ضبط التعليمات (IT) باستخدام تنسيق محدّد يتضمّن جميع الأمثلة على ضبط التعليمات مع معلومات إضافية، سواء في وقت التدريب أو الاستنتاج. هناك غرضان من أداة التنسيق:

  1. الإشارة إلى الأدوار في المحادثة، مثل أدوار النظام أو المستخدم أو المساعد.
  2. تحديد الانعطافات في المحادثة، خاصة في محادثة متعددة الأدوار.

فيما يلي، نحدد رموز التحكم التي تستخدمها "جيما" وحالات استخدامها. لاحظ أن رموز التحكم تكون محجوزة وخاصة بأداة الترميز.

  • رمز مميّز للإشارة إلى دور المستخدم: 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 الأساسية المدرّبة مسبقًا باستخدام بياناتك الخاصة، يمكنك استخدام أي من هذه المخططات لرموز التحكّم، شرط أن يكون متوافق بين تدريباتك وحالات استخدام الاستنتاج.

تعليمات النظام

لم يتم تدريب النماذج باستخدام تعليمات النظام لكل من الضبط الدقيق الخاضع للإشراف وتعلّم التحسين من الملاحظات البشرية (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 `<
وسط FIM `<
فاصل الملفات `<

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