Skip to content

تكامل MTurk

نشر مهام التعليق التوضيحي على Amazon Mechanical Turk.

تكامل Amazon Mechanical Turk

يقدم هذا الدليل تعليمات لنشر مهام التعليق التوضيحي في Potato على Amazon Mechanical Turk (MTurk).

نظرة عامة

يتكامل Potato مع MTurk من خلال نوع External Question HIT:

  1. تقوم بإنشاء External Question HIT على MTurk يشير إلى خادم Potato الخاص بك
  2. ينقر العمال على HIT الخاص بك ويُعاد توجيههم إلى خادم Potato الخاص بك
  3. يستخرج Potato معرف العامل والمعاملات الأخرى من URL
  4. يكمل العمال مهمة التعليق التوضيحي
  5. عند الإكمال، ينقر العمال على "Submit HIT to MTurk"

معاملات URL

يمرر MTurk أربعة معاملات إلى URL الخاص بـ External Question:

المعاملالوصف
workerIdمعرف العامل الفريد على MTurk
assignmentIdمعرف فريد لزوج العامل-HIT هذا
hitIdمعرف HIT
turkSubmitToعنوان URL الذي يجب إرسال نموذج الإكمال إليه عبر POST

المتطلبات الأساسية

متطلبات الخادم

  1. خادم متاح للعموم مع:

    • منفذ مفتوح (عادة 8080 أو 443)
    • يُوصى بـ HTTPS (مطلوب لبعض المتصفحات)
    • اتصال إنترنت مستقر
  2. بيئة Python مع تثبيت Potato

متطلبات MTurk

  1. حساب MTurk Requester: سجل في requester.mturk.com
  2. حساب ممول: أضف أرصدة للإنتاج (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}&amp;assignmentId=${assignmentId}&amp;hitId=${hitId}&amp;turkSubmitTo=${turkSubmitTo}</ExternalURL>
  <FrameHeight>800</FrameHeight>
</ExternalQuestion>

مهم: استخدم &amp; بدلاً من & في 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 الخاصة بـ 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}&amp;assignmentId=${assignmentId}&amp;hitId=${hitId}&amp;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']}")

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

تصميم المهمة

  1. تعليمات واضحة: قدم أمثلة مفصلة
  2. وقت معقول: لا تستعجل العمال
  3. أجر عادل: على الأقل ما يعادل الحد الأدنى للأجور (12-15 دولار/ساعة)
  4. طول مناسب: 5-15 دقيقة لكل HIT مثالي

مراقبة الجودة

  1. اختبارات التأهيل: فحص العمال مسبقاً
  2. فحوصات الانتباه: تضمين أسئلة تحقق
  3. التكرار: عدة عمال لكل عنصر (يُوصى بـ 3 أو أكثر)
  4. مراجعة العينات: تحقق يدوياً من مجموعة فرعية

تقني

  1. معالجة الحالات الحدية: قد يعيد العمال التحميل أو يعودون للخلف
  2. حفظ التقدم: حفظ تلقائي إن أمكن
  3. أخطاء لطيفة: عرض رسائل خطأ مفيدة

استكشاف الأخطاء وإصلاحها

يرى العمال صفحة المعاينة بعد القبول

  • تحقق من أن معامل assignmentId يتم تمريره بشكل صحيح
  • صفحة المعاينة تُحدَّث تلقائياً؛ اطلب من العمال الانتظار

زر الإرسال لا يعمل

  • تحقق من وحدة تحكم المتصفح بحثاً عن أخطاء
  • تحقق من وجود معامل turkSubmitTo
  • تحقق من مشاكل CORS أو المحتوى المختلط

لا يستطيع العمال تسجيل الدخول

  • تحقق من أن login.url_argument مضبوط على workerId
  • تأكد من أن login.type هو url_direct

قراءة إضافية

لمزيد من تفاصيل التنفيذ، راجع التوثيق المصدري.