Skip to content

عقود محرّك الوسم

أنواع العقود الستة التي يختبرها محرّك الوسم مقابل الوسوم البشرية، من المخاطرة الانتقائية وفترات PPI إلى اختبار المُعلِّق البديل، وكيف يفشل كل منها.

العقد ادعاء عن الوسوم النهائية يختبره محرّك الوسم مقابل وسوم بشرية على عيّنة عشوائية. يسمّي كل عقد مخطط توسيم واحداً (schema)، وله confidence، قيمته 0.9 افتراضياً، وهو احتمال أن يصحّ الادعاء. لذا فإن confidence بقيمة 0.9 يترك احتمالاً بنسبة 10% أن يكون العقد المستوفى خاطئاً.

تقدّم الأنواع الستة ادعاءات مختلفة وتناسب دراسات مختلفة:

النوعالادعاءيناسب
selective_riskلا يزيد الخاطئ من الوسوم الآلية المقبولة على errorمجموعات البيانات ومجموعات التدريب التي يجب أن يكون كل وسم فيها صالحاً للاستخدام
ppiفترة لانتشار كل وسم (أو لمتوسط درجة) تبقى صالحة أياً كانت جودة الآلةالإبلاغ عن معدلات، مثل «12% من المنشورات سامة [10.5, 13.6]»
no_worse_than_humanتتفق الآلة مع البشر بقدر ما يتفق معهم شخص على الأقلاستبدال المُعلِّقين أو نموذج حَكَم LLM
budget_firstما يمكن الحصول عليه بميزانية من الوسوم البشريةالتخطيط قبل الإنفاق
distributionalتوزيع وسوم الآلة قريب من الطريقة التي ينقسم بها البشرالمهام الذاتية التي يكون فيها الاختلاف جزءاً من البيانات
threshold_legacyلا ادعاء، فهو يقبل ما فوق ثقة ثابتةالإعدادات المحوَّلة فقط

لا يقول أي من هذه العقود إن الوسوم خالية من الأخطاء. يضع selective_risk حداً أعلى لمعدل الخطأ بين الوسوم المقبولة، وكل عقد يختبر الآلات يقيسها مقابل الأشخاص الذين وسموا العيّنة.

حالة العقد

يحمل كل عقد واحدة من خمس حالات، تظهر في صفحة الإدارة، وفي مخرجات potato label status، وفي الشهادة:

الحالةالمعنى
metنجح الاختبار على السلسلة المتتالية الحالية.
insufficientالوسوم البشرية غير كافية بعد، مع تقدير لعدد الوسوم الإضافية اللازمة. وحين يتجاوز هذا التقدير ما بقي في المدوّنة للسحب، تذكر الحالة أن الهدف لا يمكن بلوغه بهذه المدوّنة.
infeasibleالوسوم كافية، لكن لا تنجح أي قاعدة قبول، مثلاً لأن ثقة الآلة لا تفصل الإجابات الصحيحة عن الخاطئة.
violatedيُظهر تدقيق الوسوم المقبولة أن معدل الخطأ أعلى من الهدف (مع features.drift، المفعّل افتراضياً).
staleتغيّر مصدر أو موجّه أو المخطط منذ آخر اختبار. وتنتظر الوسوم المقبولة في pending_recert.

لا يُقبل الوسم الآلي إلا إذا كان كل عقد selective_risk وthreshold_legacy على مخططه مستوفى ويقبله. فالعقود تحدّد ما يجب أن تستوفيه الوسوم، لذا فإن العقد غير المستوفى يمنع القبول ولا يُتخطّى، وتسمّي الحالة وصفحة الإدارة والشهادة العقدَ غير المستوفى. وحين لا يمكن أن تسري أي قاعدة ولا يجري سحب المزيد (لتعذّر عقدٍ ما، أو لاكتمال عيّنة المعايرة، أو لتعذّر إسقاط أي تقدير)، تذهب العناصر التي لا تزال بلا وسم إلى البشر، ضمن budgets.human_labels.

قسما dev وcert

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

  • dev (humans.dev_fraction، النصف افتراضياً) يُستخدم لملاءمة أدوات المعايرة واختيار العتبات؛
  • cert يختبر القاعدة المختارة، ولا يقرؤه شيء آخر.

النظرات (Looks)

يجري كل اختبار جديد للعقد بمستوى أشدّ، لذا فإن الاختبار من جديد كلما وصلت وسوم لا يضخّم الثقة. تحصل النظرة k على (1 - confidence) * 6 / (pi^2 k^2) من ميزانية الخطأ، ومجموع ذلك عبر كل النظرات الممكنة هو الميزانية كلها، وتحصل النظرة الأولى على 61% منها.

  • تُعدّ النظرات لكل عقد عبر كل السلاسل المتتالية التي اختُبر في ظلها، والعقد الذي يُعاد تسميته يحتفظ بنظرات معرّفه القديم. وتجربة الموجّهات أو النماذج حتى ينجح أحدها تكلّف نظرة في كل مرة. والعودة إلى سلسلة متتالية سابقة نظرة جديدة أيضاً، ولا تُستعاد نتيجتها السابقة.
  • إعادة اختبار البيانات نفسها ليست نظرة جديدة. وسوم cert نفسها، والتنبؤات نفسها، والقاعدة نفسها المختارة على dev تعيد النتيجة المخزّنة. والاختبار الذي تعذّر تشغيله، كأن لا توجد وسوم cert في فئة ما، لا ينفق شيئاً.
  • يختبر potato label certify وسوم cert الجديدة والتنبؤات الجديدة دفعة واحدة، وكذلك ما يقابله في REST وMCP وSDK. وحين لا تتغيّر إلا وسوم dev، يعيد النتيجة المخزّنة مع ملاحظة بأن dev صار يختار قاعدة أخرى، ويختبر --retest تلك القاعدة في النظرة التالية.
  • يُشهِد المخطِّط من تلقاء نفسه كلما وصلت الوسوم. يبقى عقد selective_risk المستوفى مستوفى لسلسلته المتتالية، ويراقبه التدقيق. أما العقد غير المستوفى فيُختبر من جديد حين تزيد وسومه بمقدار الربع، وبعشرة على الأقل. ونتائج ppi وdistributional وno_worse_than_human تقديرات وليست اختبارات نجاح أو فشل، لذا يعيد المخطِّط تقديرها عند المحطات نفسها، ومرة أخرى حين تكتمل عيّنة المعايرة.
  • وسم cert المعدَّل بيانات جديدة. حين يغيّر مُعلِّق إجابته، لا يكلّف التعديل أكثر مما يكلّفه وسم جديد. وإذا أُعيد إلى حالة سبق اختبارها، تعود نتيجة ذلك الاختبار. وإن لم يرَ أي من اختبارات النتيجة المخزّنة أخطاء أكثر بعد التعديل، تبقى النتيجة ونظرتها قائمتين. وإلا ينتظر المخطِّط حتى تزيد الوسوم بمقدار الربع منذ التعديل الأول، فتصير موجة التصحيحات اختباراً واحداً، وتبقى الوسوم المقبولة مقبولة في أثناء ذلك مع ملاحظة على العقد. وحين لا تكون هناك وسوم أخرى آتية، يختبر فوراً، ويختبر الإشهاد الصريح في النظرة التالية.

الوسوم التي أعطاها البشر بعد رؤية إجابة آلية (طلبات التحقق) والوسوم المعطاة خارج طلبات المحرّك لا تُشهِد ولا تقدّر أي شيء أبداً. ويمكنها أن تدرّب نموذجاً مقطَّراً.

selective_risk

يضع selective_risk حداً أعلى لنسبة الوسوم الآلية المقبولة الخاطئة. المفتاح error هو أكبر معدل خطأ مسموح به بين الوسوم المقبولة، وهو إلزامي:

yaml
- id: accuracy
  kind: selective_risk
  schema: sentiment
  error: 0.05          # required: largest tolerated error among accepted labels
  confidence: 0.9
  per_class: true      # test each predicted class separately
  tolerance: 0.5       # graded families only: loss at or below this counts as correct

القاعدة عتبة ثقة لكل مستوى في السلسلة المتتالية، ولكل فئة متنبَّأ بها مع per_class. في كل مستوى عدا الأخير، تُختار العتبة على dev وتُختبر مرة واحدة على cert. أما المستوى الأخير فيجرّب عتبات تبدأ من اختيار dev وتتجه نحو الأكثر تساهلاً، ويختبر كلاً منها بالدور ويتوقف عند أول عتبة تفشل. وهذا الإجراء هو Learn-then-Test بتسلسل ثابت (Angelopoulos et al., 2025). وكل اختبار هو اختبار ذو حدين أحادي الجانب لفرضية أن الخطأ بين الوسوم المقبولة أعلى من error، مع تقسيم المستوى على المستويات والفئات. والمستوى الذي يفشل لا يقبل شيئاً، وتذهب عناصره إلى البشر.

يعتمد ما يُعدّ «صحيحاً» على عائلة المخطط. ترد الخسارة لكل عائلة في الجدول، ويُعدّ الوسم صحيحاً حين تكون خسارته عند tolerance أو دونه:

عائلة المخططالخسارةtolerance الافتراضي
الاختيار الواحد من N (radio، select)0 إن كان الوسم نفسه0
ترتيبي (likert)المسافة على المقياس / (عدد النقاط - 1)0
متصل (slider، number)المسافة / (الحد الأقصى - الحد الأدنى)0.05
متعدد الوسوم (multiselect)1 - تداخل Jaccard0
مناطق الصور (image_annotation)1 - متوسط IoU على الأشكال المتطابقة0.5
مقاطع الصوت والفيديو، temporal_grounding، tiered_annotation1 - متوسط IoU الزمني0.5
الكائنات ثلاثية الأبعاد (spatial_annotation)1 - متوسط IoU ثلاثي الأبعاد0.5
آثار الوكلاء (process_reward، trajectory_eval، ...)نسبة الخطوات المشتركة الموسومة بشكل مختلف0

خسائر المناطق والمقاطع والكائنات ثلاثية الأبعاد والآثار هي نفسها التي يستخدمها تقرير الاتفاق على /admin/iaa، لذا تُقيَّم الآلة مقابل شخص بالطريقة التي يُقيَّم بها شخصان أحدهما مقابل الآخر. أما مخططات النص الحر والمقارنة الزوجية فليست لها عائلة بعد، وتسردها الشهادة على أنها غير مدعومة.

يحتاج الاختبار إلى أن تكون كل مجموعة مختبَرة من عناصر cert عيّنة منتظمة. والمجموعة التي سُحبت عناصرها باحتمالات غير متساوية لا تُختبر، وتسمّيها النتيجة.

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

metrics.accepted_by_tier هو تغطية القاعدة للمجتمع الإحصائي كله، بما فيه عناصر المعايرة، وليس عدداً للوسوم الآلية المسلَّمة. أما سطر "Machine labels accepted, by source" في الشهادة فيعدّ تلك الوسوم.

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

ppi

يُبلغ ppi عن فترة لانتشار كل وسم، أو لمتوسط درجة، مصحَّحة لأخطاء الآلة:

yaml
- id: prevalence
  kind: ppi
  schema: sentiment
  estimand: prevalence   # or mean, for numeric scores
  by: language           # optional: an interval per value of this item field
  confidence: 0.95
  max_width: 0.05        # optional: met once every interval is at most this wide

يصحّح الاستدلال المدعوم بالتنبؤ (Angelopoulos et al., 2023) تقدير الآلة بخطئها على العيّنة الموسومة بشرياً. وتبقى الفترة صالحة أياً كانت جودة الآلة. فالآلة الجيدة تجعلها أضيق مما يستطيعه البشر وحدهم، والآلة الرديئة لا تجعلها أوسع. ومع احتمالات إدراج متساوية يستخدم المحرّك PPI++ بوزن مضبوط، ومع احتمالات غير متساوية (السحب الطبقي أو السحب الموجَّه بعدم اليقين) يستخدم مقدّر الفرق Horvitz-Thompson. والوسم الآلي الذي يستخدمه هو الوسم الذي كانت السلسلة المتتالية ستسلّمه. ويُنسخ الحقل by من العناصر حين تُسجَّل. ومن دون max_width، يُستوفى العقد بمجرد أن تكون لديه وسوم كافية للإبلاغ.

no_worse_than_human

يسأل no_worse_than_human هل تتفق الآلة مع البشر بقدر ما يتفق معهم شخص على الأقل:

yaml
- id: replaces-a-person
  kind: no_worse_than_human
  schema: verdict
  epsilon: 0.1

يُجري العقد اختبار المُعلِّق البديل (Calderon et al., 2025). فهو يستبعد كل شخص بالدور، ويختبر هل تتفق الآلة مع بقية الأشخاص بقدر ما يتفق معهم الشخص المستبعَد على الأقل، في حدود epsilon. وتنجح الآلة حين تتفوق على نصف الأشخاص على الأقل، مع ضبط معدل الاكتشاف الخاطئ عبر الأشخاص.

يحتاج الاختبار إلى عناصر وسمها عدة أشخاص. اضبط humans.overlap (نسبة العيّنة الموسومة أكثر من مرة) وhumans.overlap_k (عدد الأشخاص لكل عنصر، 3 على الأقل)، ويحتاج الاختبار إلى 3 مُعلِّقين على الأقل مع 30 عنصراً لكل منهم. ويبقى العقد insufficient حتى يحصل عليها. استخدم هذا العقد حين يكون هدف الدقة الثابت سيقيس ضجيج المُعلِّقين في الغالب. فإذا اتفق شخصان حريصان في 85% من الحالات، لا يمكن إثبات أن أي واسم «مصيب» بنسبة 95%.

budget_first

يُسقط budget_first ما يمكن الحصول عليه بميزانية من الوسوم البشرية قبل أن تنفقها:

yaml
- id: plan
  kind: budget_first
  schema: sentiment
  human_labels: 500      # or human_usd, priced at the crowd reward

يأتي الإسقاط من وسوم dev المجموعة حتى الآن. ولكل هدف خطأ على شبكة من القيم، يعطي نسبة المدوّنة التي يمكن الإشهاد للآلات بوسمها بهذه الميزانية، ومدى اتساع كل فترة انتشار. ويكون العقد met بمجرد توفر وسوم dev كافية للإسقاط منها. ولا يَعِد بشيء عن الوسوم، وهو ما يفعله selective_risk وppi بعد وصول الوسوم.

distributional

يقارن distributional توزيع وسوم الآلة بالطريقة التي ينقسم بها البشر، في المهام الذاتية التي يختلف فيها البشر لأسباب هي جزء من البيانات:

yaml
- id: disagreement
  kind: distributional
  schema: offensiveness
  max_distance: 0.15     # optional
  groups_by: age_band    # optional: a prestudy question whose answer groups the annotators

لكل عنصر وسمه عدة أشخاص (humans.distribution_k، 5 افتراضياً) توزيعُ وسوم بشري. ويُبلغ العقد عن متوسط مسافة Jensen-Shannon بين توزيع الآلة وتوزيع البشر، مع فترة bootstrap. ويُبلغ أيضاً عن سقف للضجيج، هو المسافة نفسها بين نصفين عشوائيين من الأشخاص على كل عنصر. والآلة التي تكون أقرب إلى البشر مما هم بعضهم إلى بعض قريبة بقدر ما تسمح به البيانات.

توزيع الآلة هو احتمالاتها حيث يعطيها المصدر (نماذج القرار، k_sample، logprob)، أو وسمها في صورة متجه one-hot. ويُستوفى العقد حين يكون الطرف الأعلى للفترة max_distance على الأكثر، أو، من دون max_distance، بمجرد وجود 20 عنصراً وسمها 3 أشخاص أو أكثر. وحين يكون الطرف الأدنى للفترة فوق max_distance، يكون العقد infeasible، لأن مزيداً من العناصر لا يفعل سوى تضييق الفترة حول مسافة كبيرة أكثر من اللازم.

مع groups_by، يُبلغ عن الأرقام نفسها لكل مجموعة من المُعلِّقين. ويُبنى توزيع كل مجموعة على عنصر ما من أشخاص تلك المجموعة وحدهم، كما تُقرأ من إجاباتهم عن سؤال ما قبل الدراسة المسمّى، وإن لم يُجب أحد عن السؤال يذكر العقد ذلك.

threshold_legacy

يقبل threshold_legacy الوسوم الآلية فوق ثقة ثابتة، ولا يُجري أي اختبار إحصائي:

yaml
- id: old-rule
  kind: threshold_legacy
  schema: sentiment
  threshold: 0.8

يكتب potato label migrate-config هذا العقد لـ icl_labeling، عند confidence_threshold القديم، فيتصرف الإعداد المحوَّل كما كان من قبل، ويمكنك أيضاً كتابته يدوياً. وتضع الشهادة على هذه الوسوم علامة غير مُشهَد عليها، وتُبلغ عن خطئها المقيس على وسوم المعايرة، ويعطيها التصدير الحالة accepted_uncertified.

نتائج الدراسات المثالية

شُغّلت الدراسات المثالية الثلاث تحت examples/labeling-engine/ مع توجيه مصادر LLM والحَكَم والرؤية إلى Gemma 12B على خادم vLLM، بدلاً من نماذج Ollama التي تستخدمها الإعدادات المودعة في المستودع. ويعرض ملف README لكل مثال كتلة المصدر التي غُيّرت، ومع إعدادات Ollama الافتراضية ستختلف الأرقام.

  • مشاعر النصوص (481 مراجعة، وGemma 12B مع ثقة logprob بوصفه المستوى الأخير). استُوفي selective_risk عند 10% و0.9 على 165 وسماً بشرياً، وقُبل 316 وسماً آلياً. وكان خطؤها المقيس مقابل الوسوم الحقيقية 7.6%، وغطّت فترات PPI الانتشار الحقيقي للوسوم الثلاثة كلها.
  • الصور (128 صورة من COCO، وYOLOv8n وGemma 12B بوصفه نموذج الرؤية). أُشهِد على وسم يشير إلى وجود شخص عند 10%. وبقي عقد الصناديق insufficient، لأن صناديق YOLOv8n كانت خاطئة في 32% من صور dev عند IoU 0.5.
  • آثار الوكلاء (288 أثراً، وGemma 12B بوصفه الحَكَم). أصاب الحَكَم في 80% من الآثار، لكن ثقته كانت 1.0 طوال الوقت، فكان selective_risk متعذّراً. وكان اختبار المُعلِّق البديل غير كافٍ، إذ بلغت الآلة 0.82 مقابل 0.93 للبشر. وقدّر PPI نجاح المهمة بـ 0.66 [0.57, 0.76]، في حين كانت القيمة الحقيقية 0.60 وقال الحَكَم وحده 0.76، أي أعلى بـ 16 نقطة.

قراءة إضافية

للاطلاع على تفاصيل التنفيذ، راجع الوثائق المصدرية.

المراجع

  1. Angelopoulos, A. N., Bates, S., Candès, E. J., et al. (2025). Learn then test: Calibrating predictive algorithms to achieve risk control. The Annals of Applied Statistics. https://doi.org/10.1214/24-AOAS1998
  2. Angelopoulos, A. N., Bates, S., Fannjiang, C., et al. (2023). Prediction-powered inference. Science, 382(6671). https://doi.org/10.1126/science.adi6000
  3. Angelopoulos, A. N., Duchi, J. C., and Zrnic, T. (2023). PPI++: Efficient prediction-powered inference. arXiv. https://arxiv.org/abs/2311.01453
  4. Calderon, N., Reichart, R., and Dror, R. (2025). The alternative annotator test for LLM-as-a-judge: How to statistically justify replacing human annotators with LLMs. Proceedings of ACL 2025. https://aclanthology.org/2025.acl-long.782/