التعلم النشط
أعد ترتيب طابور التعليق التوضيحي في Potato حسب عدم يقين النموذج، مع خمس استراتيجيات استعلام ومصنّفات sklearn ومعالجة البدء البارد واستمرارية النموذج عبر عمليات إعادة التشغيل.
يعيد التعلم النشط ترتيب طابور التعليق التوضيحي بحيث يرى المعلّقون الحالات التي يكون النموذج أقل ثقة بشأنها، بدلاً من المرور على المدوّنة بالترتيب الذي وصلت به.
كيف يعمل
- اجمع مجموعة أولية من التعليقات التوضيحية
- درّب مصنّفاً على ما عُلِّم حتى الآن
- قيّم المجموعة غير المعلَّمة حسب عدم اليقين
- أعد ترتيب الطابور لوضع الحالات الأكثر عدم يقين في المقدمة
- علّق على الحالات ذات الأولوية
- أعد التدريب دورياً مع تراكم التعليقات التوضيحية
وجّه جهد التعليق التوضيحي إلى حيث يتعلّم النموذج أكثر
التهيئة
الإعداد الأساسي
active_learning:
enabled: true
schema_names:
- sentiment
min_annotations_per_instance: 1
min_instances_for_training: 20
update_frequency: 50
max_instances_to_reorder: 1000القيمة الافتراضية لـ min_instances_for_training هي 10، ولـ update_frequency هي 5. كلتا القيمتين منخفضة بما يكفي لتستحق الرفع في مشروع حقيقي، لأن إعادة التدريب كل خمسة تعليقات توضيحية تستهلك موارد حوسبة على نموذج لم يتغير إلا قليلاً.
التهيئة الكاملة
active_learning:
enabled: true
schema_names:
- sentiment
min_annotations_per_instance: 1
min_instances_for_training: 20
update_frequency: 50
max_instances_to_reorder: 1000
# How disagreement between annotators resolves into one training label
resolution_strategy: majority_vote
# Fraction of the queue left in random order, so the model does not
# only ever see what it already found interesting
random_sample_percent: 0.2
classifier:
name: sklearn.linear_model.LogisticRegression
hyperparameters:
C: 1.0
max_iter: 1000
vectorizer:
name: sklearn.feature_extraction.text.TfidfVectorizer
hyperparameters:
max_features: 5000
ngram_range: [1, 2]
query_strategy: uncertainty
model_persistence:
enabled: true
save_directory: "models/"
retention_count: 5الكتل المتداخلة classifier وvectorizer وmodel_persistence هي الصيغة الموثّقة، وهي الصيغة التي يتعرّف عليها potato validate --strict. مفاتيحها الفرعية هي name وhyperparameters للكتلتين الأوليين، وenabled وsave_directory وretention_count للثالثة. أي كتلة تستخدم أسماء مفاتيح فرعية أخرى تُتجاهل دون أي تنبيه، ويعود التشغيل بصمت إلى القيم الافتراضية.
استراتيجيات الاستعلام
| الاستراتيجية | الوصف |
|---|---|
uncertainty | الحالات التي يكون النموذج أقل ثقة بشأنها. وهي الافتراضية |
diversity | الحالات الأقل تشابهاً مع ما عُلِّق عليه بالفعل |
badge | Batch Active learning by Diverse Gradient Embeddings |
bald | Bayesian Active Learning by Disagreement |
hybrid | مزيج مرجّح من عدم اليقين والتنوع |
active_learning:
query_strategy: uncertaintyاسم الاستراتيجية غير المعروف يعود إلى uncertainty مع تحذير بدلاً من إفشال بدء التشغيل، لذا راجع السجل إذا بدت استراتيجية ما بلا أثر.
ضبط hybrid وBALD
تستخدم hybrid افتراضياً 70% لعدم اليقين و30% للتنوع:
active_learning:
query_strategy: hybrid
hybrid_weights:
uncertainty: 0.7
diversity: 0.3تدرّب bald مجموعة صغيرة من النماذج وترتّب الحالات حسب درجة الاختلاف داخلها:
active_learning:
query_strategy: bald
bald_params:
n_estimators: 5
bootstrap_fraction: 0.8المصنّفات
تُحدَّد المصنّفات بمسار استيرادها في sklearn. القيمة الافتراضية هي sklearn.linear_model.LogisticRegression.
| المصنّف | المسار | الأفضل لـ | السرعة |
|---|---|---|---|
| الانحدار اللوجستي | sklearn.linear_model.LogisticRegression | معظم مهام النصوص | سريع |
| الغابة العشوائية | sklearn.ensemble.RandomForestClassifier | الأنماط غير الخطية | متوسط |
| SVC | sklearn.svm.SVC | مجموعات البيانات الصغيرة | بطيء |
| Multinomial NB | sklearn.naive_bayes.MultinomialNB | تصنيف النصوص البسيط | سريع جداً |
الانحدار اللوجستي، وهو نقطة البداية الموصى بها:
active_learning:
classifier:
name: sklearn.linear_model.LogisticRegression
hyperparameters:
C: 1.0
max_iter: 1000الغابة العشوائية، عندما لا يكون القرار قريباً من الخطي:
active_learning:
classifier:
name: sklearn.ensemble.RandomForestClassifier
hyperparameters:
n_estimators: 100
max_depth: 10يجب توجيه SVC صراحةً لإنتاج احتمالات، لأن درجة عدم اليقين تعتمد عليها:
active_learning:
classifier:
name: sklearn.svm.SVC
hyperparameters:
kernel: rbf
probability: trueNaive Bayes، عندما تكون السرعة أهم من آخر نقطة في الدقة:
active_learning:
classifier:
name: sklearn.naive_bayes.MultinomialNB
hyperparameters:
alpha: 1.0calibrate_probabilities مفعّل افتراضياً، وهذا مهم لأن أخذ العينات بناءً على عدم اليقين يرتّب حسب الاحتمال المتوقع، والمصنّف غير المعايَر يرتّب العناصر التي يخطئ فيها بثقة كما لو كانت محسومة.
محوّلات الميزات
القيمة الافتراضية هي sklearn.feature_extraction.text.TfidfVectorizer.
TF-IDF، ميزات مرجّحة:
active_learning:
vectorizer:
name: sklearn.feature_extraction.text.TfidfVectorizer
hyperparameters:
max_features: 5000
ngram_range: [1, 2]
stop_words: englishعدّ بسيط:
active_learning:
vectorizer:
name: sklearn.feature_extraction.text.CountVectorizer
hyperparameters:
max_features: 3000
ngram_range: [1, 1]التجزئة (Hashing)، لمفردات أكبر من أن تُحفظ في الذاكرة:
active_learning:
vectorizer:
name: sklearn.feature_extraction.text.HashingVectorizer
hyperparameters:
n_features: 10000يُكتب ngram_range كقائمة YAML ويُحوَّل إلى الصف (tuple) الذي يتوقعه sklearn، لذا فإن [1, 2] صحيح هنا ولا يحتاج إلى صياغة خاصة.
البدء البارد
قبل وجود أي نموذج لا يوجد ما يمكن الشك فيه، لذا تُختار الدفعة الأولى دون نموذج:
active_learning:
cold_start_strategy: random
cold_start_batch_size: 20الاختيار بمساعدة نموذج لغة كبير
يمكن لنموذج لغة كبير أن يقيّم الحالات خلال فترة البدء البارد أو إلى جانب المصنّف:
active_learning:
enabled: true
schema_names:
- sentiment
llm:
enabled: true
endpoint_type: vllm
base_url: http://localhost:8000/v1
model: meta-llama/Llama-3.2-3B-Instruct
confidence_method: verbalizedيحدد confidence_method كيفية الحصول على درجة الثقة، والاختيار مهم لأن هذه الدرجة هي التي توجّه الاختيار:
| الطريقة | كيف تعمل | المقايضة |
|---|---|---|
verbalized | يُبلغ النموذج عن ثقته بنفسه على مقياس من 1 إلى 10 | عامة، لكنها غير موثوقة مع بعض النماذج |
logprobs | تُحسب من اللوغاريتمات الاحتمالية للرموز | الأفضل معايرةً، وتحتاج إلى نقطة نهاية تُرجع logprobs |
consistency | تُرسل الحالة نفسها عدة مرات وتُقيَّم حسب درجة الاتفاق | تعمل في أي مكان، بتكلفة N استدعاء لكل حالة |
تعود logprobs إلى الثقة المُعلنة لفظياً عندما لا تُرجعها نقطة النهاية.
استمرارية النموذج
يمكن للنماذج المدرّبة أن تبقى بعد إعادة التشغيل بدلاً من إعادة بنائها من الصفر:
active_learning:
model_persistence:
enabled: true
save_directory: "models/"
retention_count: 5القيمة الافتراضية لـ retention_count هي 2، وهو يحدد الحد الأقصى لعدد النماذج المحفوظة التي يُحتفظ بها.
لم تعد الاستمرارية المعتمدة على قاعدة بيانات قابلة للتهيئة. أُزيل المفتاحان database_enabled وdatabase_config لأن الطبقة التي خلفهما كانت مجرد هيكل فارغ يسجّل النجاح ولا يخزّن شيئاً. أصبح سجل التشغيل يُحفظ دائماً ولا يحتاج إلى تهيئة، ويُتجاهل المفتاحان إذا كانت التهيئة لا تزال تحملهما.
المخططات المتعددة
يسرد schema_names المخططات التي تدرّب تعليقاتها التوضيحية النموذج. إذا لم يُحدَّد، فإنه يأخذ افتراضياً المخططات القابلة للتعليم في المشروع:
annotation_schemes:
- annotation_type: radio
name: sentiment
description: "What is the sentiment?"
labels: [Positive, Negative, Neutral]
- annotation_type: radio
name: topic
description: "What is the topic?"
labels: [Politics, Sports, Tech, Entertainment]
active_learning:
enabled: true
schema_names:
- sentiment
- topicالتهيئة الكاملة
annotation_task_name: "Sentiment Analysis with Active Learning"
task_dir: "."
port: 8000
data_files:
- "data/reviews.json"
item_properties:
id_key: id
text_key: text
annotation_schemes:
- annotation_type: radio
name: sentiment
description: "What is the sentiment?"
labels:
- Positive
- Negative
- Neutral
sequential_key_binding: true
active_learning:
enabled: true
schema_names:
- sentiment
min_annotations_per_instance: 1
min_instances_for_training: 30
update_frequency: 50
max_instances_to_reorder: 500
random_sample_percent: 0.2
classifier:
name: sklearn.linear_model.LogisticRegression
hyperparameters:
C: 1.0
max_iter: 1000
vectorizer:
name: sklearn.feature_extraction.text.TfidfVectorizer
hyperparameters:
max_features: 5000
ngram_range: [1, 2]
query_strategy: uncertainty
model_persistence:
enabled: true
save_directory: "models/"
retention_count: 5
output_annotation_dir: "output/"
export_annotation_format: jsonl
user_config:
allow_all_users: trueالدمج مع دعم الذكاء الاصطناعي
يقرر التعلم النشط ما يُعرض تالياً، ويساعد دعم الذكاء الاصطناعي المعلّق فيما هو معروض على الشاشة. هما مستقلان ويمكن الجمع بينهما:
active_learning:
enabled: true
schema_names:
- sentiment
min_instances_for_training: 30
ai_support:
enabled: true
endpoint_type: openai
ai_config:
model: gpt-4o-mini
api_key: ${OPENAI_API_KEY}
max_tokens: 800
include:
all: trueاقرأ النتيجة بحذر. إذا اقترح النموذج تسمية وقبلها المعلّق، وكانت عائلة النماذج نفسها قد اختارت الحالة، فإن الاتفاق الذي تقيسه في النهاية هو جزئياً اتفاق النموذج مع نفسه.
المراقبة
تعرض لوحة تحكم المشرف دقة النموذج وعدد دورات التدريب وكيفية توزّع عدم اليقين وعدد الحالات المتبقية. يتطلب الوصول إليها مفتاح المشرف أو دوراً يحمل view_admin_dashboard.
أفضل الممارسات
اجمع خط أساس أولاً
لا يمكن تدريب أي شيء على مجموعة فارغة، والنموذج المدرّب على عشرين تعليقاً توضيحياً يعيد في الغالب ترتيب الضوضاء:
active_learning:
min_instances_for_training: 50راقب توازن الفئات
يتركّز أخذ العينات بناءً على عدم اليقين عند حدود القرار، مما يُبعد توزيع التسميات عن توزيع المدوّنة. هذا لا يضر عند تدريب نموذج، لكنه مضلّل إذا قدّمت العينة المعلَّق عليها على أنها وصف للبيانات. ولهذا السبب تحديداً يُبقي random_sample_percent جزءاً من الطابور غير متحيّز.
لا تُعد التدريب بكثرة
active_learning:
update_frequency: 100احتفظ بالنماذج عبر عمليات إعادة التشغيل
active_learning:
model_persistence:
enabled: true
save_directory: "models/"استكشاف الأخطاء وإصلاحها
التدريب لا يبدأ أبداً
تحقق من أن التعليقات التوضيحية بلغت min_instances_for_training، ومن أن لكل فئة مثالاً واحداً على الأقل. لا يمكن ملاءمة مصنّف على مجموعة تدريب ذات فئة واحدة.
إعادة الترتيب تبدو بلا أثر
ابحث في السجل عن query_strategy غير معروفة، إذ تعود بصمت إلى عدم اليقين. تأكد من enabled: true، ومن أن schema_names يسمّي مخططات موجودة فعلاً.
بطء مع مجموعة كبيرة
قلّل max_instances_to_reorder، أو زِد update_frequency، أو انتقل إلى HashingVectorizer للمفردات الكبيرة جداً.
قراءات إضافية
- دعم الذكاء الاصطناعي - مساعدة نماذج اللغة الكبيرة أثناء التعليق التوضيحي
- تعيين المهام - استراتيجيات التعيين الأخرى
- لوحة تحكم المشرف - مراقبة حلقة التدريب
- الترتيب حسب التنوع - ترتيب قائم على التضمينات دون مصنّف
للاطلاع على تفاصيل التنفيذ، راجع الوثائق المصدرية.