Skip to content
Guides8 min read

एरर बार वाले लेबल: एनोटेशन के लिए आइटम रिस्पॉन्स थ्योरी

आपके एनोटेटरों ने जो बताया, बहुमत उसका ज़्यादातर हिस्सा फेंक देता है। आइटम रिस्पॉन्स थ्योरी हर लेबल को एक पोस्टीरियर प्रायिकता और एक विश्वास अंतराल देती है, एनोटेटर की क्षमता और आइटम की कठिनाई का अनुमान लगाती है, और टूटी हुई कोडबुक प्रविष्टियाँ पकड़ लेती है, वह भी बिना गोल्ड लेबल और बिना किसी LLM के।

Potato Team

बहुमत हर एनोटेटर को बराबर भरोसेमंद और हर आइटम को बराबर कठिन मानकर चलता है, और प्रायिकता के बजाय एक गिनती बताता है। आइटम रिस्पॉन्स थ्योरी (IRT) दोनों धारणाएँ छोड़ देती है: वह सिर्फ़ सहमति के पैटर्न से हर एनोटेटर की क्षमता और हर आइटम की कठिनाई का अनुमान लगाती है, और फिर हर लेबल को विश्वास अंतराल सहित एक पोस्टीरियर प्रायिकता के रूप में बताती है। इसके लिए न गोल्ड लेबल चाहिए, न कोई LLM। Potato में यह साइकोमेट्रिक्स इंजन है, और यह एनोटेशन आते-आते लाइव चलता है।

तीन एनोटेटर एक आइटम को लेबल करते हैं। दो कहते हैं sarcastic, एक कहता है sincere। बहुमत उसे sarcastic बताकर आगे बढ़ जाता है, और आपका डेटासेट इसे ठीक उतने ही भरोसे के साथ दर्ज करता है जितने भरोसे के साथ उस आइटम को जिस पर तीनों सहमत थे।

यह जानकारी फेंक देना है। असहमत होने वाला व्यक्ति शायद आपका सबसे भरोसेमंद एनोटेटर हो। आइटम शायद वह हो जो सबको कठिन लगता है। गिनती में इनमें से कोई बात नहीं बचती।

एनोटेटर की क्षमता का लाइव अनुमान, विश्वास अंतरालों के साथ, ताकि हर लेबल को सादे वोट के बजाय एक पोस्टीरियर मिलेविश्वास अंतरालों के साथ एनोटेटर की क्षमता

आइटम रिस्पॉन्स थ्योरी है क्या?

आइटम रिस्पॉन्स थ्योरी साइकोमेट्रिक्स से आती है, जहाँ इसे मानकीकृत परीक्षाओं के अंक निकालने के लिए बनाया गया था। समझ यह है कि एक परीक्षा आपको एक साथ दो चीज़ें बताती है: हर परीक्षार्थी कितना सक्षम है, और हर सवाल कितना कठिन है। दोनों का अनुमान सिर्फ़ उत्तरों के पैटर्न से एक साथ लगाया जा सकता है, क्योंकि वे एक-दूसरे को बाँधते हैं। जिस सवाल को सक्षम छात्र ग़लत करते हैं, वह कठिन सवाल है। जो छात्र कठिन सवाल सही करता है, वह सक्षम छात्र है।

एनोटेशन की बनावट भी यही है। एनोटेटर परीक्षार्थी हैं, आइटम सवाल हैं, और किसी के पास आंसर की नहीं है।

Potato GLAD का एक बहुवर्गीय सामान्यीकरण फ़िट करता है (Whitehill et al. 2009), जो तीन चीज़ों का अनुमान साथ-साथ लगाता है:

  • हर आइटम का सही लेबल, एक प्रायिकता वितरण के रूप में
  • हर एनोटेटर की क्षमता (θ), मानक त्रुटि सहित
  • हर आइटम की कठिनाई, और प्रति-आइटम एक विभेदन निदान

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

इसे चालू करना

yaml
psychometrics:
  enabled: true
  schema: sarcasm
  confidence_threshold: 0.95
  min_annotators_per_item: 2

इतने भर से आपको विश्लेषण की परत मिल जाती है। आपका निर्यात इससे:

text
sarcastic    (2 of 3 votes)

इसमें बदल जाता है:

text
sarcastic    p = 0.94 [0.88 – 0.97]

यह प्रायिकता मॉडल का पोस्टीरियर है, जो सिर्फ़ कितनों ने वोट दिया इसके बजाय यह तौलता है कि किसने वोट दिया। अंतराल क्षमता के अनुमानों पर एक संवेदनशीलता पट्टी है।

आगे की प्रक्रिया में वह संख्या काम की है। आप सॉफ़्ट लेबल पर प्रशिक्षण कर सकते हैं, मूल्यांकन सेट को किसी विश्वास सीमा से ऊपर के आइटमों तक छान सकते हैं, या कम प्रायिकता वाले आइटमों को चुपचाप ग़लत लेबल हुआ मानने के बजाय सचमुच अस्पष्ट मान सकते हैं। असहमति शोर रहना बंद कर देती है जिसे औसत में मिटा देना हो, और यह बात असहमति शोर नहीं, संकेत है के साथ पढ़ने लायक है।

एनोटेटर की क्षमता, ईमानदारी से पेश की गई

क्षमता का अनुमान सहमति के पैटर्न से लगता है। 1.0 का मान नए एनोटेटर के लिए प्रायर है, 0 का मतलब है कि उस एनोटेटर के लेबल कोई जानकारी नहीं देते, और ऋणात्मक का मतलब है व्यवस्थित रूप से ग़लत।

हर अनुमान अपनी मानक त्रुटि के साथ आता है, और यह बिंदु-अनुमान से ज़्यादा मायने रखता है। बारह लेबल वाले एनोटेटर की व्हिस्कर चौड़ी होती है, और डैशबोर्ड उसे चौड़ा ही खींचता है। चौड़ी व्हिस्कर के आधार पर कर्मचारियों से जुड़े फ़ैसले न लें। मानक त्रुटियाँ अनुमानित हैं (मोड पर फ़िशर सूचना) और बनावट के चलते कुछ हद तक आशावादी हैं। वे इसलिए हैं कि आप किसी संख्या को ज़रूरत से ज़्यादा न पढ़ लें, इसलिए नहीं कि आपको किसी को निकालने का लाइसेंस मिल जाए।

अगर आपको किसी भी श्रेणीगत योजना पर दक्षता का सीधा-सादा पाठ चाहिए, तो MACE पुराना चचेरा भाई है और अब भी अच्छा औज़ार है। फ़र्क़ यह है कि MACE बैच विश्लेषण की तरह चलता है, जबकि साइकोमेट्रिक्स असाइनमेंट लूप के भीतर बैठकर अध्ययन के चलते-चलते उस पर असर डालता है।

कोडबुक-गड़बड़ी पकड़ने वाला

यही हिस्सा लोगों को चौंकाता है।

कठिनाई के साथ-साथ मॉडल विभेदन का भी अनुमान लगाता है: किसी आइटम पर क्या एनोटेटर की क्षमता का आम राय से सहमत होने के साथ सहसंबंध है? आम तौर पर होता है। सक्षम एनोटेटर आख़िरी जवाब से ज़्यादा बार सहमत होते हैं, और मोटे तौर पर “सक्षम” का मतलब यही है।

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

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

एनोटेशन बजट वहाँ ख़र्च करना जहाँ उससे कुछ मिले

तय अतिरेक, यानी “हमेशा प्रति आइटम तीन एनोटेटर” वाला नियम, उस आइटम पर भी उतना ही ख़र्च करता है जिस पर सब सहमत हैं और उस पर भी जो टीम को बीचोंबीच बाँट देता है। यह उल्टा है।

yaml
assignment_strategy: psychometric
num_annotators_per_item: 4
psychometrics:
  enabled: true
  confidence_threshold: 0.95
  cost_per_judgment: 0.08

इसके साथ, जब कोई एनोटेटर काम माँगता है तो Potato बचे हुए आइटमों को इस आधार पर क्रम में लगाता है कि उस ख़ास एनोटेटर के उस ख़ास आइटम को लेबल करने से कितनी सूचना मिलने की उम्मीद है। जिन आइटमों का पोस्टीरियर पहले ही confidence_threshold पार कर चुका है, वे परोसे जाने ही बंद हो जाते हैं। डैशबोर्ड उन रायों की गिनती करता है जो आपको ख़रीदनी नहीं पड़ीं, और cost_per_judgment सेट करने पर उनकी क़ीमत भी बताता है।

चालू करने से पहले जान लेने लायक दो चेतावनियाँ:

  • कोल्ड स्टार्ट। जब तक पर्याप्त लेबल जमा नहीं होते, असाइनमेंट यादृच्छिक पर लौट आता है। साझा एनोटेटरों के बिना मॉडल क्षमता को कठिनाई से अलग नहीं कर सकता, और वह इसका दिखावा भी नहीं करेगा। डैशबोर्ड इस दौरान एक वार्म-अप मीटर दिखाता है।
  • बैचिंग। क़तारें छोटी हों तो क्रम सबसे ताज़ा रहता है। हर एनोटेटर को 200 आइटमों का बैच थमा देना अनुकूलन को पतला कर देता है, क्योंकि क्रम तब गिना गया था जब उनमें से ज़्यादातर लेबल थे ही नहीं।

कुछ भी ख़र्च करने से पहले अतिरेक तय करना

हर परियोजना यह अंदाज़ा भर लगाती है कि उसे प्रति आइटम कितने एनोटेटर चाहिए। स्टडी डिज़ाइनर इसका जवाब अंदाज़े के बजाय एक मोंटे कार्लो सिमुलेशन से देता है:

bash
python -m potato.psychometrics.design --items 500 --accuracy 0.75 \
    --classes 3 --target-ci 0.10 --cost 0.08
text
ann/item   alpha     95% interval   width  majority acc  judgments       cost
       2   0.392 [ 0.330,  0.439]   0.109         0.751       1000      80.00
       3   0.388 [ 0.338,  0.431]   0.093         0.864       1500     120.00  <- recommended

सिफ़ारिश वह सबसे सस्ता अतिरेक होता है जिसका Krippendorff's α पर 95% अंतराल आपके लक्ष्य से अब भी सँकरा हो। --accuracy वह इनपुट है जिसे अंदाज़े के बजाय एक छोटे पायलट से मापना चाहिए।

यही गणना ब्राउज़र में भी चलती है, अगर आप इस सवाल का जवाब पाने के लिए कुछ इंस्टॉल नहीं करना चाहते।

यह क्या नहीं करता

IRT कोई जादू नहीं है। कुछ ईमानदार सीमाएँ:

  • यह एकल-विकल्प श्रेणीगत योजनाओं का मॉडल बनाता है, radio और likert। बहु-चयन का मॉडल नहीं बनता।
  • इसे साझा एनोटेटर चाहिए। अगर हर आइटम को कोई अलग व्यक्ति लेबल करे, तो सीखने लायक कोई सहमति-संरचना बचती ही नहीं, और मॉडल आपको बता देगा कि वह अब भी वार्म-अप कर रहा है।
  • एक ही एनोटेटर के साथ, या हर जगह सर्वसम्मत लेबलों के साथ, फ़िट बनावट से ही अपभ्रष्ट रहता है। यह सही व्यवहार है, गड़बड़ी नहीं।

बदले में यह आपको ऐसा डेटासेट देता है जिसमें हर लेबल अपनी अनिश्चितता साथ लिए चलता है, एक ऐसा एनोटेटर समूह जिसे आप समझते हैं, और उन जगहों की सूची जहाँ आपकी कोडबुक टूटी हुई है।

आगे पढ़ें