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:
- Sie erstellen ein External Question HIT auf MTurk, das auf Ihren Potato-Server zeigt
- Worker klicken auf Ihr HIT und werden zu Ihrem Potato-Server weitergeleitet
- Potato extrahiert die Worker-ID und andere Parameter aus der URL
- Worker erledigen die Annotationsaufgabe
- Nach Abschluss klicken Worker auf "Submit HIT to MTurk"
URL-Parameter
MTurk übergibt vier Parameter an Ihre External Question URL:
| Parameter | Beschreibung |
|---|---|
workerId | Eindeutiger MTurk-Bezeichner des Workers |
assignmentId | Eindeutige ID für dieses Worker-HIT-Paar |
hitId | Der HIT-Bezeichner |
turkSubmitTo | URL, an die das Abschlussformular per POST gesendet werden soll |
Voraussetzungen
Serveranforderungen
-
Öffentlich zugänglicher Server mit:
- Offenem Port (typischerweise 8080 oder 443)
- HTTPS empfohlen (für einige Browser erforderlich)
- Stabiler Internetverbindung
-
Python-Umgebung mit installiertem Potato
MTurk-Anforderungen
- MTurk Requester-Konto: Registrieren Sie sich unter requester.mturk.com
- Finanziertes Konto: Guthaben für Produktion hinzufügen (Sandbox ist kostenlos)
Schnellstart
Schritt 1: Potato-Konfiguration erstellen
# 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
- negativeSchritt 2: Server starten
# 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.pemSchritt 3: HIT auf MTurk erstellen
Erstellen Sie ein External Question HIT mit dieser XML-Vorlage:
<?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>Wichtig: Verwenden Sie & statt & in XML.
Konfigurationsreferenz
Erforderliche Einstellungen
login:
type: url_direct # Required: enables URL-based authentication
url_argument: workerId # Required: MTurk uses 'workerId' parameterEmpfohlene Einstellungen
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
| Dienst | URL |
|---|---|
| Requester | https://requestersandbox.mturk.com |
| Worker | https://workersandbox.mturk.com |
| API-Endpunkt | https://mturk-requester-sandbox.us-east-1.amazonaws.com |
Lokales Testen
MTurk URL-Parameter lokal testen:
# 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:
pip install boto3Erstellen Sie configs/mturk_config.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:
mturk:
enabled: true
config_file_path: configs/mturk_config.yamlHITs programmatisch erstellen
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']}")Bewährte Methoden
Aufgabengestaltung
- Klare Anweisungen: Detaillierte Beispiele bereitstellen
- Angemessene Zeit: Worker nicht unter Druck setzen
- Fairer Lohn: Mindestens Mindestlohnäquivalent ($12-15/Stunde)
- Überschaubare Länge: 5-15 Minuten pro HIT ist ideal
Qualitätskontrolle
- Qualifikationstests: Worker im Voraus prüfen
- Aufmerksamkeitsprüfungen: Verifizierungsfragen einbeziehen
- Redundanz: Mehrere Worker pro Eintrag (3+ empfohlen)
- Stichproben überprüfen: Eine Teilmenge manuell prüfen
Technisch
- Sonderfälle behandeln: Worker können neu laden oder zurückgehen
- Fortschritt speichern: Wenn möglich automatisch speichern
- 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_argumentaufworkerIdgesetzt ist - Stellen Sie sicher, dass
login.typeurl_directist
Weiterführende Informationen
- Crowdsourcing Integration - Allgemeine Crowdsourcing-Einrichtung
- Quality Control - Aufmerksamkeitsprüfungen und Goldstandards
- Task Assignment - Zuweisungsstrategien
Implementierungsdetails finden Sie in der Quelldokumentation.