Skip to content

बहुभाषी और कम-संसाधन एनोटेशन

अंग्रेज़ी से बाहर की भाषाओं में एनोटेशन: संसाधनों की खाई, मातृभाषियों के साथ सहभागी तरीक़े, और दाएँ-से-बाएँ लिपि, फ़ॉन्ट व अनूदित लेबल के साथ Potato के इंटरफ़ेस का स्थानीयकरण।

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

संसाधनों की खाई सचमुच है, और बड़ी है

दुनिया में क़रीब 7,000 भाषाएँ हैं और NLP ढंग से कुछ दर्जन को ही सँभालता है। Joshi et al. (2020) ने इसे आँकड़ों में रखा: थोड़ी-सी भाषाओं के पास भरपूर लेबल किया डेटा है, जबकि अरबों लोगों की बोली जाने वाली बाक़ी भाषाओं के पास लगभग कुछ नहीं, और यह खाई ख़ुद को चौड़ा करती जाती है क्योंकि संसाधन उन्हीं भाषाओं की ओर बहते हैं जिनके पास पहले से हैं। अड़चन आम तौर पर एनोटेशन पर आकर टिकती है। अगर आप चाहते हैं कि कोई मॉडल किसी कम-संसाधन भाषा में काम करे, तो किसी को उस भाषा में डेटा लेबल करना ही होगा, और गुणवत्ता वहीं बनती या बिगड़ती है।

भाषा में ही नहीं, भाषा-समुदाय के साथ एनोटेट करें

पहला मन यही करता है कि सस्ते द्विभाषी crowdworker रख लिए जाएँ और अंग्रेज़ी दिशानिर्देश का अनुवाद करा लिया जाए। इन दोनों में जोखिम है। Bird (2020) उन दोहनकारी तरीक़ों के ख़िलाफ़ तर्क देते हैं जो भाषा-समुदाय को महज़ डेटा के स्रोत की तरह बरतते हैं, और Masakhane परियोजना का सहभागी मॉडल (Nekoto et al., 2020) अफ़्रीकी भाषाओं के लिए बड़े पैमाने पर विकल्प को काम करते हुए दिखाता है: मातृभाषी कार्य की रूपरेखा बनाने में मदद करते हैं, दिशानिर्देश लिखते हैं और लेबल के मालिक होते हैं, न कि कहीं और लिए गए फ़ैसलों पर मुहर लगाते हैं। इसके दो व्यावहारिक नतीजे:

  • धाराप्रवाह वक्ता चुनें, और हो सके तो सही उपभाषा के। भाषा एकसार नहीं होती, बोली, इलाक़ा और शैली मायने रखते हैं, और एक उपभाषा का वक्ता दूसरी को ग़लत लेबल कर सकता है। द्विभाषी होना मातृभाषी होने के बराबर नहीं।
  • यह न मान लें कि श्रेणियाँ ज्यों-की-त्यों चली आएँगी। भाव, आपत्तिजनकता, शिष्टता, यहाँ तक कि named-entity के प्रकार भी संस्कृति से बँधे होते हैं। अंग्रेज़ी की शिष्टता के लिए बना दिशानिर्देश ऐसी भाषा में चुपचाप टूट सकता है जहाँ शिष्टता व्याकरण में ही दर्ज होती है। वक्ताओं से केवल शब्दों का अनुवाद नहीं, स्कीम को ढलवाएँ। यह अनुवाद का नहीं, स्कीम की रूपरेखा का फ़ैसला है।

showcase के कई कार्य इसी तरह का बहुभाषी डेटा दोहराते हैं और शुरुआत के लिए अच्छे हैं: 15 भाषाओं में cross-lingual natural language inference (XNLI), 200 भाषाओं में अनुवाद की गुणवत्ता (FLORES), और इंडोनेशिया की क्षेत्रीय भाषाओं के लिए भाव-विश्लेषण (NusaX)।

Potato इंटरफ़ेस का स्थानीयकरण

अब व्यावहारिक आधा हिस्सा। Potato एनोटेटर को दिखने वाले इंटरफ़ेस का स्थानीयकरण config से करता है, कोड बदलने की ज़रूरत नहीं, हालाँकि इसकी सीमाएँ पहले ही जान लेना ठीक रहता है।

इंटरफ़ेस का पाठ। ui_language ब्लॉक इंटरफ़ेस के ढाँचे के लिए एक स्ट्रिंग तालिका है। दस्तावेज़ की भाषा तय करें और एनोटेटर को दिखने वाले बटन और शीर्षक अनूदित करें:

yaml
ui_language:
  html_lang: ar
  html_dir: rtl            # right-to-left for Arabic, Hebrew, etc.
  submit_button: "إرسال"
  instructions_heading: "التعليمات"

html_dir: rtl रखने पर ब्राउज़र की अपनी द्विदिश व्यवस्था से पूरा दस्तावेज़ दाएँ-से-बाएँ चलने वाली लिपियों के लिए पलट जाता है। एक बात साफ़ रहनी चाहिए: ui_language मुख्य एनोटेशन और लॉगिन स्क्रीन तक ही जाता है, पर व्यवस्थापक की ओर के कई पन्ने (डैशबोर्ड, adjudication, प्रशिक्षण और लॉगआउट स्क्रीन) अब भी सिर्फ़ अंग्रेज़ी में हैं, तो अगर आपके एनोटेटर उन्हें देखेंगे तो यह ध्यान में रखें।

ग़ैर-लातीनी लिपियों के लिए फ़ॉन्ट। ब्राउज़र में CJK, अरबी या भारतीय लिपियों के लिए हमेशा कोई अच्छा डिफ़ॉल्ट फ़ॉन्ट नहीं होता। base_css से किसी प्रोजेक्ट स्टाइलशीट के ज़रिए फ़ॉन्ट लोड करें:

yaml
base_css: "css/noto_font.css"

ग़ैर-अंग्रेज़ी डेटा। Potato डेटा फ़ाइलें डिफ़ॉल्ट रूप से UTF-8 में पढ़ता है और टेक्स्ट फ़ील्ड में कोई भी Unicode दिखा देता है, तो ग़ैर-अंग्रेज़ी सामग्री जैसी है वैसी दिखती है। अगर कोई फ़ाइल किसी और encoding में है, तो उसे प्रति फ़ाइल (encoding:) या पूरे स्तर पर (data_directory_encoding:) बदल दें।

अनूदित लेबल। असली पेच यहीं है। Potato डिफ़ॉल्ट रूप से लेबल के नामों को “humanize” करता है, यानी उन्हें दोबारा गढ़कर शीर्षक-शैली में ढालता है, जिससे ग़ैर-लातीनी लिपियाँ बिगड़ सकती हैं। अपने डेटा के लिए मशीन-पठनीय अंग्रेज़ी name रखें और एनोटेटर को displayed_label से अनूदित लेबल दिखाएँ, humanizing बंद करके:

yaml
annotation_schemes:
  - name: sentiment
    annotation_type: radio
    description: "ما هو شعور هذا النص؟"
    humanize_labels: false
    labels:
      - name: positive
        displayed_label: "إيجابي"
      - name: negative
        displayed_label: "سلبي"
      - name: neutral
        displayed_label: "محايد"

सहेजा गया एनोटेशन फिर भी positive ही रहता है, तो आपका डेटा साफ़ बना रहता है और एनोटेटर पूरा काम अरबी में करता है।

निर्देश और सहमति। अपने surveyflow के सहमति और निर्देश पन्ने सीधे लक्ष्य भाषा में लिखें, वे आपकी ही लिखी HTML फ़ाइलें हैं और उनमें अंग्रेज़ी की कोई बाध्यता नहीं। एक ही कार्य कई भाषाओं में चलाना हो, तो Potato के साथ setup_multilingual_config.py सहायक आता है, जो एक टेम्पलेट से हर भाषा के लिए config बना देता है।

आगे पढ़ें