Skip to content
गाइड10 मिनट में पढ़ें

Prolific पर एनोटेशन अध्ययन चलाना

Prolific पर Potato का एनोटेशन अध्ययन चलाइए, URL से सीधे लॉगिन, completion code, attention check और API के ज़रिए submissions की निगरानी के साथ।

Potato Team

Prolific के अध्ययन URL को ?PROLIFIC_PID={{%PROLIFIC_PID%}} के साथ अपने Potato सर्वर पर भेजिए, login.type: url_direct और अध्ययन के कोड से मेल खाता completion_code सेट कीजिए, फिर हर प्रतिभागी अपनी Prolific ID से लॉगिन होगा और काम पूरा होने पर वापस Prolific पर भेजा जाएगा।

Prolific अकादमिक अध्ययनों के लिए बना प्रतिभागियों का एक पूल है, और crowdsourcing प्लेटफ़ॉर्म में यही वह है जिसे Potato सबसे पूरी तरह सपोर्ट करता है। यह गाइड बताती है कि Potato को कौन-सा कॉन्फ़िगरेशन चाहिए, Prolific की तरफ़ अध्ययन की कौन-सी सेटिंग्स करनी हैं, और पैसा ख़र्च करने से पहले कौन-सा गुणवत्ता नियंत्रण तैयार रखना ठीक रहता है।

शोधकर्ता एनोटेशन के लिए Prolific क्यों चुनते हैं

Prolific अपने प्रतिभागियों की जाँच ख़ुद करता है और उन्हें प्लेटफ़ॉर्म के ज़रिए भुगतान करता है, इसलिए crowdsourcing के जो हिस्से आम तौर पर अध्ययन का बजट खा जाते हैं, वे आपके सर्वर से बाहर सँभल जाते हैं। यह प्रति घंटे की न्यूनतम दर लागू करता है, प्रतिभागियों को जनसांख्यिकी और भाषा के पैमानों पर छाँटता है, और सहमति दर्ज करता है, जिससे लेबलिंग अध्ययन के लिए IRB की काग़ज़ी कार्रवाई छोटी हो जाती है। आम तौर पर इसकी तुलना Mechanical Turk से की जाती थी, जो 30 सितंबर 2026 को बंद हो गया, और जो अध्ययन वहाँ चलते थे उनके लिए यह बदलाव MTurk से अध्ययन को दूसरी जगह ले जाना में समझाया गया है।

शुरू करने से पहले क्या चाहिए

  1. Prolific पर शोधकर्ता का खाता।
  2. Potato किसी ऐसे सर्वर पर चल रहा हो जिसका सार्वजनिक HTTPS URL हो। सर्वर डिप्लॉयमेंट गाइड यह चरण कवर करती है।
  3. एक कॉन्फ़िगरेशन, जिसमें आपकी डेटा फ़ाइलें, item_properties और कम से कम एक एनोटेशन स्कीम हो।

Potato को कौन-सा कॉन्फ़िगरेशन चाहिए

चार सेटिंग्स किसी सामान्य Potato प्रोजेक्ट को ऐसा प्रोजेक्ट बना देती हैं जिसे Prolific चला सके। login.url_argument उस URL पैरामीटर का नाम बताता है जिसमें प्रतिभागी की Prolific ID आती है, completion_code को Prolific अध्ययन पर सेट किए गए कोड से मेल खाना चाहिए, और दोनों redirect keys प्रतिभागियों को किसी "काम पूरा" पेज पर छोड़ने के बजाय वापस Prolific भेजती हैं। इसके नीचे की assignment keys तय करती हैं कि किसी एक प्रतिभागी को ज़्यादा से ज़्यादा कितना काम मिले, और इसी से अध्ययन की लागत का अंदाज़ा पहले से लगाया जा सकता है।

yaml
annotation_task_name: "Sentiment Annotation Study"
task_description: "Classify the sentiment of short text snippets. This task takes about five minutes."
 
# Participants are logged in from the PROLIFIC_PID URL parameter
login:
  type: url_direct
  url_argument: PROLIFIC_PID
 
# Must match a completion code configured on the Prolific study
completion_code: "C1ABCDEF"
auto_redirect_on_completion: true
auto_redirect_delay: 5000
 
# Keep participants on task
hide_navbar: true
jumping_to_id_disabled: true
 
# Each participant labels 20 items; each item is labeled by 3 participants
assignment_strategy: random
max_annotations_per_user: 20
num_annotators_per_item: 3
 
data_files:
  - data/texts.json
 
item_properties:
  id_key: id
  text_key: text
 
output_annotation_dir: annotation_output/prolific-study/
export_annotation_format: jsonl
 
user_config:
  allow_all_users: true
  users: []
 
annotation_schemes:
  - annotation_type: radio
    name: sentiment
    description: "What is the sentiment expressed in this text?"
    labels:
      - name: positive
      - name: neutral
      - name: negative
    sequential_key_binding: true
    label_requirement:
      required: true

num_annotators_per_item इस आधार पर तय कीजिए कि आप डेटा के साथ क्या करने वाले हैं। अगर आप सहमति (agreement) रिपोर्ट करना या बहुमत वाला लेबल लेना चाहते हैं तो आम तौर पर तीन रखा जाता है, और जब किसी पायलट से साफ़ हो जाए कि कार्य ठीक से परिभाषित है तो एक भी काफ़ी है। इंटर-एनोटेटर सहमति की गाइड बताती है कि नतीजे को कैसे पढ़ें।

Prolific पर अध्ययन सेट करना

Prolific के अध्ययन फ़ॉर्म में external study URL को अपने Potato सर्वर पर सेट कीजिए, और query string में Prolific के placeholders रखिए:

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

Prolific IDs कैसे दर्ज हों, इस सवाल के जवाब में "I'll use URL parameters" चुनिए, फिर अध्ययन पर ऐसा completion code सेट कीजिए जो आपके कॉन्फ़िगरेशन के completion_code से मेल खाए। STUDY_ID और SESSION_ID बाद में ट्रैक करने के लिए प्रतिभागी के session में सहेज लिए जाते हैं।

लिंक पर क्लिक करने वाला प्रतिभागी URL में अपनी ID के साथ Potato पर पहुँचता है। Potato उस ID के नाम से बिना पासवर्ड वाला खाता बनाता है, प्रतिभागी को आपके सेट किए गए सभी चरणों से गुज़ारता है, और काम पूरा होने पर completion code दिखाता है, साथ में एक Return to Prolific बटन जो https://app.prolific.com/submissions/complete?cc=<code> पर ले जाता है। auto_redirect_on_completion सेट हो तो redirect auto_redirect_delay मिलीसेकंड के बाद अपने-आप हो जाता है।

डोमेन app.prolific.com लिखिए। पुराना डोमेन app.prolific.co अब HTTPS पर नहीं चलता, इसलिए किसी पुरानी गाइड से कॉपी किया गया completion URL प्रतिभागियों को काम पूरा करने के बाद एक बेकार पेज पर भेज देता है।

सहमति, निर्देश और अंत के सर्वे

ज़्यादातर crowdsourced अध्ययनों को एनोटेशन पेज के अलावा भी कुछ चाहिए होता है। Potato का phases ब्लॉक सहमति, स्क्रीनिंग, निर्देश और अध्ययन के बाद वाला सर्वे एनोटेशन चरण के आसपास रखता है, और प्रतिभागी इन्हें उसी क्रम में पार करते हैं जिसमें आप इन्हें लिखते हैं:

yaml
phases:
  order: [consent, prestudy, instructions, annotation, poststudy]
 
  consent:
    type: consent
    file: surveyflow/consent.json
 
  prestudy:
    type: prestudy
    file: surveyflow/prescreening.json
 
  instructions:
    type: instructions
    file: surveyflow/instructions.html
 
  poststudy:
    type: poststudy
    file: surveyflow/demographics.json

यह ब्लॉक ऊपर वाले कॉन्फ़िगरेशन में जोड़िए। annotation ही अकेला ज़रूरी चरण है, इसलिए जिस अध्ययन को सहमति फ़ॉर्म नहीं चाहिए वह बाक़ी सभी entries छोड़ सकता है। पुराने प्रोजेक्ट यही काम surveyflow से करते हैं, जिसे Potato अब भी पढ़ता है पर नए प्रोजेक्टों के लिए अब इसकी सलाह नहीं देता।

Attention check

Attention check ऐसा आइटम है जिसका सही जवाब पहले से पता होता है। इसे queue में मिला दिया जाता है ताकि ध्यान न देने वाला प्रतिभागी ऐसा ग़लत जवाब दे जो पकड़ में आ जाए। Potato इन्हें आपके डेटा से नहीं, इनकी अपनी फ़ाइल से लोड करता है, इसलिए ये checks आपके डेटासेट से बाहर रहते हैं:

yaml
attention_checks:
  enabled: true
  items_file: "data/attention_checks.json"
  frequency: 10
  min_response_time: 3.0
  failure_handling:
    warn_threshold: 2
    block_threshold: 5

यह ब्लॉक ऊपर वाले कॉन्फ़िगरेशन में जोड़िए। frequency: 10 हर दस आइटम पर एक check डालता है, और min_response_time ऐसे हर जवाब को फ़ेल कर देता है जो इतनी जल्दी आए कि कोई आइटम पढ़ ही न पाया हो, चाहे जवाब कुछ भी हो। घड़ी सर्वर पर चलती है, उस पल से जब उसने आइटम भेजा, उस पल तक जब उसे save मिला।

हर check आइटम में एक id, प्रतिभागी को दिखने वाला टेक्स्ट, और हर स्कीम के नाम के हिसाब से अपेक्षित जवाब होता है:

json
[
  {
    "id": "attn_001",
    "text": "Please select 'positive' for this item to verify you are reading carefully.",
    "expected_answer": {"sentiment": "positive"}
  }
]

block_threshold अपने अध्ययन की लंबाई देखकर तय कीजिए। जो प्रतिभागी 20 आइटम वाले कार्य में पाँच checks में फ़ेल होता है, वह असल में एनोटेट कर ही नहीं रहा था; जो 300 आइटम में पाँच बार फ़ेल होता है, वह शायद कुछ देर थका हुआ था, और उसे ब्लॉक करने से उसका बाक़ी काम भी हाथ से निकल जाता है।

चलते अध्ययन की निगरानी

login.type: prolific सेट कीजिए और एक prolific ब्लॉक जोड़िए, तो Potato पहले से हो रहे URL-direct लॉगिन के अलावा submissions की स्थिति जानने के लिए Prolific API से भी पूछता रहता है:

yaml
login:
  type: prolific
  url_argument: PROLIFIC_PID
 
prolific:
  config_file_path: configs/prolific_config.yaml
 
completion_code: "C1ABCDEF"

यह ब्लॉक ऊपर वाले कॉन्फ़िगरेशन में जोड़िए। यह जिस फ़ाइल की ओर इशारा करता है उसमें API token होता है, इसलिए उसे version control से बाहर रखिए:

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

Token सेट होने पर admin डैशबोर्ड में एक Prolific पैनल जुड़ जाता है, जो अध्ययन को publish, pause और stop करता है, submissions को approve या reject करता है, बोनस देता है, और जगहें बढ़ाने की लागत पहले से दिखाता है। Workload monitor सक्रिय प्रतिभागियों की संख्या max_concurrent_sessions तक पहुँचने पर अध्ययन रोक देता है और संख्या उस अधिकतम के 20% से नीचे आने पर फिर शुरू कर देता है। यह सिर्फ़ वही अध्ययन फिर शुरू करता है जिसे इसने ख़ुद रोका हो, इसलिए जो अध्ययन आप Prolific में हाथ से रोकते हैं, वह रुका ही रहता है।

बीच में छोड़ने वाले प्रतिभागी

जब कोई प्रतिभागी काम पूरा किए बिना चला जाता है, तो Prolific उसके submission को 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

यह ब्लॉक ऊपर वाले कॉन्फ़िगरेशन में जोड़िए। यह फ़र्क़ सोच-समझकर तय करना चाहिए। जिस प्रतिभागी का समय ख़त्म हुआ, उसने आम तौर पर किसी रुकावट तक ईमानदारी से एनोटेट किया था, जबकि reject हुए प्रतिभागी ने ऐसा काम दिया जिसका भुगतान न करने का फ़ैसला आपने किया, और उसे डेटासेट में रखना उस reject को कमज़ोर करता है।

आउटपुट में क्या होता है

Potato हर एनोटेटर की फ़ाइलें output_annotation_dir के नीचे लिखता है, और export_annotation_format सेट हो तो <output_annotation_dir>/exports/<format>/ के नीचे समय-समय पर एक export भी लिखता है। हर exported record में instance, एनोटेटर और स्कीम के नाम के हिसाब से लेबल होते हैं:

json
{"instance_id": "t_014", "user_id": "5f2c9a1b3d4e5f6a7b8c9d0e", "labels": {"sentiment": {"positive": "positive"}}, "spans": {}, "links": {}}

user_id प्रतिभागी की Prolific ID है, क्योंकि Potato ने उसे इसी username से बनाया था, और इसी से आप किसी पंक्ति को approval या बोनस के लिए Prolific submission से मिला पाते हैं। डेटासेट प्रकाशित करते समय इस कॉलम को पहचान उजागर करने वाला डेटा मानिए।

पहले पायलट चलाइए

पूरा अध्ययन शुरू करने से पहले 5 से 10 प्रतिभागियों के साथ चलाइए, और सिर्फ़ उनकी completion rate देखने के बजाय उनका आउटपुट पढ़िए। दो गड़बड़ियाँ बाद में पकड़ में आएँ तो महँगी पड़ती हैं। पहली, ऐसा निर्देश जो इस तरह अस्पष्ट हो कि आपको दिखे ही नहीं, क्योंकि कार्य आपने ख़ुद लिखा है; दूसरी, प्रति आइटम समय जो आपके अनुमान से बहुत अलग हो, जिसका मतलब है कि आपकी भुगतान दर किसी न किसी दिशा में ग़लत है।

अध्ययन की क़ीमत अपने समय से नहीं, पायलट के median समय से तय कीजिए। इंटरफ़ेस को फ़ोन की चौड़ाई पर भी इस्तेमाल लायक़ रखिए, क्योंकि अध्ययन का विवरण कुछ भी कहे, कुछ प्रतिभागी फ़ोन पर ही होंगे। Submissions जल्दी approve कीजिए, क्योंकि लोग पैसे का इंतज़ार कर रहे होते हैं, और क्योंकि आपका approval समय उन भावी प्रतिभागियों को दिखता है जो तय कर रहे होते हैं कि आपका अध्ययन लें या नहीं।

आगे के क़दम

पूरा संदर्भ इस साइट पर Crowdsourcing इंटीग्रेशन में है, और Potato रिपॉज़िटरी में Prolific इंटीग्रेशन का दस्तावेज़ डैशबोर्ड पैनल के पीछे के admin API endpoints कवर करता है। अगर आपको अध्ययन बनाना, qualification sync करना या paid screen-outs अपने कोड से चलाने हों, तो वहीं से शुरू कीजिए।