النشر على Amazon Mechanical Turk
تعليمات خطوة بخطوة لتشغيل مهام توسيم Potato على MTurk مع اختبارات التأهيل وسير عمل الموافقة.
النشر على Amazon Mechanical Turk
يوفر Amazon Mechanical Turk (MTurk) الوصول إلى قوة عاملة كبيرة عند الطلب لمهام التوسيم. يتكامل Potato مع MTurk من خلال نوع HIT ExternalQuestion: يعمل خادم Potato كواجهة التوسيم، ويتعامل MTurk مع تجنيد العمال وتتبع المهام والدفع. يغطي هذا الدليل عملية الإعداد الكاملة.
المتطلبات المسبقة
- حساب AWS مع تفعيل MTurk
- حساب طالب MTurk (إنتاج أو بيئة اختبار) على requester.mturk.com
- خادم Potato يمكن الوصول إليه عبر عنوان URL عام (يُوصى بـ HTTPS)
- بيئة Python مع تثبيت Potato
- معرفة أساسية بمفاهيم MTurk (HITs، Workers، Assignments)
كيف يعمل التكامل
لا يدير Potato مهام MTurk HIT مباشرة. بدلاً من ذلك، يتبع التكامل هذا المسار:
- تنشئ HIT من نوع ExternalQuestion على MTurk يشير إلى عنوان URL الخاص بخادم Potato
- يقبل العامل المهمة على MTurk ويُعاد توجيهه إلى خادم Potato مع معاملات الاستعلام (
workerId،assignmentId،hitId،turkSubmitTo) - يستخدم Potato معامل
workerIdلتحديد هوية العامل (عبرlogin.type: url_direct) - يكمل العامل مهمة التوسيم على خادم Potato
- عند الانتهاء، يعيد Potato توجيه العامل إلى نقطة الإرسال الخاصة بـ MTurk
التكوين
المفتاح لتكامل MTurk هو تعيين نوع تسجيل الدخول إلى url_direct مع url_argument: workerId. هذا يخبر Potato باستخراج هوية العامل من معامل URL الذي يمرره MTurk تلقائياً.
login:
type: url_direct
url_argument: workerIdهذا هو التكوين الوحيد الخاص بـ MTurk في Potato. كل شيء آخر -- إنشاء المهام والمؤهلات والدفع والموافقة -- يُدار من جانب MTurk.
مثال تكوين كامل
annotation_task_name: "Sentiment Classification"
task_description: "Classify the sentiment of short text snippets."
# MTurk login: extract worker ID from URL parameter
login:
type: url_direct
url_argument: workerId
# UI settings recommended for crowdsourcing
hide_navbar: true
jumping_to_id_disabled: true
# Assignment settings
assignment_strategy: random
max_annotations_per_user: 20
max_annotations_per_item: 3
# Data
data_files:
- data/items.json
item_properties:
id_key: id
text_key: text
# Annotation scheme
annotation_schemes:
- annotation_type: radio
name: sentiment
description: "What is the sentiment of this text?"
labels:
- Positive
- Negative
- Neutral
# Output
output_annotation_dir: annotation_output
output_annotation_format: jsonالإعداد على MTurk
الخطوة 1: بدء خادم Potato
شغّل خادم Potato على جهاز يمكن الوصول إليه عبر الإنترنت:
potato start config.yaml -p 8080تأكد من إمكانية الوصول إلى الخادم من الإنترنت (مثلاً https://your-server.com:8080/).
الخطوة 2: إنشاء XML الخاص بـ ExternalQuestion
يستخدم MTurk صيغة XML تسمى ExternalQuestion لتضمين مواقع خارجية في HIT. أنشئ 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. سيستبدل MTurk العناصر النائبة ${...} بالقيم الفعلية عندما يقبل العامل المهمة.
الخطوة 3: إنشاء المهمة على MTurk
يمكنك إنشاء المهام من خلال وحدة تحكم طالب MTurk أو برمجياً باستخدام AWS SDK (boto3). إعدادات المهمة مثل العنوان والوصف والمكافأة والمدة والمؤهلات كلها تُكوّن من جانب MTurk وليس في Potato.
باستخدام boto3 (Python)
import boto3
# Use sandbox for testing
mturk = boto3.client(
'mturk',
region_name='us-east-1',
endpoint_url='https://mturk-requester-sandbox.us-east-1.amazonaws.com'
)
# For production, omit endpoint_url or use:
# endpoint_url='https://mturk-requester.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='Read short texts and classify their sentiment as positive, negative, or neutral.',
Keywords='sentiment, classification, text, NLP',
Reward='0.50',
MaxAssignments=100,
LifetimeInSeconds=86400, # 1 day
AssignmentDurationInSeconds=3600, # 1 hour
AutoApprovalDelayInSeconds=604800, # 7 days
Question=question_xml,
QualificationRequirements=[
{
'QualificationTypeId': '000000000000000000L0', # Approval rate
'Comparator': 'GreaterThanOrEqualTo',
'IntegerValues': [97]
},
{
'QualificationTypeId': '00000000000000000040', # Number approved
'Comparator': 'GreaterThanOrEqualTo',
'IntegerValues': [500]
},
{
'QualificationTypeId': '00000000000000000071', # Locale
'Comparator': 'In',
'LocaleValues': [
{'Country': 'US'},
{'Country': 'GB'},
{'Country': 'CA'},
{'Country': 'AU'}
]
}
]
)
print(f"Created HIT: {response['HIT']['HITId']}")الخطوة 4: تعيين المؤهلات (على MTurk)
تُكوّن مؤهلات العمال بالكامل من جانب MTurk عند إنشاء مهمتك. تشمل مرشحات المؤهلات الشائعة:
- معدل الموافقة: طلب نسبة موافقة HIT دنيا (مثلاً 97%+)
- المهام المعتمدة: طلب حد أدنى من المهام المعتمدة سابقاً (مثلاً 500+)
- الموقع: تقييد العمال من دول محددة
- Masters: استخدام عمال Masters المختارين مسبقاً من MTurk (رسوم أعلى)
- مؤهلات مخصصة: إنشاء اختبارات مؤهلات خاصة بك عبر وحدة تحكم MTurk
معالجة الإنجاز
عندما ينتهي العامل من توسيم جميع العناصر المعينة، يحتاج Potato إلى إعادة توجيهه إلى MTurk حتى يتم تقديم المهمة. يمرر MTurk معامل URL turkSubmitTo الذي يخبر Potato بمكان إرسال طلب POST للإنجاز.
يرى العامل زر "إرسال المهمة" بعد إكمال المهمة. النقر عليه يقدم المهمة إلى MTurk لمراجعتك وموافقتك.
الاختبار في بيئة اختبار MTurk
اختبر دائماً إعدادك في بيئة اختبار MTurk قبل الانتقال للإنتاج.
| الخدمة | العنوان |
|---|---|
| بيئة اختبار الطالب | https://requestersandbox.mturk.com |
| بيئة اختبار العامل | https://workersandbox.mturk.com |
| نقطة نهاية API (الاختبار) | https://mturk-requester-sandbox.us-east-1.amazonaws.com |
الاختبار المحلي
يمكنك اختبار مسار معاملات URL محلياً بدون MTurk:
# Simulate a worker accessing your task
curl "http://localhost:8080/?workerId=TEST_WORKER&assignmentId=TEST_ASSIGN&hitId=TEST_HIT"
# Simulate the preview mode (before a worker accepts the HIT)
curl "http://localhost:8080/?workerId=TEST_WORKER&assignmentId=ASSIGNMENT_ID_NOT_AVAILABLE&hitId=TEST_HIT"عندما يكون assignmentId هو ASSIGNMENT_ID_NOT_AVAILABLE، فإن العامل يستعرض المهمة ولم يقبلها بعد.
إدارة المهام والموافقات
إدارة المهام -- مراقبة التقدم والموافقة على المهام أو رفضها وإصدار المكافآت -- تتم عبر أدوات MTurk الخاصة:
- وحدة تحكم طالب MTurk: واجهة ويب لإدارة المهام ومراجعة المهام والتواصل مع العمال
- boto3 (AWS SDK لـ Python): وصول برمجي لعمليات الدُفعات
# Example: List assignments for a HIT
assignments = mturk.list_assignments_for_hit(
HITId='YOUR_HIT_ID',
AssignmentStatuses=['Submitted']
)
# Approve an assignment
mturk.approve_assignment(AssignmentId='ASSIGNMENT_ID')
# Reject an assignment (use sparingly)
mturk.reject_assignment(
AssignmentId='ASSIGNMENT_ID',
RequesterFeedback='Did not complete all items.'
)حساب التكاليف
يفرض MTurk رسوماً فوق المكافأة التي تدفعها للعمال:
- الرسوم الأساسية: 20% من مبلغ المكافأة
- مؤهل Masters: رسوم إضافية 5%
- 10+ مهام لكل HIT: رسوم إضافية 20%
مثال: إذا دفعت $0.50 لكل مهمة مع 100 مهمة:
- التكلفة الأساسية: 100 x $0.50 x 1.20 = $60.00
- مع Masters: 100 x $0.50 x 1.25 = $62.50
أفضل الممارسات
- ابدأ بالبيئة الاختبارية: اختبر دائماً سير العمل الكامل في البيئة الاختبارية قبل إنفاق المال
- أجر عادل: احسب الأجر بالساعة (المكافأة / الوقت المقدر x 60) واستهدف $12-15/ساعة على الأقل
- وصف واضح للمهام: العناوين والأوصاف المكتوبة جيداً تجذب عمالاً أفضل
- موافقة سريعة: العمال يقدرون الدفع السريع -- وافق فوراً عندما تكون الجودة مقبولة
- تعامل مع الرفض بحذر: الرفض يؤثر على معدلات موافقة العمال وسمعتك كطالب
- استخدم HTTPS: بعض المتصفحات تحظر المحتوى المختلط؛ HTTPS يضمن عمل iframe بشكل موثوق
- عيّن
hide_navbar: true: يمنع العمال من التنقل بعيداً عن المهمة داخل Potato - راقب خادمك: تأكد من بقاء خادم Potato يعمل طوال مدة المهمة
المقارنة: MTurk مقابل Prolific
| الجانب | MTurk | Prolific |
|---|---|---|
| مجموعة العمال | كبيرة ومتنوعة | أصغر، موجهة للبحث |
| الجودة | متغيرة | أعلى عموماً |
| التسعير | أساس أقل + رسوم | أعلى، شفاف |
| الإعداد | أكثر تعقيداً | أبسط |
| الأفضل لـ | نطاق كبير، الميزانية | البحث، الجودة |
| تكوين Potato | url_argument: workerId | url_argument: PROLIFIC_PID |
الخطوات التالية
- قارن مع تكامل Prolific
- أعدّ ضبط الجودة
- احسب اتفاق المُوسِّمين
وثائق MTurk الكاملة في /docs/deployment/mturk-integration. لتفاصيل التنفيذ، راجع الوثائق المصدرية.