Skip to content
هذه الصفحة غير متوفرة بلغتك بعد. يتم عرض النسخة الإنجليزية.

MTurk-Integration

Annotationsaufgaben auf Amazon Mechanical Turk bereitstellen.

Amazon Mechanical Turk-Integration

Diese Anleitung enthält Anweisungen zur Bereitstellung von Potato-Annotationsaufgaben auf Amazon Mechanical Turk (MTurk).

Übersicht

Potato integriert sich mit MTurk über den External Question HIT-Typ:

  1. Sie erstellen ein External Question HIT auf MTurk, das auf Ihren Potato-Server zeigt
  2. Worker klicken auf Ihr HIT und werden zu Ihrem Potato-Server weitergeleitet
  3. Potato extrahiert die Worker-ID und andere Parameter aus der URL
  4. Worker erledigen die Annotationsaufgabe
  5. Nach Abschluss klicken Worker auf "Submit HIT to MTurk"

URL-Parameter

MTurk übergibt vier Parameter an Ihre External Question URL:

ParameterBeschreibung
workerIdEindeutiger MTurk-Bezeichner des Workers
assignmentIdEindeutige ID für dieses Worker-HIT-Paar
hitIdDer HIT-Bezeichner
turkSubmitToURL, an die das Abschlussformular per POST gesendet werden soll

Voraussetzungen

Serveranforderungen

  1. Öffentlich zugänglicher Server mit:

    • Offenem Port (typischerweise 8080 oder 443)
    • HTTPS empfohlen (für einige Browser erforderlich)
    • Stabiler Internetverbindung
  2. Python-Umgebung mit installiertem Potato

MTurk-Anforderungen

  1. MTurk Requester-Konto: Registrieren Sie sich unter requester.mturk.com
  2. Finanziertes Konto: Guthaben für Produktion hinzufügen (Sandbox ist kostenlos)

Schnellstart

Schritt 1: Potato-Konfiguration erstellen

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

Schritt 2: Server starten

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

Schritt 3: HIT auf MTurk erstellen

Erstellen Sie ein External Question HIT mit dieser XML-Vorlage:

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>

Wichtig: Verwenden Sie &amp; statt & in XML.

Konfigurationsreferenz

Erforderliche Einstellungen

yaml
login:
  type: url_direct      # Required: enables URL-based authentication
  url_argument: workerId  # Required: MTurk uses 'workerId' parameter

Empfohlene Einstellungen

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"

Testen in der Sandbox

Testen Sie immer in der MTurk Sandbox, bevor Sie in die Produktion gehen.

Sandbox-URLs

Lokales Testen

MTurk URL-Parameter lokal testen:

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-Integration (Optional)

Für erweiterte Funktionen, MTurk API-Integration aktivieren:

bash
pip install boto3

Erstellen Sie 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"

In Ihrer Hauptkonfiguration aktivieren:

yaml
mturk:
  enabled: true
  config_file_path: configs/mturk_config.yaml

HITs programmatisch erstellen

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']}")

Bewährte Methoden

Aufgabengestaltung

  1. Klare Anweisungen: Detaillierte Beispiele bereitstellen
  2. Angemessene Zeit: Worker nicht unter Druck setzen
  3. Fairer Lohn: Mindestens Mindestlohnäquivalent ($12-15/Stunde)
  4. Überschaubare Länge: 5-15 Minuten pro HIT ist ideal

Qualitätskontrolle

  1. Qualifikationstests: Worker im Voraus prüfen
  2. Aufmerksamkeitsprüfungen: Verifizierungsfragen einbeziehen
  3. Redundanz: Mehrere Worker pro Eintrag (3+ empfohlen)
  4. Stichproben überprüfen: Eine Teilmenge manuell prüfen

Technisch

  1. Sonderfälle behandeln: Worker können neu laden oder zurückgehen
  2. Fortschritt speichern: Wenn möglich automatisch speichern
  3. Elegante Fehler: Hilfreiche Fehlermeldungen anzeigen

Fehlerbehebung

Worker sehen nach dem Akzeptieren die Vorschauseite

  • Überprüfen Sie, ob der assignmentId-Parameter korrekt übergeben wird
  • Die Vorschauseite aktualisiert sich automatisch; bitten Sie Worker zu warten

Senden-Schaltfläche funktioniert nicht

  • Prüfen Sie die Browserkonsole auf Fehler
  • Überprüfen Sie, ob der turkSubmitTo-Parameter vorhanden ist
  • Auf CORS- oder Mixed-Content-Probleme prüfen

Worker können sich nicht anmelden

  • Überprüfen Sie, ob login.url_argument auf workerId gesetzt ist
  • Stellen Sie sicher, dass login.type url_direct ist

Weiterführende Informationen

Implementierungsdetails finden Sie in der Quelldokumentation.