صفر، ومثال واحد، وعدة أمثلة
اختيار عدد الأمثلة.
صفر، ومثال واحد، وعدة أمثلة درس مجاني في AI Prompt Engineering على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Prompt Engineering، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Prompt Engineering 4 دروس في المجموع.
طيف الأمثلة
يشير عدد الأمثلة (Shots) إلى عدد العروض التوضيحية المصنفة الموضوعة في المطالبة قبل الاستعلام الفعلي. يعتمد نهج Zero-shot بالكامل على المعارف المسبقة التي تعلمها النموذج، بينما يهيئ نهج few-shot النموذج على توزيع صغير خاص بالمهمة وقت الاستدلال من دون إجراء أي تحديث للأوزان.
يُعرف ذلك باسم التعلم داخل السياق (ICL): يتعامل المحوّل مع الأمثلة باعتبارها جزءًا من التسلسل، وينفذ ضمنيًا نوعًا من الانحدار المتعلم فوقيًا عليها. ويُعد اختيار k (عدد الأمثلة) معلمة فائقة تضبطها تجريبيًا، وليس ممارسة مثلى ثابتة.
from dataclasses import dataclass
@dataclass
class ICLConfig:
k: int # number of demonstrations
selection: str # 'static' | 'dynamic'
order: str # 'random' | 'similarity' | 'curriculum'
# Zero-shot is simply k=0
cfg = ICLConfig(k=0, selection='static', order='random')متى يتفوّق zero-shot
فضّل zero-shot عندما تكون المهمة ممثَّلة تمثيلًا جيدًا في التدريب المسبق (مثل التلخيص والترجمة والتصنيف الشائع)، وعندما قد تؤدي الأمثلة إلى تحييز تنسيق الإخراج. وبالنسبة إلى النماذج المضبوطة بالتعليمات، غالبًا ما يتفوّق توجيه واضح ومخطط إخراج محدد على أمثلة ترسي أسلوبًا معينًا ضمنيًا.
يقلّل zero-shot أيضًا من تكلفة الرموز وزمن الاستجابة، ويتجنب تحيّز التسمية الغالبة، حيث يفرط النموذج في التنبؤ بالفئة المهيمنة في أمثلتك التوضيحية.
# Zero-shot with explicit schema beats vague few-shot
PROMPT = (
'Classify sentiment as POSITIVE, NEGATIVE, or NEUTRAL.\n'
'Respond with only the label.\n\n'
'Text: ' + user_text + '\nLabel:'
)one-shot بوصفه مرساة للتنسيق
يتفوّق one-shot عندما تكون المهمة واضحة من الناحية المفاهيمية، لكن تنسيق الإخراج غير مألوف أو صارم. يعلّم المثال التوضيحي الواحد الشكل الدقيق (مفاتيح JSON والفواصل وحالة الأحرف) بموثوقية أكبر بكثير من وصف نثري.
استخدم one-shot عندما تريد تقييد البنية من دون استهلاك عدد كبير من الرموز أو المخاطرة بالانحراف في توزيع التسميات الذي تسببه الأمثلة المتعددة.
ONE_SHOT = (
'Extract entities as JSON.\n\n'
'Input: Apple released the iPhone in Cupertino.\n'
'Output: {"org": ["Apple"], "product": ["iPhone"], "loc": ["Cupertino"]}\n\n'
'Input: ' + query + '\nOutput:'
)Few-Shot ومنحنى k
نادراً ما يكون الأداء مقابل k رتيبًا. فعادةً ما يرتفع ثم يستقر، وبعد ذلك يتراجع عندما تزدحم الأمثلة في السياق، فتشتت الانتباه وتدفع الاستعلام الحالي بعيدًا عن تركيز النموذج على المعلومات الأحدث.
اختبر قيم k تجريبيًا ضمن {1, 2, 4, 8, 16} باستخدام مجموعة محجوزة. وتعتمد قيمة k المثلى على تعقيد المهمة وطول المثال ومدى الاستفادة الفعلية للنموذج من السياق، وهو عادةً أقل بكثير من نافذة السياق المعلَن عنها.
def sweep_k(eval_set, candidates, ks=(1,2,4,8,16)):
results = {}
for k in ks:
acc = evaluate(build_prompt(candidates[:k]), eval_set)
results[k] = acc
return max(results, key=results.get)لماذا ينجح ICL: الاستدلال الضمني
يؤطّر البحث العلمي ICL على أنه إجراء النموذج لاستدلال بايزي ضمني: إذ تساعده الأمثلة التوضيحية على تحديد مفهوم المهمة الكامن الذي سبق أن تعلّمه أثناء التدريب المسبق. وتعمل الأمثلة بوصفها أدلة تضيق التوزيع اللاحق على المهام، لا بوصفها معرفة جديدة.
وهذا يفسر نتيجة غير بديهية: إذ يمكن حتى للتسميات غير الصحيحة في الأمثلة التوضيحية أن تحافظ على قدر كبير من الدقة، لأن الإشارة المهيمنة هي التنسيق وفضاء التسميات، لا مطابقة المدخلات للتسميات نفسها.
# Min, Lyu et al. (2022): label correctness matters less than
# - the input distribution
# - the label space (which classes exist)
# - the format / structure
# Implication: invest in representative inputs + valid label setالمفاضلة بين ميزانية الرموز والتكلفة
يستهلك كل مثال سياقًا ومالًا. ومع الأمثلة التوضيحية الطويلة، قد تطغى أربعة أمثلة على الاستعلام. احسب مقياس التكلفة لكل نقطة دقة: فإذا حققت قيمة k=8 زيادة قدرها 0.5% مقارنةً بـ k=4 مقابل ضعف عدد الرموز، فإن k=4 هو الخيار الأفضل في بيئة الإنتاج.
في مسارات المعالجة ذات الإنتاجية العالية، فضّل التخزين المؤقت لكتلة الأمثلة الثابتة في المطالبة، بحيث تُحاسَب الأمثلة المتكررة وتُعالَج مرة واحدة.
def cost_efficiency(acc_by_k, tokens_by_k, price_per_1k):
return {
k: acc_by_k[k] / (tokens_by_k[k] / 1000 * price_per_1k)
for k in acc_by_k
}
# Pick the k maximizing accuracy per dollar, not raw accuracyتحيّز التسمية الغالبة والموضع
تنطوي مطالبات few-shot على تحيّزات خفية. يجعل تحيّز التسمية الغالبة النموذج يميل إلى الفئة الأكثر تكرارًا في الأمثلة التوضيحية. ويعطي تحيّز الحداثة وزنًا زائدًا للمثال الأخير. أما تحيّز الرموز الشائعة فيفضّل الرموز التي تظهر بكثرة.
تقدّر تقنيات المعايرة، مثل المعايرة السياقية، التوزيع السابق للنموذج على مدخل خالٍ من المحتوى (مثل الرمز N/A)، ثم تزيل أثره بالقسمة عليه، مما يحقق استقرارًا كبيرًا لمصنّفات few-shot.
# Contextual calibration (Zhao et al. 2021)
p_cf = model_probs(prompt_with_input('N/A')) # content-free prior
W = 1.0 / p_cf # diagonal correction
def calibrated(probs):
return normalize(W * probs)موازنة مجموعة الأمثلة التوضيحية
لمواجهة تحيّز التسمية الغالبة، وازِن الفئات عبر الأمثلة التوضيحية وغيّر ترتيبها. ففي التصنيف الثنائي عندما تكون k=4، استخدم مثالين موجبين ومثالين سالبين بترتيب عشوائي، بدلًا من توزيع 3:1.
وفي مهام التوليد، وازِن الأبعاد المهمة (مثل الطول والنبرة والصعوبة)، حتى لا ينحصر النموذج في نمط واحد رآه بأكبر تكرار.
import random
def balanced_demos(pool, k, label_fn):
by_label = {}
for ex in pool:
by_label.setdefault(label_fn(ex), []).append(ex)
per = k // len(by_label)
picks = [e for lst in by_label.values() for e in random.sample(lst, per)]
random.shuffle(picks)
return picksFew-Shot في مقابل Fine-Tuning
يكون few-shot الأداة المناسبة عندما تتغير المهمة باستمرار، أو تكون البيانات شحيحة، أو يتعذر عليك استضافة نموذج مضبوط. أما Fine-Tuning فيتفوّق عندما تمتلك آلاف الأمثلة، أو تحتاج إلى أقل زمن استجابة لكل استدعاء، أو تريد تضمين التنسيق في النموذج بحيث تظل المطالبات قصيرة.
من المسارات الشائعة في الإنتاج: ابدأ بنموذج few-shot، واجمع المسارات الناجحة، ثم قطّرها في نموذج مضبوط لإزالة رموز الأمثلة بالكامل.
# Decision heuristic
if num_labeled < 500 or task_volatility == 'high':
strategy = 'few-shot ICL'
elif latency_budget_ms < 200 or prompt_token_cost_dominant:
strategy = 'fine-tune + zero-shot'
else:
strategy = 'few-shot now, distill later'مهام الاستدلال تحتاج إلى أكثر من الأمثلة
في الاستدلال متعدد الخطوات، قد تضر أزواج الإجابات الخام في few-shot: إذ يتعلم النموذج القفز مباشرةً إلى إجابة لا يستطيع تبريرها. اجمع few-shot مع أمثلة توضيحية لسلسلة التفكير تعرض مسار الاستدلال، لا التسمية النهائية فحسب.
يتفاعل عدد الأمثلة مع عمق الاستدلال؛ فكثيرًا ما تتفوّق أمثلة CoT عالية الجودة بعدد k=2 على أمثلة لا تعرض سوى الإجابة بعدد k=8 في اختبارات الحساب والمنطق المعيارية.
COT_SHOT = (
'Q: A shop had 23 apples, used 20, bought 6 more. How many now?\n'
'A: Start 23, minus 20 leaves 3, plus 6 is 9. Answer: 9\n\n'
'Q: ' + question + '\nA:'
)إطار تقييم لقيمة k
تعامل مع اختيار عدد الأمثلة على أنه بحث تجريبي تدعمه أداة تقييم. احجز مجموعة للتحقق، واضبط ترتيب الأمثلة باستخدام بذور متعددة، وأبلغ عن المتوسط والتباين، لأن دقة few-shot قد تتغير عدة نقاط بسبب الترتيب وحده.
سجّل عدد الرموز وزمن الاستجابة لكل قيمة k، حتى يحسّن الاختيار النهائي الهدف الكامل، لا الدقة وحدها.
def harness(pool, val, ks, seeds=5):
report = {}
for k in ks:
accs = []
for s in range(seeds):
demos = balanced_demos(pool, k, label_fn)
accs.append(evaluate(build_prompt(demos), val))
report[k] = (mean(accs), stdev(accs))
return reportتحقق سريع
اختبر مدى فهمك لاختيار عدد الأمثلة وتحيّز ICL.
مراجعة
أهم النقاط:
kمعلمة فائقة قابلة للضبط؛ اختبر قيمها وتابع منحنى الارتفاع والاستقرار والتراجع.- يناسب zero-shot المهام المعروفة جيدًا؛ ويرسي one-shot التنسيقات الصارمة؛ ويكيّف few-shot النموذج مع توزيع المهمة.
- يعمل ICL على تحديد مهمة متعلَّمة مسبقًا، لذلك يهيمن التنسيق وفضاء التسميات على صحة التسميات.
- واجه تحيّز التسمية الغالبة والحداثة والرموز الشائعة بالموازنة والخلط العشوائي والمعايرة السياقية.
- حسّن الدقة لكل دولار، واجمع مهام الاستدلال مع أمثلة CoT، وقطّر مطالبات few-shot المستقرة في نماذج مضبوطة.
الأسئلة الشائعة
هل درس «صفر، ومثال واحد، وعدة أمثلة» مجاني؟
نعم — نص درس «صفر، ومثال واحد، وعدة أمثلة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Prompt Engineering، انتقل إلى CoddyKit PRO. تتضمن دورة AI Prompt Engineering 4 دروس في المجموع.
ماذا ستتعلم في «صفر، ومثال واحد، وعدة أمثلة»؟
اختيار عدد الأمثلة. تتمرن على AI Prompt Engineering مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ AI Prompt Engineering؟
لا تُشترط خبرة سابقة. AI Prompt Engineering على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «صفر، ومثال واحد، وعدة أمثلة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس AI Prompt Engineering هذا؟
نعم. كل درس في AI Prompt Engineering يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- صفر، ومثال واحد، وعدة أمثلة
- تصميم أمثلة فعّالة
- ترتيب الأمثلة وحداثتها
- الاختيار الديناميكي لعدة أمثلة