تكامل MTurk
نشر مهام التعليق التوضيحي على Amazon Mechanical Turk.
تكامل Amazon Mechanical Turk
يقدم هذا الدليل تعليمات لنشر مهام التعليق التوضيحي في Potato على Amazon Mechanical Turk (MTurk).
نظرة عامة
يتكامل Potato مع MTurk من خلال نوع External Question HIT:
- تقوم بإنشاء External Question HIT على MTurk يشير إلى خادم Potato الخاص بك
- ينقر العمال على HIT الخاص بك ويُعاد توجيههم إلى خادم Potato الخاص بك
- يستخرج Potato معرف العامل والمعاملات الأخرى من URL
- يكمل العمال مهمة التعليق التوضيحي
- عند الإكمال، ينقر العمال على "Submit HIT to MTurk"
معاملات URL
يمرر MTurk أربعة معاملات إلى URL الخاص بـ External Question:
| المعامل | الوصف |
|---|---|
workerId | معرف العامل الفريد على MTurk |
assignmentId | معرف فريد لزوج العامل-HIT هذا |
hitId | معرف HIT |
turkSubmitTo | عنوان URL الذي يجب إرسال نموذج الإكمال إليه عبر POST |
المتطلبات الأساسية
متطلبات الخادم
-
خادم متاح للعموم مع:
- منفذ مفتوح (عادة 8080 أو 443)
- يُوصى بـ HTTPS (مطلوب لبعض المتصفحات)
- اتصال إنترنت مستقر
-
بيئة Python مع تثبيت Potato
متطلبات MTurk
- حساب MTurk Requester: سجل في requester.mturk.com
- حساب ممول: أضف أرصدة للإنتاج (sandbox مجاني)
البدء السريع
الخطوة 1: إنشاء إعداد Potato الخاص بك
yaml
# mturk_task.yaml
annotation_task_name: "Sentiment Classification"
task_description: "Classify the sentiment of short text snippets."
# MTurk login configuration
login:
type: url_direct
url_argument: workerId
# Optional completion code
completion_code: "TASK_COMPLETE"
# Crowdsourcing settings
hide_navbar: true
jumping_to_id_disabled: true
assignment_strategy: random
max_annotations_per_user: 10
max_annotations_per_item: 3
# Data files
data_files:
- data/items.json
# Annotation scheme
annotation_schemes:
- annotation_type: radio
name: sentiment
description: "What is the sentiment of this text?"
labels:
- positive
- neutral
- negativeالخطوة 2: تشغيل الخادم
bash
# Start the server
potato start mturk_task.yaml -p 8080
# Or with HTTPS (recommended)
potato start mturk_task.yaml -p 443 --ssl-cert cert.pem --ssl-key key.pemالخطوة 3: إنشاء HIT على MTurk
أنشئ External Question HIT باستخدام قالب XML هذا:
xml
<?xml version="1.0" encoding="UTF-8"?>
<ExternalQuestion xmlns="http://mechanicalturk.amazonaws.com/AWSMechanicalTurkDataSchemas/2006-07-14/ExternalQuestion.xsd">
<ExternalURL>https://your-server.com:8080/?workerId=${workerId}&assignmentId=${assignmentId}&hitId=${hitId}&turkSubmitTo=${turkSubmitTo}</ExternalURL>
<FrameHeight>800</FrameHeight>
</ExternalQuestion>مهم: استخدم & بدلاً من & في XML.
مرجع الإعداد
الإعدادات المطلوبة
yaml
login:
type: url_direct # Required: enables URL-based authentication
url_argument: workerId # Required: MTurk uses 'workerId' parameterالإعدادات الموصى بها
yaml
hide_navbar: true # Prevent workers from skipping
jumping_to_id_disabled: true
assignment_strategy: random
max_annotations_per_user: 10
max_annotations_per_item: 3
task_description: "Brief description for the preview page."
completion_code: "YOUR_CODE"الاختبار في Sandbox
اختبر دائماً في MTurk Sandbox قبل الانتقال إلى الإنتاج.
عناوين URL الخاصة بـ Sandbox
| الخدمة | عنوان URL |
|---|---|
| Requester | https://requestersandbox.mturk.com |
| Worker | https://workersandbox.mturk.com |
| API Endpoint | https://mturk-requester-sandbox.us-east-1.amazonaws.com |
الاختبار المحلي
اختبر معاملات URL الخاصة بـ MTurk محلياً:
bash
# Test normal workflow
curl "http://localhost:8080/?workerId=TEST_WORKER&assignmentId=TEST_ASSIGNMENT&hitId=TEST_HIT"
# Test preview mode
curl "http://localhost:8080/?workerId=TEST_WORKER&assignmentId=ASSIGNMENT_ID_NOT_AVAILABLE&hitId=TEST_HIT"تكامل MTurk API (اختياري)
للميزات المتقدمة، قم بتمكين تكامل MTurk API:
bash
pip install boto3أنشئ configs/mturk_config.yaml:
yaml
aws_access_key_id: "YOUR_ACCESS_KEY"
aws_secret_access_key: "YOUR_SECRET_KEY"
sandbox: true # Set to false for production
hit_id: "YOUR_HIT_ID"قم بالتمكين في إعدادك الرئيسي:
yaml
mturk:
enabled: true
config_file_path: configs/mturk_config.yamlإنشاء HITs برمجياً
python
import boto3
mturk = boto3.client(
'mturk',
region_name='us-east-1',
endpoint_url='https://mturk-requester-sandbox.us-east-1.amazonaws.com'
)
question_xml = '''<?xml version="1.0" encoding="UTF-8"?>
<ExternalQuestion xmlns="http://mechanicalturk.amazonaws.com/AWSMechanicalTurkDataSchemas/2006-07-14/ExternalQuestion.xsd">
<ExternalURL>https://your-server.com:8080/?workerId=${workerId}&assignmentId=${assignmentId}&hitId=${hitId}&turkSubmitTo=${turkSubmitTo}</ExternalURL>
<FrameHeight>800</FrameHeight>
</ExternalQuestion>'''
response = mturk.create_hit(
Title='Sentiment Classification Task',
Description='Classify the sentiment of short text snippets.',
Keywords='sentiment, classification, text',
Reward='0.50',
MaxAssignments=100,
LifetimeInSeconds=86400,
AssignmentDurationInSeconds=3600,
AutoApprovalDelayInSeconds=604800,
Question=question_xml
)
print(f"Created HIT: {response['HIT']['HITId']}")أفضل الممارسات
تصميم المهمة
- تعليمات واضحة: قدم أمثلة مفصلة
- وقت معقول: لا تستعجل العمال
- أجر عادل: على الأقل ما يعادل الحد الأدنى للأجور (12-15 دولار/ساعة)
- طول مناسب: 5-15 دقيقة لكل HIT مثالي
مراقبة الجودة
- اختبارات التأهيل: فحص العمال مسبقاً
- فحوصات الانتباه: تضمين أسئلة تحقق
- التكرار: عدة عمال لكل عنصر (يُوصى بـ 3 أو أكثر)
- مراجعة العينات: تحقق يدوياً من مجموعة فرعية
تقني
- معالجة الحالات الحدية: قد يعيد العمال التحميل أو يعودون للخلف
- حفظ التقدم: حفظ تلقائي إن أمكن
- أخطاء لطيفة: عرض رسائل خطأ مفيدة
استكشاف الأخطاء وإصلاحها
يرى العمال صفحة المعاينة بعد القبول
- تحقق من أن معامل
assignmentIdيتم تمريره بشكل صحيح - صفحة المعاينة تُحدَّث تلقائياً؛ اطلب من العمال الانتظار
زر الإرسال لا يعمل
- تحقق من وحدة تحكم المتصفح بحثاً عن أخطاء
- تحقق من وجود معامل
turkSubmitTo - تحقق من مشاكل CORS أو المحتوى المختلط
لا يستطيع العمال تسجيل الدخول
- تحقق من أن
login.url_argumentمضبوط علىworkerId - تأكد من أن
login.typeهوurl_direct
قراءة إضافية
- تكامل التعهيد الجماعي - إعداد التعهيد الجماعي العام
- مراقبة الجودة - فحوصات الانتباه والمعايير الذهبية
- تعيين المهام - استراتيجيات التعيين
لمزيد من تفاصيل التنفيذ، راجع التوثيق المصدري.