الوسم مع النموذج في الحلقة بالتصنيفات المسبقة وإعادة التدريب
اعرض إجابات نموذج مدرَّب بوصفها تصنيفات مسبقة، وراجع التصنيفات المسبقة الأقل ثقة أولاً، وأعد تدريب النموذج كلما صحّح المعلّقون الإجابات.
جديد في v2.14.0
يمرّر هذا الدرس دراسة مشاعر واحدة في دورة النموذج في الحلقة. يتدرّب نموذج على التصنيفات الأولى، وتظهر تنبؤاته للمعلّقين بوصفها تصنيفات مسبقة، ويصحّح المراجعون التصنيفات المسبقة الأقل ثقة، وتغذّي التصحيحات التشغيلة التالية. الدرس لأصحاب الدراسات الذين درّبوا نموذجاً أول، كما في درّب نموذجك الأول، ويريدون الآن أن يعمل المعلّقون إلى جانب النموذج. وكل خطوة إلا واحدة تعمل على حاسوب محمول مع sklearn-text. أما خطوة الاقتناء فتدرّب محوِّلاً صغيراً وتستغرق بضع دقائق على المعالج.
مشروع المشاعر
المشروع هو مثال تدريب النماذج في Potato، 160 مراجعة منتجات اصطناعية بمخطط radio واحد اسمه sentiment. التصنيف المسبق هو تصنيف واحد اقترحه نموذج لعنصر قبل أن يصنّفه أي شخص. والكتابة الراجعة هي الخطوة التي تحوّل تنبؤات تشغيلة تدريب إلى تصنيفات مسبقة في صفحة التعليق التوضيحي. وبنهاية الدرس يدرّب المشروع مصنِّفاً على أول 120 تصنيفاً، وينشر تصنيفات مسبقة على المراجعات المتبقية، ويقدّم المراجعات الأقل ثقة أولاً، ويعيد التدريب كلما وصلت تصنيفات جديدة، ويحتفظ بقسم محجوز إصداراً من مجموعة بيانات.
تجعل التصنيفات المسبقة التعليق أسرع، وتشدّ المعلّقين أيضاً نحو إجابة النموذج. يغطي الوسم بمساعدة نموذج مدرَّب على تصنيفاتك متى تستحق هذه المقايضة، ويغطي كيف تميّز المراجعة الحقيقية من الإقرار الآلي في البيانات المصنّفة مسبقاً المعلّقين الذين يقبلون التصنيفات المسبقة دون قراءتها. يستثني ملف التهيئة أدناه حصة من المعلّقين من كل تصنيف مسبق منذ البداية. وتتيح الإجابات المستثناة للدراسة قياس هذا الشدّ.
أعدّ المشروع
ثبّت Potato. لا يحتاج sklearn-text إلى شيء خارج الحزمة الأساسية:
pip install --upgrade potato-annotationانسخ examples/ai-assisted/model-training/ من مستودع Potato إلى مجلد جديد. يضم المجلد data/reviews.json بالمراجعات الـ160، وdata/gold.json، وهو التصنيفات التي يجيب منها المحاكي. استبدل config.yaml الخاص بالمثال بملف التهيئة هذا:
annotation_task_name: "Review Sentiment (model in the loop)"
data_files:
- "data/reviews.json"
item_properties:
id_key: "id"
text_key: "text"
task_dir: "."
output_annotation_dir: "annotation_output"
require_password: false
admin_api_key: "demo-admin-key"
num_annotators_per_item: 1
assignment_strategy: llm_confidence
annotation_schemes:
- annotation_type: "radio"
name: "sentiment"
description: "Is this review positive or negative?"
labels:
- "positive"
- "negative"
sequential_key_binding: true
ai_support:
holdout:
fraction: 0.2
salt: "review-sentiment"
datasets:
enabled: true
model_training:
enabled: true
writeback:
schemas: ["sentiment"]
include_unlabeled: true
min_confidence: 0.6تؤدي كل كتلة أُضيفت إلى ملف تهيئة المثال مهمة واحدة:
assignment_strategy: llm_confidenceيقدّم كل عنصر، وأقل التصنيفات المسبقة ثقة أولاً. وتأتي العناصر التي لا تنبؤ لها في الآخر، بحسب ترتيب الطابور.ai_support.holdoutيحجب كل أشكال مساعدة الذكاء الاصطناعي، ومنها التصنيفات المسبقة، عن 20% من أزواج المعلّق والعنصر. اضبط الاستثناء قبل بدء التعليق التوضيحي، لأن تغييرfractionأوsaltفي منتصف الدراسة يعيد خلط المجموعات.datasets.enabledيتيح حفظ تقسيم تشغيلة إصداراً من مجموعة بيانات في الخطوة الأخيرة.writeback.schemasيسمّي المخططات التي يرى المعلّقون تنبؤاتها. القائمة فارغة افتراضياً، ولا يغيّر تفعيل التدريب شيئاً في صفحة التعليق التوضيحي حتى تسمّي القائمة مخططاً.include_unlabeled: trueيجعل كل تشغيلة تتنبأ بالمراجعات التي لم يصنّفها أحد بعد. ومن دون هذا الإعداد، لا تتنبأ التشغيلة إلا بعناصر val وtest المحجوزة لها. وهذه العناصر تحمل تصنيفات بشرية أصلاً.min_confidence: 0.6يُبقي التنبؤ الذي تقل ثقته عن 0.6 بعيداً عن أنظار المعلّقين. ويحتفظ Potato بالتنبؤ مع التشغيلة مع ذلك.
يُبقي writeback.field القيمة الافتراضية predictions، وهي حقل العنصر الذي تُكتب إليه التصنيفات المسبقة. ومع القيمة الافتراضية لا حاجة إلى كتلة pre_annotation. تحقّق من ملف التهيئة قبل تشغيل الخادم:
potato validate config.yaml
potato start config.yaml -p 8000صنّف مجموعة أولية
يحتاج النموذج المدرَّب على تصنيفاتك إلى تصنيفات أولاً. يرفض sklearn-text الملاءمة إذا كان في قسم التدريب أقل من 10 عناصر. صنّف بعض المراجعات على http://localhost:8000، أو دع ثلاثة معلّقين محاكَين يصنّف كل منهم 40 مراجعة من ملف gold:
python -m potato.simulator --server http://localhost:8000 --users 3 \
--strategy gold_standard --competence good=1.0 --max-annotations 40 \
--gold-file data/gold.json --sequential --fast-mode --no-exportيعطي --competence good=1.0 كل معلّق محاكى الملف good، الذي يجيب 80–90% من المراجعات إجابة صحيحة. ومع num_annotators_per_item: 1، يغطي المعلّقون الثلاثة 120 مراجعة مختلفة ويتركون 40 غير مصنّفة للنموذج.
درّب واقرأ تقرير الكتابة الراجعة
افتح http://localhost:8000/admin/training بمفتاح المسؤول، واختر sklearn-text والمخطط sentiment، وانقر Train now. وتبدأ التشغيلة نفسها من سطر الأوامر:
curl -X POST -H "X-API-Key: demo-admin-key" -H "Content-Type: application/json" \
http://localhost:8000/admin/training/api/runs \
-d '{"trainer": "sklearn-text", "schemas": ["sentiment"]}'تستغرق التشغيلة بضع ثوان. يقسّم Potato المراجعات المصنّفة إلى train وval وtest (70% و15% و15% افتراضياً)، ويلائم المصنِّف على train، ويقيس أداءه على val وtest. ثم يبلّغ مسار الحالة الدرجات وتقرير الكتابة الراجعة:
curl -H "X-API-Key: demo-admin-key" http://localhost:8000/admin/training/api/statusأعادت تشغيلة واحدة من هذا الدرس ما يلي، مقتطعاً إلى الحقول المهمة هنا:
{
"metrics": {
"heldout_metric": "val macro_f1",
"heldout_score": 0.7333,
"n_train": 76.0,
"val_n": 20.0,
"test_n": 24.0,
"test_macro_f1": 0.8222
},
"writeback": {
"n_read": 84,
"n_written": 78,
"n_skipped_low_confidence": 6,
"n_skipped_train_split": 0,
"n_skipped_rejected": 0,
"n_skipped_schema_not_enabled": 0,
"summary": "Published 78 prediction(s) as prelabels."
}
}تنبأت التشغيلة بـ84 مراجعة، هي 44 مراجعة من val وtest مضافاً إليها 40 لم يصنّفها أحد. نزلت ست تنبؤات دون حد 0.6، وصارت الثماني والسبعون الباقية تصنيفات مسبقة. ستختلف درجاتك وأعدادك من تشغيلة إلى أخرى، لأن المعلّقين المحاكَين يرتكبون أخطاءً عشوائية ويصنّفون مراجعات مختلفة. يسمّي كل عدّاد تخطٍّ فحصاً من فحوص الكتابة الراجعة الأربعة، وتسردها التهيئة بالترتيب.
لا تغيّر الكتابة الراجعة تصنيفاً بشرياً أبداً. تدخل التنبؤات في بيانات العنصر، وتبقى التعليقات التوضيحية في حالة كل معلّق نفسه. سجّل الدخول باسم مستخدم جديد لترى النتيجة. تصل المراجعة التالية وإجابة النموذج محددة:
يرى المعلّق الجديد إجابة النموذج محددة، ويؤكدها أو يغيّرها
لا يُحفظ التصنيف المسبق ما دام المعلّق يكتفي بالنظر إليه. ويصبح التصنيف المسبق إجابة المعلّق حين يعدّله أو ينتقل إلى المراجعة التالية. ولذلك لا تُحسب المراجعة التي لم تُجَب منتهية، ولا تعود إجابة النموذج إلى التدريب بوصفها تصنيفاً بشرياً.
اقرأ درجة العناصر المحجوزة قبل عرض التصنيفات المسبقة على المعلّقين. فدرجة val البالغة 0.73 macro-F1 على 20 مراجعة تترك مجالاً واسعاً لتصنيفات مسبقة خاطئة. ويسرد مرجع الكتابة الراجعة في الوثائق الأصلية عدادات التخطي المتبقية وكيف يعرض كل نوع من التعليق التوضيحي التصنيف المسبق.
راجع التصنيفات المسبقة الأقل ثقة
تحت llm_confidence، يحصل المعلّق التالي على المراجعات الـ40 غير المصنّفة مرتبةً بثقة التصنيف المسبق المنشور، من الأدنى. وتقدّم استراتيجية ثانية التصنيفات المسبقة لضبط الجودة لا للوسم. يقدّم assignment_strategy: model_review العناصر التي تحمل تصنيفاً مسبقاً فقط، وأقلها ثقة أولاً، ويستبعد العناصر التي لا تنبؤ لها. بدّل إلى model_review لجولة مراجعة على مخرجات النموذج، وابقَ على llm_confidence ما دام كل عنصر يحتاج إلى تصنيف. ويشرح مرجع مراجعة النموذج في الوثائق الأصلية الطابورين كليهما.
يعرض تقرير مراجعة النموذج الطابور وما تركه النموذج:
curl -H "X-API-Key: demo-admin-key" http://localhost:8000/admin/model-reviewالتقرير من التشغيلة أعلاه، مع اقتطاع القوائم:
{
"n_items": 160,
"n_prelabelled": 78,
"queue": ["review_062", "review_024", "review_044", "review_122", "..."],
"worst_first": ["review_062", "review_024", "review_044", "..."],
"n_empty": 82,
"empty_prediction_ids": ["review_006", "review_007", "review_008", "..."],
"provenance": {
"review_062": {
"sentiment": {
"run_id": "20261104T043431-de5686",
"trainer": "sklearn-text",
"heldout_metric": "val macro_f1",
"heldout_score": 0.7333
}
}
}
}رتبة العنصر في queue هي أدنى ثقة لتنبؤاته عبر المخططات. وworst_first هو أقل 20% من الطابور ثقة، ولا يقل عن عنصر واحد أبداً. ويسرد empty_prediction_ids العناصر التي لا تصنيف مسبقاً لها. وفي هذا المشروع تتألف العناصر الفارغة الـ82 من 76 مراجعة تدريب و6 تنبؤات دون الحد الأدنى. ولا تحصل مراجعات التدريب على تصنيف مسبق أبداً.
يسجّل provenance مصدر كل تصنيف مسبق. ولكل عنصر في الطابور كتبت تشغيلة تدريب تصنيفه المسبق، يسمّي المدخل التشغيلة والمُدرِّب ودرجة العناصر المحجوزة للتشغيلة. أما التصنيف المسبق الذي جاء مع ملف البيانات فلا مدخل له. وحين يبدو تصنيف مسبق خاطئاً، يقود معرّف التشغيلة إلى صفحة التشغيلة في /admin/training/runs/<run_id>، وهي تعرض المعاملات وقسم كل عنصر.
تسجيل الأحكام
الحكم يسجّل تقدير مراجع لتصنيف مسبق واحد، منفصلاً عن تعليق المراجع التوضيحي. "كان النموذج مصيباً" و"اختار شخص هذا التصنيف باستقلال" واقعتان مختلفتان، والفصل بينهما يُبقي دقة النموذج قابلة للقياس. يقبل Potato الأحكام عبر مسار واحد، من المعلّق الذي أُسند إليه العنصر أو من مسؤول بمفتاح API:
curl -X POST -H "Content-Type: application/json" -H "X-API-Key: demo-admin-key" \
-d '{"instance_id": "review_062", "verdict": "correct", "schema_name": "sentiment"}' \
http://localhost:8000/api/model-review/verdictيعني accept أن النموذج كان مصيباً، ويعني correct أن شخصاً غيّر الإجابة، ويعني reject أن النموذج كان مخطئاً. يزيل reject التصنيف المسبق عن العنصر فوراً، ولا تنشر التشغيلات اللاحقة تنبؤاً لذلك العنصر والمخطط مرة أخرى. ويُحتسب reject مع ذلك ضد دقة النموذج، بوصفه تصنيفاً مسبقاً مرفوضاً لا تصنيفاً فاته النموذج، وإرسال الحكم نفسه مرة أخرى لا يغيّر أي عدّاد. وينقل الحكم correct العنصر إلى قسم train في كل تشغيلة لاحقة، كما يصف قسم التصحيحات أدناه. وتسجيل حكم ثانٍ على العنصر نفسه يحل محل الأول، ويُرفض الحكم المجهول بالرمز HTTP 400.
رتّب الطابور بدرجة اقتناء
يقدّم ترتيب الثقة أولاً العناصر التي تكون فيها أعلى إجابات النموذج أضعف. ودالة الاقتناء في التعلّم النشط ترتّب العناصر غير المصنّفة بحسب مقدار ما يفيده تصنيف كل عنصر للنموذج التالي. يقبل hf-text-classification وhf-image-classification المعامل acquisition الذي يكتب درجة كهذه على كل تنبؤ، ثم يقدّم llm_confidence أعلى درجة أولاً. ويحتاج المُدرِّب إلى إضافة تدريب النصوص:
pip install "potato-annotation[train-text]"ابدأ تشغيلة بالمعامل، من حقل Parameters في صفحة التدريب أو من API:
curl -X POST -H "X-API-Key: demo-admin-key" -H "Content-Type: application/json" \
http://localhost:8000/admin/training/api/runs \
-d '{"trainer": "hf-text-classification", "schemas": ["sentiment"],
"params": {"acquisition": "margin"}}'يقبل المعامل خمس قيم:
acquisition | الدرجة المكتوبة على كل تنبؤ |
|---|---|
least_confident | الافتراضي. لا تُكتب درجة، وتبقى العناصر بترتيب الثقة. |
margin | 1 ناقص الفرق بين أعلى احتمالين. |
entropy | إنتروبيا التوزيع المتنبَّأ به، مقيسة إلى 0–1. |
bald | المعلومات المتبادلة بين التصنيف وأوزان النموذج، من mc_samples (الافتراضي 10) تمريرات أمامية مع تشغيل dropout. الطريقة من Houlsby et al. (2011). تكون الدرجة عالية حيث ينقص النموذجَ البيانات ومنخفضة حيث يكون العنصر ملتبساً مهما بلغت البيانات. |
coreset | مسافة كل عنصر إلى أقرب عنصر تدريب أو عنصر سبق اختياره على تضمينات النموذج. الطريقة من Sener and Savarese (2018). تنشر الدرجة الطابور على البيانات، فلا تأخذ عشر نسخ متقاربة من عنصر صعب واحد المراكز العشرة الأولى. |
يحمل التنبؤ من تشغيلة margin الدرجة بجانب الثقة:
{"label": "positive", "confidence": 0.5207,
"probabilities": {"negative": 0.4793, "positive": 0.5207},
"acquisition": 0.9586}تحت llm_confidence تأتي أولاً العناصر ذات درجة الاقتناء، ثم العناصر التي لها ثقة فقط، ثم العناصر التي لا ثقة لتنبؤها، ثم العناصر التي لا تنبؤ لها. يعمل acquisition على المخططات ذات التصنيف الواحد (radio وselect وlikert). ويقرأ الترتيب التصنيفات المسبقة المنشورة، فيجب أن يكون المخطط في writeback.schemas، ويجب ضبط include_unlabeled: true كي تحصل العناصر غير المصنّفة على درجة أصلاً. ويتجاهل model_review الدرجة ويُبقي ترتيب الثقة، لأن جولة المراجعة تبحث عن إجابات النموذج الخاطئة. وفي القسم الخاص باختيار ما يُسأل عنه تالياً في الوثائق الأصلية التفاصيل.
قارن درجة العناصر المحجوزة للتشغيلة الجديدة بتشغيلة sklearn-text قبل أن تُبقي على تصنيفاتها المسبقة. يحتفظ Potato بتنبؤ واحد لكل عنصر ومخطط، ويحل تنبؤ التشغيلة الأحدث محل الأقدم. وحيث يُخزَّن تنبؤ التشغيلة الأحدث ولا يُعرض، مثلاً تحت min_confidence، يُزال أيضاً التصنيف المسبق للتشغيلة الأقدم عن العنصر، كما تصف التهيئة. وفي تشغيلة واحدة من هذا الدرس على معالج، حقّقت ثلاث حقب من النموذج الافتراضي (epochs: 3 في params) 0.52 macro-F1 على test باستخدام 84 مراجعة تدريب، وهي أدنى من تشغيلة sklearn-text على التصنيفات نفسها، ونشرت التشغيلة 37 تصنيفاً مسبقاً. ولسحب التصنيفات المسبقة لتشغيلة، احذف تنبؤاتها:
curl -X DELETE -H "X-API-Key: demo-admin-key" \
http://localhost:8000/admin/training/api/runs/<run_id>/predictionsيزيل السحب التنبؤات المخزّنة للتشغيلة ويرفع تصنيفاتها المسبقة عن العناصر. ولا تعود التصنيفات المسبقة لتشغيلة أقدم، فدرّب من جديد لإعادة النشر.
أعد التدريب تلقائياً
يبدأ auto_retrain تشغيلة بنفسه كلما وصلت تعليقات توضيحية. أضف الكتلة إلى model_training متى كانت درجة العناصر المحجوزة لتشغيلة تبرر عرض التصنيفات المسبقة:
model_training:
enabled: true
writeback:
schemas: ["sentiment"]
include_unlabeled: true
min_confidence: 0.6
auto_retrain:
enabled: true
trainer: sklearn-text
schemas: ["sentiment"]
update_frequency: 25
min_interval_s: 600يفحص Potato بعد كل حفظ لتعليق توضيحي. تبدأ تشغيلة حين يصل 25 تعليقاً توضيحياً منذ آخر تشغيلة تلقائية وتمر 600 ثانية منذ انتهاء آخر تشغيلة. القيمتان هما الافتراضيتان، وtrainer وschemas مطلوبان. ويمرّر params معاملات المُدرِّب، كما يفعل حقل Parameters في صفحة التدريب.
شغّل auto_retrain بعد أول تشغيلة يدوية لا من أول تعليق توضيحي. فالمشروع الذي لا تشغيلة له بعد يتدرّب حالما يبلغ update_frequency من التعليقات التوضيحية. ومع ضبط update_frequency: 20 منذ البداية، تدرّبت أول تشغيلة تلقائية في هذا المشروع على 12 مراجعة، وحقّقت val macro-F1 يساوي 1.0 على 3 مراجعات، ونشرت 72 تصنيفاً مسبقاً. ودرجة عناصر محجوزة على 3 مراجعات لا تقول شيئاً تقريباً عن الـ72 التالية.
حين يقرر فحص ألا يبدأ تشغيلة، يعطي skip_reason في /admin/training/api/status السبب، مثل "waiting for 3 more annotation(s)" أو "waiting 299 more second(s) since the last run". ولا تنضم التشغيلات التلقائية إلى طابور التشغيلات. وأول تعليق توضيحي يُحفظ بعد أن يفرغ الطابور يطلق فحصاً جديداً. والعدّادات في الذاكرة، وبعد إعادة التشغيل يعدّ المشروع الذي سبق أن شغّل تشغيلة التعليقات الجديدة منذ إعادة التشغيل. والمُدرِّب الذي يحتاج ترخيصه إلى تأكيد (ultralytics-detect وultralytics-segment وlayoutlmv3) يحتاج أيضاً إلى accept_licence: true في الكتلة، وإلا تُتخطى كل تشغيلة تلقائية. وملف التهيئة الكامل بالكتلتين يجتاز potato validate config.yaml --strict.
العناصر المصححة والمثبتة في التدريب
يدخل نوعان من العناصر قسم train في كل تشغيلة لاحقة، أياً كان مكان العنصر في التقسيم الثابت. النوع الأول عنصر له حكم correct. تأتي التصحيحات من العناصر التي كان النموذج أسوأ فيها، وفي val أو test ستقيس التصحيحات النموذج على عينة من أخطائه هو. ولا تنقل أحكام accept وreject العنصر. والنوع الثاني عنصر مثبّت، يرسله المسؤول إلى التدريب يدوياً:
curl -X POST -H "X-API-Key: demo-admin-key" -H "Content-Type: application/json" \
http://localhost:8000/admin/training/api/pinned \
-d '{"instance_ids": ["review_007", "review_008"]}'يتدرّب العنصر المثبّت متى صنّفه أحد، وإلى ذلك الحين تعدّه كل تشغيلة في الانتظار. ومع curation: {enabled: true}، يثبّت الزر Train on these بجوار شريحة في صفحة الفهرس كل ما تطابقه الشريحة، مثل الشريحة المضمّنة model-found-nothing. ويُلغي DELETE /admin/training/api/pinned التثبيت.
تسجّل التشغيلة التي نقلت عناصر محجوزة إلى train تحذيراً بالعدد. وبعد حكم correct واحد، سجّلت التشغيلة التالية في هذا الدرس ما يلي:
1 held-out item(s) moved to train (corrected: 1). Held-out scores are computed without them, so they are not directly comparable with a run that had them.توجد الأعداد في manifest.json الخاص بحزمة التشغيلة، تحت stats.forced_train. قارن درجات العناصر المحجوزة عبر التشغيلات مع وضع التحذير في الحسبان، لأن التشغيلتين قاستا عناصر مختلفة.
احفظ قسم test لتشغيلة مجموعةَ بيانات
تتغير درجة العناصر المحجوزة بتغيّر التقسيمات، ومجموعة ثابتة من العناصر هي ما يجعل نموذجين قابلين للمقارنة. يحفظ القسم Keep this split as a dataset في صفحة التشغيلة عناصر val أو test أو train للتشغيلة، مع تصنيفاتها البشرية المتفق عليها، إصداراً جديداً من مجموعة بيانات. اختر القسم، واكتب اسم مجموعة البيانات، وانقر Save as dataset version. ويقبل المسار الذي يقف خلف الزر الطلب نفسه من سطر الأوامر:
curl -X POST -H "X-API-Key: demo-admin-key" -H "Content-Type: application/json" \
http://localhost:8000/admin/training/api/runs/<run_id>/pin-split \
-d '{"dataset": "sentiment-test", "split": "test"}'تسمّي الاستجابة الإصدار الجديد وعدد العناصر، وهنا 23 مراجعة test حُفظت إصداراً v0001. لا يتغير الإصدار بعد الحفظ، فيمكن لاحقاً تقييم نماذج وموجّهات LLM في مشغّل تجارب مجموعات البيانات على هذه العناصر بالذات. والحفظ في مجموعة بيانات لها إصدارات يبدأ إصداراً جديداً يضم هذا القسم وحده، فلا تختلط عناصر val لتشغيلة لاحقة بعناصر تدرّبت عليها التشغيلة اللاحقة. وتستبعد مدخلات كل مثال حقل التصنيف المسبق، فلا يستطيع التقييم قراءة إجابة النموذج. ويعيد المسار HTTP 400 حين لا يكون datasets.enabled مضبوطاً.
استثناء المعلّقين من التصنيفات المسبقة
تُبقي الكتلة ai_support.holdout في ملف التهيئة 20% من أزواج المعلّق والعنصر بلا مساعدة منذ أول تعليق توضيحي. وفي الزوج المستثنى لا تعرض صفحة التعليق التوضيحي تصنيفاً مسبقاً، وتستبعد بيانات العنصر المرسلة إلى المتصفح كلاً من writeback.field (هنا predictions) وpre_annotation.field. والسحب تجزئة مملّحة لكل معلّق وعنصر، فيبقى الزوج في المجموعة نفسها في كل زيارة وبعد إعادة التشغيل. ومع عدة معلّقين لكل مراجعة، تحصل معظم المراجعات على معلّقين بمساعدة وآخرين مستثنين. ويقارن تبويب AI influence في لوحة الإدارة المجموعتين في عدد مرات تطابق الإجابات مع النموذج، وعدد مرات تطابقها مع gold، والاتفاق داخل كل مجموعة. ومع num_annotators_per_item: 1 تقع كل مراجعة في مجموعة واحدة فقط، فارفع القيمة فوق 1 في دراسة تقيس الأثر. ويشرح الوسم بمساعدة نموذج مدرَّب على تصنيفاتك كيف تقرأ المقارنة.
قراءات إضافية
- يشرح تدريب النماذج حلقة التدريب وصفحة التدريب.
- تسرد تهيئة تدريب النماذج كل مفتاح في
writebackوauto_retrainمع قيمه الافتراضية. - يجهّز درّب نموذجك الأول هذا المشروع وأول تشغيلة
sklearn-text. - يشغّل درّب نماذج الكشف والتجزئة على التعليقات التوضيحية للصور الحلقة نفسها بكاشف مربعات على الصور.
- يغطي الوسم بمساعدة نموذج مدرَّب على تصنيفاتك متى توفّر التصنيفات المسبقة الوقت ومتى ترسّخ الإجابات.
- يكشف كيف تميّز المراجعة الحقيقية من الإقرار الآلي في البيانات المصنّفة مسبقاً المعلّقين الذين يقبلون التصنيفات المسبقة دون قراءتها.
- يغطي التعلّم النشط اختيار العنصر التالي دون عرض إجابة نموذج.
- يعطي مرجع تدريب النماذج في الوثائق الأصلية كل فحص كتابة راجعة وكل مسار.
المراجع
- Houlsby, N., Huszár, F., Ghahramani, Z., and Lengyel, M. (2011). Bayesian Active Learning for Classification and Preference Learning. arXiv:1112.5745. https://arxiv.org/abs/1112.5745
- Sener, O., and Savarese, S. (2018). Active Learning for Convolutional Neural Networks: A Core-Set Approach. ICLR 2018. https://arxiv.org/abs/1708.00489