Skip to content

क्राउडसोर्सिंग एकीकरण

Potato स्टडी को Prolific, SONA, CloudResearch Connect या प्रतिभागी ID पास करने वाले किसी भी पैनल पर चलाएं, URL लॉगिन, समापन कोड और ध्यान जांच के साथ।

Potato क्राउडसोर्स किए गए एनोटेशन इस तरह एकत्र करता है कि प्लेटफॉर्म लोगों को जिस URL पर भेजता है उसमें से प्रतिभागी ID पढ़ता है, और अंत में एक समापन कोड दिखाता है। Prolific, SONA सब्जेक्ट पूल, CloudResearch Connect, Clickworker और Microworkers, हर एक का अपना प्रोवाइडर है, और generic प्रोवाइडर उसी तरह काम करने वाले किसी भी अन्य पैनल को कवर करता है। Amazon Mechanical Turk 30 सितंबर 2026 को बंद हो गया, इसलिए वहाँ चलने वाली स्टडी को इनमें से किसी प्लेटफॉर्म पर ले जाना होगा, और नीचे "किसी स्टडी को MTurk से हटाना" खंड इसके चरण बताता है।

खुले पोर्ट पर चलाना

क्राउड वर्कर को सर्वर तक पहुँचना होता है, इसलिए इसे इंटरनेट के लिए खुले पोर्ट पर चलाएं:

bash
potato start your-project -p 8080

इसके बाद वर्कर्स https://your-server:8080/ पर पहुँचते हैं। TLS के लिए इसके आगे एक रिवर्स प्रॉक्सी लगाएं, जैसा कि प्रोडक्शन सेटअप में बताया गया है।

क्राउड प्रोवाइडर

crowdsourcing ब्लॉक प्लेटफॉर्म का नाम बताता है। Prolific, SONA, Connect, Clickworker और Microworkers के अपने प्रोवाइडर हैं, और generic किसी भी ऐसे पैनल को संभालता है जो URL में ID पास करता है और समापन कोड स्वीकार करता है, जैसे Besample, Positly, User Interviews, Testable Minds या Cint:

yaml
login:
  type: url_direct
  url_argument: response_id        # must match id_param below
 
crowdsourcing:
  provider: generic                # or prolific, sona, connect, clickworker, microworkers
  generic:
    platform_label: "Besample"     # shown on the done-page return button
    id_param: response_id          # URL parameter carrying the participant ID
    capture_params: [study]        # extra URL params to record
    completion:
      code: "BSMP-4432"
      redirect_url: "https://besample.app/complete?rid={worker_id}&code={code}"
      failed_code: "BSMP-FAIL"     # optional, for blocked participants

redirect_url प्लेसहोल्डर {code}, {worker_id}, {session_id}, {study_id} और capture_params में सूचीबद्ध कोई भी नाम स्वीकार करता है।

हर प्रोवाइडर प्रतिभागी ID को उस URL पैरामीटर से पढ़ता है जिसका नाम login.url_argument देता है, इसलिए crowdsourcing ब्लॉक के साथ login.type: url_direct रखें और url_argument को प्रोवाइडर के id_param पर सेट करें। पासवर्ड प्रॉम्प्ट को भी url_direct लॉगिन ही बंद करता है। बिना crowdsourcing ब्लॉक वाला कॉन्फ़िग पुराना व्यवहार बनाए रखता है, जिसमें अकेला लॉगिन ही ID पढ़ता है, और नीचे दिया गया Prolific का न्यूनतम सेटअप इसी का उपयोग करता है।

Prolific

न्यूनतम सेटअप

Prolific स्टडी चलाने के लिए दो सेटिंग्स काफी हैं:

yaml
login:
  type: url_direct
  url_argument: PROLIFIC_PID   # the default
 
completion_code: "YOUR-PROLIFIC-CODE"

Prolific से आने वाले वर्कर्स बिना पासवर्ड पूछे अपने PROLIFIC_PID के तहत लॉग इन हो जाते हैं। काम पूरा करने पर उन्हें समापन कोड और Prolific पर वापस जाने का एक बटन दिखता है।

Prolific प्रोवाइडर

prolific प्रोवाइडर उन प्रतिभागियों के लिए एक दूसरा कोड जोड़ता है जो टास्क पूरा नहीं करते। जो प्रतिभागी ध्यान जांच की वजह से ब्लॉक हो जाता है, या ट्रेनिंग फ़ेज़ में असफल होता है, उसे समापन कोड के बजाय failed_code मिलता है:

yaml
login:
  type: url_direct
  url_argument: PROLIFIC_PID
 
crowdsourcing:
  provider: prolific
  prolific:
    completion:
      code: "C1ABCDEF"          # defaults to the top-level completion_code
      failed_code: "C1FAILED"   # optional

स्टडी URL

अपनी Prolific स्टडी सेटिंग्स में URL को इस पर सेट करें:

text
https://your-server:8080/?PROLIFIC_PID={{%PROLIFIC_PID%}}&SESSION_ID={{%SESSION_ID%}}&STUDY_ID={{%STUDY_ID%}}

Prolific असली मान भर देता है। Potato प्रतिभागी ID के साथ SESSION_ID और STUDY_ID भी रिकॉर्ड करता है।

समापन पर रीडायरेक्ट करना

yaml
completion_code: "YOUR-PROLIFIC-CODE"
auto_redirect_on_completion: true
auto_redirect_delay: 5000   # milliseconds

रीडायरेक्ट के बिना, अंतिम पेज कोड को क्लिक-टू-कॉपी के साथ और एक वापसी बटन दिखाता है। जब आप चाहते हैं कि वर्कर्स कोड का रिकॉर्ड अपने पास रखें, तो यही सुरक्षित डिफ़ॉल्ट है।

Prolific API एकीकरण

बड़ी स्टडी के लिए Potato, Prolific API से बात कर सकता है। इससे वह लौटाए गए या टाइम-आउट हुए वर्कर्स के पास अटकी जगहें खाली कर सकता है और सर्वर व्यस्त होने पर स्टडी रोक सकता है। क्रेडेंशियल्स को उनकी अपनी फ़ाइल में रखें:

yaml
# configs/prolific_config.yaml
token: "your-prolific-api-token"
study_id: "your-study-id"
max_concurrent_sessions: 30
workload_checker: true
workload_checker_period: 300

फिर मुख्य कॉन्फ़िग को उस फ़ाइल की ओर इंगित करें:

yaml
login:
  type: prolific
 
prolific:
  config_file_path: configs/prolific_config.yaml
 
completion_code: "YOUR-PROLIFIC-CODE"

workload_checker तब तक बंद रहता है जब तक आप उसे चालू न करें। चालू होने पर, सक्रिय वर्कर्स की संख्या max_concurrent_sessions से अधिक होते ही Potato स्टडी रोक देता है और संख्या उसके 20% तक गिरने पर फिर शुरू करता है, लेकिन केवल तभी जब स्टडी को मॉनिटर ने ही रोका हो। जो स्टडी आपने खुद रोकी है, उसे Potato आपके लिए कभी फिर से शुरू नहीं करता।

छोड़े गए काम को वापस लेना

जब कोई सबमिशन RETURNED, TIMED-OUT या REJECTED स्थिति के साथ लौटता है, तो Potato उस वर्कर को सौंपे गए लेकिन बिना एनोटेट किए आइटम खाली कर देता है ताकि कोई और उन्हें ले सके। उसके पूरे किए हुए एनोटेशन रखे जाते हैं। instance_reclaim इस व्यवहार को हर स्थिति के लिए अलग से बदलता है:

yaml
instance_reclaim:
  enabled: true
  prolific:
    preserve_completed_annotations: true
    status_policies:
      TIMED-OUT:
        preserve_completed_annotations: true
      REJECTED:
        preserve_completed_annotations: false

SONA सब्जेक्ट पूल

SONA Systems वे प्रतिभागी पूल चलाता है जिनका उपयोग कई विश्वविद्यालय कोर्स क्रेडिट के लिए करते हैं। SONA हर प्रतिभागी के लिए एक अनोखा कोड स्टडी URL में डालता है, और Potato उसी कोड को प्रतिभागी की ID के रूप में इस्तेमाल करता है:

yaml
login:
  type: url_direct
  url_argument: sona_code
 
crowdsourcing:
  provider: sona
  sona:
    hostname: yourdept.sona-systems.com
    experiment_id: 123
    credit_token: your-credit-token   # both from the client-side completion URL on SONA's study information page
    id_param: sona_code               # the default; must match login.url_argument

SONA में स्टडी URL को https://your-server.com/?sona_code=%SURVEY_CODE% पर सेट करें। जब कोई प्रतिभागी काम पूरा करता है, तो Potato SONA की सर्वर-साइड क्रेडिट कॉल के ज़रिए खुद क्रेडिट दे देता है, इसलिए प्रतिभागी को SONA पर वापस जाने वाला कोई लिंक नहीं खोलना पड़ता। अगर वह कॉल विफल हो जाती है, तो अंतिम पेज उसकी जगह SONA का क्लाइंट-साइड क्रेडिट लिंक दिखाता है। हर क्रेडिट प्रतिभागी की स्टेट में दर्ज होता है, इसलिए अंतिम पेज को दोबारा लोड करने से क्रेडिट कभी दो बार नहीं मिलता।

CloudResearch Connect

Connect प्रतिभागियों को अपने Project Link के ज़रिए किसी बाहरी स्टडी पर भेजता है, जिसमें प्रतिभागी की ID participantId में होती है और वैकल्पिक रूप से assignmentId और projectId भी होते हैं। Potato तीनों को रिकॉर्ड करता है। समापन एक निश्चित कोड से होता है, या Connect प्रोजेक्ट की सेटिंग्स में दिखाए गए समापन URL पर रीडायरेक्ट से:

yaml
login:
  type: url_direct
  url_argument: participantId
 
crowdsourcing:
  provider: connect
  connect:
    completion:
      code: "ABC123"
      # or: redirect_url: "https://connect.cloudresearch.com/participant/project/<id>/complete"

Potato, Connect की REST API को कॉल नहीं करता, इसलिए स्वीकृतियाँ और बोनस Connect में ही दिए जाते हैं।

Clickworker

Clickworker के एक्सटर्नल-सर्वे ऑर्डर वर्कर्स को उनकी ID के साथ आपके URL पर भेजते हैं, और समापन की जांच उस कोड से होती है जिसे आप Clickworker पर अपलोड करते हैं:

yaml
login:
  type: url_direct
  url_argument: worker_id
 
crowdsourcing:
  provider: clickworker
  clickworker:
    id_param: worker_id      # the default
    completion:
      code: "CW-DONE-01"

प्रोवाइडर एक समापन सूचना भी भेज सकता है जो Clickworker की मार्केटप्लेस API के ज़रिए भुगतान शुरू करती है। यह पोस्टबैक प्रायोगिक है, क्योंकि इसके कॉन्ट्रैक्ट को सार्वजनिक दस्तावेज़ों से जांचा नहीं जा सका, और यह तब तक बंद रहता है जब तक कॉन्फ़िग postback_url के साथ experimental: true सेट न करे।

Microworkers

Microworkers कैंपेन हर वर्कर से कहते हैं कि वह काम पूरा करने के सबूत के तौर पर एक सत्यापन कोड वापस चिपकाए, जिसे VCODE कहा जाता है। Potato हर वर्कर का VCODE वर्कर ID और कैंपेन ID पर बने HMAC से निकालता है, इसलिए एक ही वर्कर को हमेशा एक ही कोड मिलता है, सीक्रेट के बिना कोई कोड का अनुमान नहीं लगा सकता, और प्रोवाइडर का verify_vcode मेथड किसी सबमिशन की जांच के लिए कोड की फिर से गणना करता है:

yaml
login:
  type: url_direct
  url_argument: mw_id
 
crowdsourcing:
  provider: microworkers
  microworkers:
    id_param: mw_id                        # matches {{MW_ID}} in the campaign URL
    capture_params: [campaign_id, slot_id]
    vcode_secret: "keep-this-private"
    vcode_prefix: "mw-"                    # optional

Microworkers पर कैंपेन URL को https://your-server.com/?mw_id={{MW_ID}}&campaign_id={{CAMP_ID}}&slot_id={{SLOT_ID}} पर सेट करें। Microworkers एक खुली माइक्रो-टास्क क्राउड है, इसलिए इसे नीचे दी गई ध्यान जांच और गोल्ड स्टैंडर्ड के साथ इस्तेमाल करें।

Amazon Mechanical Turk (बंद)

Amazon Mechanical Turk 30 सितंबर 2026 को स्थायी रूप से बंद हो गया, और अब यह न HIT स्वीकार करता है, न वर्कर्स भेजता है। Potato का mturk प्रोवाइडर और workerId लॉगिन अब भी लोड होते हैं, इसलिए आर्काइव किया गया MTurk कॉन्फ़िग शुरू हो जाता है, पर कोई वर्कर उस तक नहीं पहुँच सकता। MTurk एकीकरण पेज पुरानी स्टडी का कॉन्फ़िग पढ़ने वालों के लिए विवरण संभालकर रखता है।

किसी स्टडी को MTurk से हटाना

MTurk स्टडी का ज़्यादातर कॉन्फ़िग बिना बदलाव के काम आता है, क्योंकि ध्यान जांच, गोल्ड स्टैंडर्ड, ट्रेनिंग, असाइनमेंट और कोटा हर प्लेटफॉर्म पर एक जैसे काम करते हैं। इसे पाँच चरणों में ले जाया जाता है:

  1. एक प्लेटफॉर्म चुनें। Prolific और CloudResearch Connect सामान्य शोध आबादी से भर्ती करते हैं, SONA किसी विश्वविद्यालय के अपने पूल के लिए है, और Clickworker और Microworkers खुली माइक्रो-टास्क क्राउड हैं जिन्हें ज़्यादा सख्त गुणवत्ता नियंत्रण चाहिए।
  2. लॉगिन बदलें। login.type: url_direct रखें, और login.url_argument को workerId से बदलकर नए प्लेटफॉर्म का ID पैरामीटर (PROLIFIC_PID, sona_code, participantId, worker_id या mw_id) करें।
  3. प्लेटफॉर्म ब्लॉक बदलें। mturk ब्लॉक हटा दें, क्योंकि जब तक वह ब्लॉक मौजूद है Potato अब भी अपना MTurk API क्लाइंट शुरू करता है, और इस पेज से नए प्लेटफॉर्म का crowdsourcing ब्लॉक जोड़ें।
  4. HIT को बदलें। नए प्लेटफॉर्म पर स्टडी या प्रोजेक्ट बनाएं, उसका बाहरी URL लिंक में प्लेटफॉर्म के ID प्लेसहोल्डर के साथ अपने सर्वर की ओर इंगित करें, और प्लेटफॉर्म जो समापन कोड या रीडायरेक्ट देता है उसे सेट करें।
  5. गुणवत्ता नियंत्रण बनाए रखें। attention_checks, gold_standards और ट्रेनिंग फ़ेज़ को वैसा ही रहने दें, ताकि परिणाम MTurk डेटा से तुलनीय बने रहें।

गुणवत्ता नियंत्रण

ध्यान जांच

पहले से ज्ञात उत्तरों वाले आइटम, जो कतार में मिला दिए जाते हैं:

yaml
attention_checks:
  enabled: true
  items_file: data/attention_checks.json
  frequency: 10
  min_response_time: 3.0
  failure_handling:
    warn_threshold: 2
    warn_message: "Please read items carefully before answering."
    block_threshold: 5
    block_message: "You have been blocked due to too many incorrect responses."

min_response_time उस विफलता को पकड़ता है जिसका क्राउडसोर्सिंग में सबसे ज़्यादा खतरा होता है, यानी इतनी तेज़ी से क्लिक करते जाना जितनी तेज़ी से कोई आइटम पढ़ ही नहीं सकता।

गोल्ड स्टैंडर्ड

विशेषज्ञों द्वारा लेबल किए गए आइटम ध्यान के बजाय सटीकता मापते हैं, और डिफ़ॉल्ट रूप से चुप रहते हैं ताकि वर्कर्स को ऐसा कोई फ़ीडबैक न मिले जिससे वे उत्तर सीख लें:

yaml
gold_standards:
  enabled: true
  items_file: data/gold_standards.json
  mode: mixed
  frequency: 20
  accuracy:
    min_threshold: 0.7
    evaluation_count: 5

आइटम फ़ॉर्मेट और दोनों की रिपोर्टिंग के लिए गुणवत्ता नियंत्रण देखें।

कस्टम समापन पेज

बिल्ट-इन समापन पेज एक कोड और एक वापसी बटन संभालता है। जब आपको इससे ज़्यादा चाहिए, तो स्टडी को इसके बजाय एक surveyflow पेज से समाप्त करें:

yaml
surveyflow:
  on: true
  order:
    - pre_annotation
    - post_annotation
  pre_annotation:
    - surveyflow/consent.jsonl
  post_annotation:
    - surveyflow/end.jsonl

अंतिम पेज एक pure_display आइटम है, जिसमें आपकी ज़रूरत का कोई भी लिंक या टेक्स्ट हो सकता है:

json
{"id":"1","text":"Thanks for participating. Click below to complete the study.","schema":"pure_display","choices":["<a href=\"https://app.prolific.com/submissions/complete?cc=YOUR-CODE\" target=\"_blank\">Complete Study on Prolific</a>"]}

पूर्ण उदाहरण: Prolific स्टडी

yaml
annotation_task_name: "Sentiment Analysis Study"
task_dir: .
 
login:
  type: url_direct
  url_argument: PROLIFIC_PID
 
completion_code: "SENT2024"
auto_redirect_on_completion: false
 
hide_navbar: true
jumping_to_id_disabled: true
 
user_config:
  allow_all_users: true
 
assignment_strategy: random
max_annotations_per_user: 50
num_annotators_per_item: 3
 
phases:
  order:
    - consent
    - instructions
    - annotation
  consent:
    file: data/consent.html
  instructions:
    file: data/instructions.html
  annotation:
    type: annotation
 
attention_checks:
  enabled: true
  items_file: data/attention_checks.json
  frequency: 10
  failure_handling:
    warn_threshold: 2
    block_threshold: 5
 
data_files:
  - data/main.json
 
item_properties:
  id_key: id
  text_key: text
 
annotation_schemes:
  - annotation_type: radio
    name: sentiment
    description: "What is the sentiment of this text?"
    labels:
      - Positive
      - Negative
      - Neutral
    sequential_key_binding: true
 
output_annotation_dir: annotation_output/
export_annotation_format: jsonl

स्टडी की निगरानी

स्टडी चलते समय /admin पर एडमिन डैशबोर्ड समापन दर, प्रति इंस्टेंस समय और ध्यान जांच के परिणाम दिखाता है। वहाँ पहुँचने के लिए या तो साझा admin_api_key चाहिए या view_admin_dashboard वाली कोई भूमिका:

yaml
admin_api_key: "your-shared-key"
 
rbac:
  enabled: true
  user_role_assignments:
    researcher@university.edu: admin

एकत्र किए गए एनोटेशन को export CLI से निर्यात करें:

bash
python -m potato.export -c config.yaml -f csv -o ./export/

सर्वोत्तम अभ्यास

  1. पहले पायलट चलाएं: बड़े पैमाने पर शुरू करने से पहले कुछ वर्कर्स के साथ चलाकर देखें
  2. उचित भुगतान करें: टास्क का समय खुद मापें और असली अवधि के हिसाब से कीमत तय करें
  3. स्पष्ट निर्देश लिखें: उदाहरण और अपेक्षित सीमावर्ती मामले शामिल करें
  4. ध्यान जांच का उपयोग करें: बिना पढ़े क्लिक करने को विश्लेषण के समय नहीं, शुरू में ही पकड़ें
  5. गोल्ड स्टैंडर्ड जोड़ें: ध्यान और सटीकता अलग-अलग माप हैं
  6. डैशबोर्ड पर नज़र रखें: समस्याएं पहले दिन ठीक करना सस्ता है और पाँचवें दिन महंगा
  7. अस्वीकृति के मानदंड पहले से तय करें: शुरू करने से पहले वर्कर्स को मानक पता होना चाहिए
  8. नियमित रूप से निर्यात करें: स्टडी बंद होने तक प्रतीक्षा न करें

आगे पढ़ें

कार्यान्वयन विवरण के लिए स्रोत दस्तावेज़ीकरण, Prolific संदर्भ और प्लेटफॉर्म सर्वे देखें।