Skip to content
Guides6 min read

نماذج القرار طبقةً أولى رخيصة للوسم

يقيّم نموذج القرار كل خيار في تمريرة أمامية واحدة ولا يكتب أي نص. وهو يصلح طبقة أولى للوسم قبل نموذج LLM في الأسئلة ذات الخيارات القليلة.

Potato Team

يَسِم نموذج القرار سؤالاً ذا اختيارات ثابتة في تمريرة أمامية واحدة ويعيد احتمالاً لكل خيار، دون أي نص يولّده. استخدمه طبقةً أولى في سلسلة وسم متتالية للأسئلة التي تطلب خياراً واحداً من N مع عدد قليل من الخيارات، وأرسل العناصر التي لا يكون متأكداً منها إلى نموذج LLM، وأشهِد على عتبته بعيّنة بشرية عمياء، لأن ثقته قد تبقى مرتفعة على مدخلات يخطئ فيها.

نموذج القرار مصنِّف يأخذ نصاً ومجموعة من الأسئلة ذات الأنواع المحدّدة، ويعيد احتمالاً لكل إجابة. وهو لا يولّد نصاً، لذا لا يستطيع كتابة موجّه أو تعليل أو قاعدة. وLaya نموذج مفتوح من هذا النوع. تسرد بطاقة النموذج الخاصة به نقطة حفظ إنجليزية مبنية على مُرمِّز ModernBERT-large بـ 421M معامل بموجب رخصة Apache 2.0، ونقطة حفظ متعددة اللغات بـ 322M معامل. وتقدّم واجهة /v1/systemone النوع نفسه من الإجابات عبر HTTP، من Jev المستضاف أو OpenJev أو خادم Laya نفسه.

أين توفّر الطبقة الأولى المال

تجرّب السلسلة المتتالية للوسم النماذج بالترتيب، عادةً من الأرخص إلى الأقدر، ولا تمرّر العنصر إلى التالي إلا حين لا يكون النموذج الحالي واثقاً بما يكفي. وحين تضم المدوّنة نسبة كبيرة من العناصر السهلة، فإن نموذجاً رخيصاً يَسِمها بثقة يترك لنموذج LLM بقيةً أصغر وأصعب. ويعتمد التوفير على تلك النسبة، لذا قِسها على بياناتك أنت قبل أن تخطّط على أساسها.

يناسب نموذج القرار الطبقة الأولى لأنه يجيب عن كل الخيارات في تمريرة واحدة، فالسؤال ذو الوسوم الخمسة يكلّف تمريرة أمامية واحدة دون أي نص مولَّد. واحتمالات مخرجاته هي درجة الثقة، فلا يحتاج إلى سؤال متابعة أو أخذ عيّنات متكرر. ويعمل أيضاً على المعالج المركزي (CPU). وتذكر بطاقة النموذج من 193 إلى 464 ms لكل طلب على CPU مع تحميل نقاط الحفظ مسبقاً، و39.5 ms لنقطة الحفظ الإنجليزية على GPU من طراز T4.

الحدود المُبلَغ عنها لـ Laya

أربعة من هذه الحدود مأخوذة من بطاقة نموذج Laya، والخامس، عن مقاييس التقدير، مأخوذ من وثائق Potato:

  • الخيارات الكثيرة. على معيار نوايا Banking77 تذكر البطاقة أن دقة Laya بلغت 0.425 على 77 وسماً، مقابل 0.870 لـ Jev على 72. والخيارات تتقاسم ميزانية ثابتة من الرموز، لذا تزاحم قوائم الوسوم الطويلة بعضها بعضاً. وتشير وثائق Potato أيضاً إلى أن Laya ينبّه إلى أن درجة حرارته خارج النطاق في الأسئلة ذات 11 خياراً أو أكثر، ويقصّها إلى حدود النطاق.
  • الأنظمة الكتابية الأخرى على نقطة الحفظ الإنجليزية. تذكر البطاقة أن نقطة الحفظ الإنجليزية بلغت دقة 0.000 وثقة 0.952 على نص بالخميرية. ولا تستطيع عتبة الثقة كشف خطأ يكون النموذج متأكداً منه.
  • الدقة دون أمثلة (zero-shot). تذكر البطاقة أن نقاط الحفظ الأساسية تقارب مستوى الصدفة على معيارها للقرارات ذات الأنواع المحدّدة دون أمثلة، إذ بلغت 0.362 مقابل خط أساس عشوائي قدره 0.318 وخط أساس للفئة الأغلب قدره 0.461، وتصف Laya بأنه «قاعدة سريعة للتخصيص، لا محرّك قرارات دون أمثلة».
  • المعايرة الخام. تذكر البطاقة أن laya يُشحن مفرط الثقة، بمتوسط خطأ معايرة متوقع قدره 0.466 ينخفض إلى 0.081 بعد إعادة ملاءمة درجات الحرارة على بياناتك أنت. وتختلف المعايرة باختلاف المجال، لذا لا تنتقل عتبة اختيرت على بيانات غيرك.
  • مقاييس التقدير. تجد وثائق Potato أن درجات Laya في مخططات likert وslider بالكاد تتبع المقياس، أياً كانت صياغة السؤال.

مجتمعةً، تشير هذه الحدود إلى إبقاء نموذج القرار على الأسئلة التي تطلب خياراً واحداً من N مع خيارات قليلة، وباللغة التي دُرّبت عليها نقطة حفظه. واختر عتبته من وسوم بشرية على مدوّنتك أنت.

نموذج قرار في Potato

يضيف Potato 2.11 نوعين من نقاط النهاية لنماذج القرار. يشغّل laya نموذج Laya داخل عملية Potato ويحتاج إلى الإضافة decision، أي pip install 'potato-annotation[decision]'، التي تجلب torch وtransformers. ويتصل systemone بأي خادم يوفّر واجهة /v1/systemone ولا يحتاج إلا إلى base_url. ويعمل كلاهما على مخططات radio وselect وlikert وslider، ولا يبدأ الوضع الفردي إذا ضُبط أحدهما لوسم مخطط multiselect أو مخطط امتدادات نصية أو نص حر.

في محرّك الوسم، يكون نموذج القرار مصدراً من نوع decision يوضع أولاً في السلسلة المتتالية. هذا المقتطف من المثال النصي المرفق مع Potato يضع Laya قبل نموذج LLM صغير عبر Ollama، ويُشهِد على الاثنين مقابل هدف خطأ قدره 10% بالثقة الافتراضية في Potato البالغة 90%:

yaml
labeling_engine:
  enabled: true
  sources:
    - id: laya
      kind: decision
      endpoint_type: laya
      model: convaiinnovations/laya
      options:
        device: cpu
    - id: llm
      kind: llm
      endpoint_type: ollama
      model: llama3.2:3b
      base_url: http://localhost:11434
      max_tokens: 200
  cascade: [laya, llm]
  contracts:
    - id: accuracy
      kind: selective_risk
      schema: sentiment
      error: 0.1
      confidence: 0.9

يختار المحرّك عتبة ثقة Laya على نصف عيّنة بشرية عمياء ويختبرها على النصف الآخر، فتأتي العتبة من مدوّنتك لا من بطاقة النموذج. وإلى أن يثبّت نصف dev من العيّنة عتبةً لـ Laya، يَسِم نموذج LLM كل العناصر. وبعد ذلك لا يرى نموذج LLM إلا العناصر التي لا يكون Laya متأكداً منها، إضافة إلى عيّنة المعايرة.

في التشغيل الموثّق في ملف README الخاص بالمثال، مع Gemma 12B بوصفه نموذج LLM، لم تُثبَّت عتبة Laya قط، وقدّم نموذج LLM كل الوسوم المقبولة، لذا قِس ما تساهم به الطبقة الأولى على مدوّنتك قبل أن تعتمد عليها. ولأن المحرّك يختبر الوسوم المقبولة لكل طبقة على حدة، فإن الفشل الواثق مثل حالة الخميرية يظهر أخطاءً في عيّنة الإشهاد، بشرط أن تغطي العيّنة هذا النوع من المدخلات. ويستطيع العقد distributional أيضاً استخدام متجه الاحتمالات الكامل من Laya، وهذا يناسب الأسئلة الذاتية التي ينقسم فيها المُعلِّقون.

في الوضع الفردي، يوضع نموذج القرار في labeling_models وفي الطبقة الأولى من confidence_routing. ويحتاج الوضع الفردي أيضاً إلى نموذج توليدي تحت revision_models، لأن نماذج القرار لا تستطيع كتابة الموجّهات والقواعد التي تنتجها حلقة المراجعة فيه.

اختبار نموذج القرار قبل تشغيل كامل

شغّل النموذج على بضع عشرات من العناصر التي وسمتها من قبل قبل أن توجّه مدوّنة كاملة عبره. يفعل زر Try on 10 items في الوضع الفردي هذا مع الموجّه، وفي المحرّك يُظهر potato label run متبوعاً بـ potato label status كم وسماً إضافياً تحتاجه عتبة كل طبقة، وأي مصدر أنتج أخطاء. والطبقة التي تفشل في الإشهاد لا تقبل شيئاً، وترسل العناصر التي تتجاوز عتبتها إلى البشر بدلاً من نموذج LLM، فتُنفَق ميزانية الوسوم البشرية على عناصر ربما كان نموذج LLM سيَسِمها. وإن ظلت طبقة نموذج القرار تفشل في الإشهاد، فأزلها من السلسلة المتتالية.

قراءة إضافية