Skip to content

Span और संरचित आउटपुट के लिए सहमति

span, NER, और संरचित एनोटेशन पर Cohen का और Fleiss का kappa क्यों टूट जाता है, और उनकी जगह क्या इस्तेमाल करें: सहमति के तौर पर F1, exact बनाम partial मैच, और Krippendorff का unitized alpha।

Cohen के kappa जैसी chance-corrected सहमति यह मानकर चलती है कि हर एनोटेटर एक ही तय आइटम-समूह को एक ही तय श्रेणी-समूह से लेबल करता है। Span एनोटेशन इस मान्यता को तोड़ देती है: एनोटेटर इस पर असहमत हो सकते हैं कि span कहाँ शुरू होता है, कहाँ खत्म होता है, और वह है भी या नहीं। Span के लिए मानक विश्वसनीयता माप pairwise F1 है, kappa नहीं, और आपको पहले ही तय करना होता है कि सीमाओं का आंशिक ओवरलैप सहमति में गिना जाएगा या नहीं। यह मार्गदर्शिका बताती है कि यहाँ आम मेट्रिक क्यों नाकाम रहते हैं और उनकी जगह क्या रिपोर्ट करना चाहिए।

kappa span पर क्यों फिट नहीं बैठता

किसी chance-corrected गुणांक को तीन चीज़ें चाहिए: आइटम की एक तय सूची, लेबल की एक तय सूची, और यह गिनने की क्षमता कि एनोटेटर संयोग से कितनी बार सहमत होते। Span कार्य इनमें से कोई भी साफ़ तौर पर नहीं देते। लेबल करने के लिए “आइटम” की कोई पहले से तय सूची नहीं होती, एनोटेटर पढ़ते-पढ़ते span गढ़ता जाता है, इसलिए एक ही दस्तावेज़ पर दो लोग अलग-अलग संख्या में span बना सकते हैं। और कोई अर्थपूर्ण negative वर्ग भी नहीं है: “जिन आइटम को किसी ने चिह्नित नहीं किया” वे हर संभव substring हैं, एक बेहिसाब बड़ा और अपरिभाषित समूह।

आख़िरी बात ही सबसे भारी पड़ती है। Hripcsak and Rothschild (2005) ने दिखाया कि जब negative वर्ग बहुत बड़ा या अपरिभाषित हो, जैसा information retrieval और span extraction में होता है, तो दो एनोटेटरों के एक ही मनमाने span पर सहमत होने की संभावना व्यावहारिक रूप से शून्य रहती है, इसलिए chance correction से मुश्किल से कुछ बदलता है और kappa के पीछे की मान्यताएँ टिकती नहीं। उनका नतीजा एक साफ़-सुथरे विकल्प का मानक आधार है: F-measure खुद ही उपयुक्त सहमति सांख्यिकी है। एक एनोटेटर के span को संदर्भ मानिए और दूसरे के span को पूर्वानुमान, F1 निकालिए, और एनोटेटरों के सभी जोड़ों पर औसत ले लीजिए। F1 सममित है, इसलिए जोड़े का क्रम मायने नहीं रखता।

Exact मैच या partial मैच: मापने से पहले तय करें

आप जो संख्या रिपोर्ट करते हैं वह पूरी तरह इस पर टिकी है कि किसे सही मिलान गिना जाए, और इसका कोई सार्वभौमिक जवाब नहीं है, इसलिए अपना चुनाव साफ़ लिखें।

  • Exact मैच: दो span तभी सहमत माने जाते हैं जब उनकी दोनों सीमाएँ एक जैसी हों। सख़्त, और तब सही चुनाव जब सीमाएँ अपने आप में अर्थ रखती हों (कानूनी उद्धरण, रासायनिक नाम)।
  • Partial / ओवरलैप मैच: दो span सहमत माने जाते हैं अगर वे कहीं भी ओवरलैप करें, या किसी सीमा-मान से ज़्यादा। ज़्यादा उदार, और तब ठीक जब इकाई का होना उसके ठीक-ठीक विस्तार से ज़्यादा मायने रखता हो।
  • सीमा बनाम लेबल: टाइप वाले span (NER) के लिए दो सवाल अलग रखें, क्या एनोटेटरों ने एक ही विस्तार चिह्नित किया, और क्या उन्होंने उसे एक ही टाइप दिया? दोनों को एक साथ रिपोर्ट करने से यह छिप जाता है कि असहमति असल में किससे आ रही है।

Artstein and Poesio (2008) कम्प्यूटेशनल भाषाविज्ञान में सहमति पर मानक सर्वेक्षण है और इसी “unitizing” समस्या को, यानी टेक्स्ट को इकाइयों में बाँटने को लेकर होने वाली असहमति को, विस्तार से खोलता है। जब किसी पद्धतिगत चुनाव का बचाव करना हो, तो यही संदर्भ उद्धृत करें।

जब आपको सचमुच एक chance-corrected संख्या चाहिए

अगर आप कार्य को इकाइयों के एक तय समूह तक घटा सकें, तो chance correction फिर से वैध हो जाता है। दो आम तरीके:

  • Token-स्तर लेबलिंग: span कार्य को प्रति token एक लेबल के रूप में फिर से गढ़ें (BIO स्कीम)। अब हर token एक तय आइटम है जिसका लेबल-समूह छोटा है, और Fleiss का kappa या Krippendorff का alpha सीधे लागू होता है। पेच यह है कि token-स्तर की सहमति फूली हुई दिखती है, ज़्यादातर token आसान “outside” वर्ग के होते हैं, इसलिए ऊँची संख्या असली सीमा-असहमति को छिपा सकती है।
  • Unitized alpha: Krippendorff (2004) ने alpha का एक रूप ठीक उसी स्थिति के लिए विकसित किया जहाँ एनोटेटर खुद ही किसी सतत सामग्री को खंडों में बाँटते हैं। जब आपको सेगमेंटेशन के लिए एक ही chance-corrected विश्वसनीयता आँकड़ा चाहिए, तो सैद्धांतिक रूप से यही सही विकल्प है, बशर्ते आप ज़्यादा सेटअप की कीमत चुका सकें।

एक व्यावहारिक बीच का रास्ता: token-स्तर का kappa और span-स्तर का F1, दोनों साथ रिपोर्ट करें। पहला लेबल की एकरूपता बताता है, दूसरा सीमाओं की, और दोनों के बीच का फ़ासला बताता है कि किस समस्या को ठीक करना है।

Potato में यह कैसे करें

Potato श्रेणीबद्ध स्कीमा के लिए Krippendorff का alpha अपने आप निकालता है, पर span स्कीमा में दस्तावेज़-स्तर की संख्या सीमा-असहमति को छिपा देती है, इसलिए उसी स्तर पर मापें जो आपके लिए सचमुच मायने रखता है। भरोसेमंद तरीका यह है कि एनोटेटर एक साझा उपसमूह पर ओवरलैप करें, उनके span एक्सपोर्ट करें, और अपने चुने हुए मैच नियम के तहत pairwise F1 खुद निकालें।

yaml
annotation_schemes:
  - name: pii_spans
    annotation_type: span
    description: "Highlight every span that reveals personal information."
    labels:
      - name: person
      - name: location
      - name: org
 
# Overlap a subset so agreement is measurable
automatic_assignment:
  on: true
  instance_per_annotator: 100
  labels_per_instance: 3

एक्सपोर्ट में हर एनोटेटर के span उनके character offset और लेबल के साथ बने रहते हैं, यानी offline exact-match या overlap F1 निकालने के लिए, और सीमा-सहमति को टाइप-सहमति से अलग करने के लिए जो कुछ चाहिए वह सब मौजूद है। अगर आपके span टाइप वाले हैं, तो F1 दो बार निकालें, एक बार टाइप को अनदेखा करके (सीमा-सहमति) और एक बार टाइप का मिलान ज़रूरी रखकर (पूर्ण सहमति)।

आगे पढ़ें