Skip to content
Guides6 min read

النشر على Amazon Mechanical Turk

تعليمات خطوة بخطوة لتشغيل مهام توسيم Potato على MTurk مع اختبارات التأهيل وسير عمل الموافقة.

Potato Team·

النشر على Amazon Mechanical Turk

يوفر Amazon Mechanical Turk (MTurk) الوصول إلى قوة عاملة كبيرة عند الطلب لمهام التوسيم. يتكامل Potato مع MTurk من خلال نوع HIT ExternalQuestion: يعمل خادم Potato كواجهة التوسيم، ويتعامل MTurk مع تجنيد العمال وتتبع المهام والدفع. يغطي هذا الدليل عملية الإعداد الكاملة.

المتطلبات المسبقة

  1. حساب AWS مع تفعيل MTurk
  2. حساب طالب MTurk (إنتاج أو بيئة اختبار) على requester.mturk.com
  3. خادم Potato يمكن الوصول إليه عبر عنوان URL عام (يُوصى بـ HTTPS)
  4. بيئة Python مع تثبيت Potato
  5. معرفة أساسية بمفاهيم MTurk (HITs، Workers، Assignments)

كيف يعمل التكامل

لا يدير Potato مهام MTurk HIT مباشرة. بدلاً من ذلك، يتبع التكامل هذا المسار:

  1. تنشئ HIT من نوع ExternalQuestion على MTurk يشير إلى عنوان URL الخاص بخادم Potato
  2. يقبل العامل المهمة على MTurk ويُعاد توجيهه إلى خادم Potato مع معاملات الاستعلام (workerId، assignmentId، hitId، turkSubmitTo)
  3. يستخدم Potato معامل workerId لتحديد هوية العامل (عبر login.type: url_direct)
  4. يكمل العامل مهمة التوسيم على خادم Potato
  5. عند الانتهاء، يعيد Potato توجيه العامل إلى نقطة الإرسال الخاصة بـ MTurk

التكوين

المفتاح لتكامل MTurk هو تعيين نوع تسجيل الدخول إلى url_direct مع url_argument: workerId. هذا يخبر Potato باستخراج هوية العامل من معامل URL الذي يمرره MTurk تلقائياً.

yaml
login:
  type: url_direct
  url_argument: workerId

هذا هو التكوين الوحيد الخاص بـ MTurk في Potato. كل شيء آخر -- إنشاء المهام والمؤهلات والدفع والموافقة -- يُدار من جانب MTurk.

مثال تكوين كامل

yaml
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 على جهاز يمكن الوصول إليه عبر الإنترنت:

bash
potato start config.yaml -p 8080

تأكد من إمكانية الوصول إلى الخادم من الإنترنت (مثلاً https://your-server.com:8080/).

الخطوة 2: إنشاء XML الخاص بـ ExternalQuestion

يستخدم MTurk صيغة XML تسمى ExternalQuestion لتضمين مواقع خارجية في 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}&amp;assignmentId=${assignmentId}&amp;hitId=${hitId}&amp;turkSubmitTo=${turkSubmitTo}</ExternalURL>
  <FrameHeight>800</FrameHeight>
</ExternalQuestion>

مهم: استخدم &amp; بدلاً من & في XML. سيستبدل MTurk العناصر النائبة ${...} بالقيم الفعلية عندما يقبل العامل المهمة.

الخطوة 3: إنشاء المهمة على MTurk

يمكنك إنشاء المهام من خلال وحدة تحكم طالب MTurk أو برمجياً باستخدام AWS SDK (boto3). إعدادات المهمة مثل العنوان والوصف والمكافأة والمدة والمؤهلات كلها تُكوّن من جانب MTurk وليس في Potato.

باستخدام boto3 (Python)

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}&amp;assignmentId=${assignmentId}&amp;hitId=${hitId}&amp;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:

bash
# 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): وصول برمجي لعمليات الدُفعات
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

أفضل الممارسات

  1. ابدأ بالبيئة الاختبارية: اختبر دائماً سير العمل الكامل في البيئة الاختبارية قبل إنفاق المال
  2. أجر عادل: احسب الأجر بالساعة (المكافأة / الوقت المقدر x 60) واستهدف $12-15/ساعة على الأقل
  3. وصف واضح للمهام: العناوين والأوصاف المكتوبة جيداً تجذب عمالاً أفضل
  4. موافقة سريعة: العمال يقدرون الدفع السريع -- وافق فوراً عندما تكون الجودة مقبولة
  5. تعامل مع الرفض بحذر: الرفض يؤثر على معدلات موافقة العمال وسمعتك كطالب
  6. استخدم HTTPS: بعض المتصفحات تحظر المحتوى المختلط؛ HTTPS يضمن عمل iframe بشكل موثوق
  7. عيّن hide_navbar: true: يمنع العمال من التنقل بعيداً عن المهمة داخل Potato
  8. راقب خادمك: تأكد من بقاء خادم Potato يعمل طوال مدة المهمة

المقارنة: MTurk مقابل Prolific

الجانبMTurkProlific
مجموعة العمالكبيرة ومتنوعةأصغر، موجهة للبحث
الجودةمتغيرةأعلى عموماً
التسعيرأساس أقل + رسومأعلى، شفاف
الإعدادأكثر تعقيداًأبسط
الأفضل لـنطاق كبير، الميزانيةالبحث، الجودة
تكوين Potatourl_argument: workerIdurl_argument: PROLIFIC_PID

الخطوات التالية


وثائق MTurk الكاملة في /docs/deployment/mturk-integration. لتفاصيل التنفيذ، راجع الوثائق المصدرية.