सामग्री पर जाएं
घोषणाएँ10 मिनट में पढ़ें

Potato 2.14: अपने एनोटेशन पर मॉडल प्रशिक्षित करें

Potato 2.14 अध्ययन के लेबल पर 38 ट्रेनर से मॉडल प्रशिक्षित करता है, हर रन को होल्ड-आउट आइटम पर स्कोर करता है, और भविष्यवाणियाँ एनोटेटरों को प्री-लेबल के रूप में दिखाता है।

Potato Team

Potato 2.14 अध्ययन के अपने एनोटेशन पर मॉडल प्रशिक्षित करता है। एक रन 38 ट्रेनरों में से एक को उन लेबलों पर फ़िट करता है जो एनोटेटर दे चुके हैं, मॉडल को प्रशिक्षण से बाहर रखे गए आइटम पर स्कोर करता है, और मॉडल की भविष्यवाणियाँ आइटम में प्री-लेबल के रूप में वापस लिखता है, जिन्हें एनोटेटर स्वीकार या सही करते हैं। संस्करण 2.13.1 में एक ही ट्रेनर था, sklearn-text। इस रिलीज़ में RTTM डायराइज़ेशन फ़ाइलों का इम्पोर्ट, सुधारे गए वक्ता टर्न का एक्सपोर्ट, स्थानीय ट्रांसक्रिप्शन के लिए WhisperX, और कई बग सुधार भी हैं जिनसे सहमति के आँकड़े और एक्सपोर्ट बदलते थे, इसलिए इंस्टॉल करने से पहले अपग्रेड नोट पढ़ें।

bash
pip install --upgrade potato-annotation

अपग्रेड नोट

पहले हर config पर potato validate config.yaml --strict चलाएँ। नीचे के बदलाव काम कर रहे 2.13 अध्ययन का व्यवहार बदल सकते हैं:

  • assignment_strategy: llm_confidence अब कतार का क्रम तय करता है। रणनीति सबसे कम विश्वास वाला प्री-लेबल पहले देती है, फिर वे आइटम जिनका कोई प्री-लेबल नहीं है। पहले के रिलीज़ यह मान स्वीकार करते थे और आइटम यादृच्छिक रूप से सौंपते थे।
  • model_training की जाँच validation और स्टार्टअप पर होती है। writeback या auto_retrain के नीचे अज्ञात कुंजी, train, val या test के अलावा नाम का स्प्लिट, और ऐसी writeback.schemas प्रविष्टि जो स्कीम नहीं है, त्रुटियाँ हैं जो सर्वर को रोक देती हैं।
  • Training पेज होल्ड-आउट स्कोर रिपोर्ट करता है। स्कोर स्तंभ पहले प्रशिक्षण accuracy दिखाता था। 2.13 रन का स्कोर 2.14 के होल्ड-आउट स्कोर से तुलनीय नहीं है।
  • लिंक, शृंखलाएँ और घटनाएँ एक्सपोर्ट में दिखती हैं। span_link, coreference और event_annotation के उत्तर हर एक्सपोर्ट से गायब थे, और CSV और TSV अब <scheme>._links और <scheme>._events स्तंभ जोड़ते हैं।
  • Potato अब install_requires में ujson सूचीबद्ध नहीं करता। Potato के वातावरण से ujson इम्पोर्ट करने वाली आपकी अपनी स्क्रिप्ट को pip install ujson चाहिए।

मॉडल प्रशिक्षण

मॉडल प्रशिक्षण उस अध्ययन के लिए है जिसमें इतने आइटम हैं कि एनोटेटर सब पर लेबल नहीं लगाएँगे, और जहाँ पहले लेबलों पर प्रशिक्षित मॉडल बाकी का प्रस्ताव दे सकता है। चक्र के तीन चरण हैं। पहला, रन हर आइटम के लेबलों को एक उत्तर में समाधानित करता है और आइटम को train, val और test में बाँटता है। दूसरा, ट्रेनर train स्प्लिट पर मॉडल को अलग प्रोसेस में फ़िट करता है, और रन मॉडल को val और test आइटम पर स्कोर करता है। तीसरा, राइट-बैक मॉडल की भविष्यवाणियाँ एनोटेटरों को प्री-लेबल के रूप में दिखाता है, और एनोटेटरों के सहेजे उत्तर अगले रन के लिए लेबल बन जाते हैं।

sentiment स्कीम वाले अध्ययन के लिए चक्र चालू करने के लिए अध्ययन के config में यह ब्लॉक जोड़ें:

yaml
model_training:
  enabled: true
  writeback:
    schemas: [sentiment]
    include_unlabeled: true
    min_confidence: 0.6

जब तक writeback.schemas के नीचे कोई स्कीम नहीं दिया जाता, एनोटेटरों को रन से कुछ नहीं दिखता। include_unlabeled: true उन आइटम पर भविष्यवाणी करता है जिन पर किसी ने लेबल नहीं लगाया, और min_confidence 0.6 से कम की भविष्यवाणियाँ पेज से बाहर रखता है। सर्वर पुनः आरंभ करें, एडमिन कुंजी से /admin/training खोलें, ट्रेनर और स्कीम चुनें, और Train now पर क्लिक करें।

एक sklearn-text रन के बाद का Training पेज, जिसमें रन फ़ॉर्म, होल्ड-आउट स्कोर वाली Runs तालिका और ट्रेनर सूची दिखती है

Potato के examples/ai-assisted/model-training/ में उदाहरण प्रोजेक्ट के पास 160 उत्पाद समीक्षाएँ हैं और वह sklearn-text चलाता है, जिसे GPU या सामान्य इंस्टॉल के अलावा कुछ नहीं चाहिए। मॉडल प्रशिक्षण दस्तावेज़ीकरण वहाँ एक रन रिपोर्ट करता है, 120 लेबल की गई समीक्षाओं पर, जिसने वैलिडेशन समीक्षाओं पर 0.84 macro-F1 पाया और 80 प्री-लेबल लिखे। नया एनोटेटर तब उन समीक्षाओं में से हर एक को मॉडल के उत्तर के पहले से चुने होने के साथ देखता है:

एनोटेशन पेज पर एक समीक्षा, जिसमें मॉडल का उत्तर प्री-लेबल के रूप में चुना हुआ है

अपना पहला मॉडल प्रशिक्षित करें उदाहरण को चरण-दर-चरण चलाता है।

हर प्रकार के एनोटेशन के लिए ट्रेनर

Training पेज हर स्कीम को केवल वे ट्रेनर देता है जो स्कीम के अनुकूल हैं। ट्रेनर सूची सभी 38 ट्रेनरों को इंस्टॉल कमांड के साथ सूचीबद्ध करती है, और नीचे की सूची मुख्य समूहों के नाम बताती है:

  • टेक्स्ट। hf-text-classification, setfit और sklearn-text आइटम को वर्गीकृत करते हैं। hf-token-classification स्पैन टैग करता है, hf-relation स्पैनों को संबंधों, घटनाओं और कोरेफ़रेंस शृंखलाओं में जोड़ता है, और byt5-gloss इंटरलीनियर ग्लॉसिंग के लिए शब्दों को खंडित करके उनका ग्लॉस बनाता है।
  • चित्र। torchvision-detect और ultralytics-detect डिटेक्टर प्रशिक्षित करते हैं, और torchvision-segment, ultralytics-segment और cellpose सेगमेंटर। डिटेक्शन और सेगमेंटेशन रन पूरी स्लाइडों और बड़े चित्रों को टाइल करते हैं, और माइक्रोस्कोपी प्लेन और GeoTIFF नक्शों पर प्रशिक्षित होते हैं। volume-unet 3D वॉल्यूम को सेगमेंट करता है, layoutlmv3 पेज लेआउट को लेबल करता है, और vlm-sft कैप्शन, ग्राउंडिंग और GUI चरणों पर विज़न-लैंग्वेज मॉडल को फ़ाइन-ट्यून करता है।
  • ऑडियो और वीडियो। whisper-asr सुधारे गए ट्रांसक्रिप्ट टर्न पर Whisper को फ़ाइन-ट्यून करता है, diarization वक्ता टर्न पर वक्ता मॉडल प्रशिक्षित करता है, hf-audio-tagger ऑडियो खंड टैग करता है, और video-track फ़्रेमों के आर-पार वस्तुओं को ट्रैक करता है।
  • LLM और एजेंट। llm-sft मुक्त-टेक्स्ट उत्तरों पर फ़ाइन-ट्यून करता है, llm-dpo pairwise वरीयताओं पर, reward-model pairwise, ranking और best-worst उत्तरों पर, और prm-reward एजेंट ट्रेस के चरण दर्जों पर।
  • विज्ञान। rdkit-property अणुओं के बारे में उत्तर भविष्यवाणी करता है, peak-cnn स्पेक्ट्रा पर शिखर स्थितियाँ भविष्यवाणी करता है, signal-cnn समय-श्रृंखला सिग्नलों के अंतराल लेबल करता है, और episode-model रोबोट एपिसोड लेबल करता है।

ultralytics ट्रेनर AGPL-3.0 हैं, और LayoutLMv3 के वेट CC BY-NC-SA 4.0 हैं। दोनों में से किसी का रन पहले आपसे लाइसेंस स्वीकार करने को कहता है। pip install "potato-annotation[train]" वह सब इंस्टॉल करता है जो टेक्स्ट, चित्र, ऑडियो और LLM ट्रेनरों को चाहिए, और सूची अलग इंस्टॉल के नाम बताती है।

होल्ड-आउट स्कोर और प्री-लेबल

हर रन अपनी भविष्यवाणियों को val और test आइटम पर स्कीम के अनुकूल मीट्रिक से स्कोर करता है, जैसे लेबलों के लिए macro-F1, बॉक्स के लिए mAP50, ट्रांसक्रिप्ट के लिए शब्द त्रुटि दर, और वॉल्यूम के लिए Dice। जिस आइटम पर लेबल है पर भविष्यवाणी नहीं, वह गलत गिना जाता है, और कवरेज का आँकड़ा उन आइटम का अंश बताता है जिन्हें भविष्यवाणी मिली। train स्प्लिट के आइटम को कभी प्री-लेबल नहीं मिलता, और समीक्षक द्वारा सुधारा गया आइटम बाद के रनों के train स्प्लिट में हमेशा जाता है।

प्री-लेबल एनोटेटर का उत्तर तभी बनता है जब एनोटेटर उसे संपादित करे या आगे बढ़ जाए, और राइट-बैक किसी मानव लेबल को कभी नहीं बदलता। मॉडल समीक्षा कतार प्री-लेबल सबसे कम विश्वास वाले पहले देती है, और समीक्षा रिपोर्ट हर प्री-लेबल के पीछे के रन का नाम बताती है। लूप में मॉडल समीक्षा का कार्यप्रवाह समझाता है।

GPU सर्वर या क्लस्टर पर प्रशिक्षण

रन एक बैकएंड पर चलता है। local बैकएंड Potato सर्वर पर प्रशिक्षित होता है और CUDA, Apple का Metal या CPU चुनता है। ssh बैकएंड रन को उस GPU सर्वर पर शुरू करता है जिस तक Potato पहुँच सकता है, और प्रगति और मॉडल वापस स्ट्रीम करता है। slurm बैकएंड रन को लॉगिन नोड से sbatch द्वारा कंप्यूट नोड पर भेजता है, और उसे केवल sbatch, squeue और scancel चाहिए। agent बैकएंड उस मशीन के लिए है जिस तक Potato नहीं पहुँच सकता, जो potato training agent चलाती है और जॉब के लिए पोल करती है। ssh बैकएंड पर रन से पहले potato training check <backend> config.yaml रिमोट Python, रिमोट GPU और गायब प्रशिक्षण पैकेज रिपोर्ट करता है। GPU सर्वर, SLURM क्लस्टर या NAT के पीछे की मशीन पर प्रशिक्षण हर बैकएंड सेट करता है।

आगे क्या पूछना है, यह चुनना

hf-text-classification और hf-image-classification एक acquisition पैरामीटर लेते हैं जो हर भविष्यवाणी पर स्कोर लिखता है, margin, entropy, BALD या core-set दूरी से। assignment_strategy: llm_confidence तब सबसे ऊँचा स्कोर पहले देता है। auto_retrain डिफ़ॉल्ट रूप से हर 25 नए एनोटेशन के बाद नया रन शुरू करता है, और हर रन बिना लेबल वाले आइटम को दोबारा स्कोर करता है। सक्रिय अधिगम इस चक्र की तुलना Potato के active_learning ब्लॉक से करता है।

आपके पास पहले से मौजूद मॉडल

पाँच ट्रेनर कुछ फ़िट नहीं करते और कहीं और चल रहे मॉडल को स्कोर करते हैं: Label Studio ML बैकएंड के लिए label-studio-ml, OpenAI-संगत API के पीछे के विज़न-लैंग्वेज मॉडल के लिए openai-vlm-boxes, Hugging Face Inference Endpoint के लिए hf-inference, roboflow, और CVAT सर्वरलेस फ़ंक्शन के लिए cvat-nuclio। उन मॉडलों की भविष्यवाणियों को वही होल्ड-आउट स्कोर, राइट-बैक और समीक्षा मिलती है जो प्रशिक्षित मॉडल की भविष्यवाणियों को मिलती है। आपके पहले से चल रहे मॉडल से प्री-लेबल और होल्ड-आउट स्कोर हर ब्रिज समझाता है।

मॉडल प्रकाशित करना

रन का पेज मॉडल को Hugging Face Hub पर ऐसे मॉडल कार्ड के साथ पुश करता है जिसमें ट्रेनर, बेस मॉडल, स्कीम, स्प्लिट के आकार और होल्ड-आउट स्कोर के नाम होते हैं। आप रिपॉज़िटरी का नाम दो बार लिखते हैं, रिपॉज़िटरी डिफ़ॉल्ट रूप से निजी होती है, और टोकन सर्वर के एनवायरनमेंट वेरिएबल से आता है। भविष्यवाणियाँ और प्रशिक्षण डेटा सर्वर पर ही रहते हैं। वही पेज रन का स्प्लिट और स्प्लिट के मानव लेबल डेटासेट संस्करण के रूप में रखता है, ताकि बाद के मॉडलों की तुलना उन्हीं आइटम पर हो सके।

ट्रांसक्रिप्ट, इम्पोर्ट और एक्सपोर्ट

  • WhisperX। potato transcripts --transcribe WhisperX इंस्टॉल होने पर WhisperX उपयोग करता है, --asr-word-timestamps के तहत फ़ोर्स्ड अलाइनमेंट से शब्द समय के साथ, और अन्यथा faster-whisper पर लौट आता है। whisper-asr रन फ़ाइन-ट्यून किए मॉडल की CTranslate2 कॉपी लिखता है जिसे --asr-model लोड करता है।
  • RTTM इम्पोर्ट। potato import -f rttm डायराइज़ेशन फ़ाइल, या डायराइज़ेशन फ़ाइलों के फ़ोल्डर, को हर रिकॉर्डिंग के लिए एक आइटम में बदलता है, जिसमें सुधारने के लिए वक्ता टर्न होते हैं। --speaker-map वक्ताओं के नाम बदलता है।
  • segments एक्सपोर्ट। यह फ़ॉर्मेट हर ऑडियो या वीडियो खंड के लिए एक JSONL पंक्ति और हर एनोटेटर के लिए एक RTTM फ़ाइल लिखता है।
  • CoNLL-U निर्भरताएँ। HEAD और DEPREL एक्सपोर्ट किए गए स्पैनों पर निर्देशित span_link स्कीम से आते हैं। दोनों स्तंभ पहले हमेशा _ थे।

परिणामों को प्रभावित करने वाले सुधार

changelog हर सुधार सूचीबद्ध करता है। नीचे के सुधार उन संख्याओं को बदल सकते थे जो आपने रिपोर्ट कीं:

  • B,D=A,C के रूप में लिखा गया ranking टाई D=A नाम के एक आइटम के रूप में पढ़ा जाता था, इसलिए Kendall's tau और Spearman footrule दोनों टाई आइटम को छोड़ देते थे।
  • स्लाइडर, सॉफ़्ट-लेबल और pairwise-स्केल के प्री-लेबल पेज लोड होते ही एनोटेटर के उत्तर के रूप में सहेज लिए जाते थे, इसलिए किसी के उत्तर देने से पहले आइटम पूरा गिना जाता था। grounding_eval आइटम खोलने पर भी आइटम उसी तरह सहेजा जाता था।
  • /admin/iaa कोरेफ़रेंस, स्पैन लिंक और घटनाओं को बिना स्कोर के स्पैन के रूप में सूचीबद्ध करता था। रिपोर्ट अब तीनों प्रकारों को औसत pairwise F1 से स्कोर करती है।
  • कोडबुक में कोड को मर्ज या विभाजित करने पर कोई कोडिंग दोबारा इंगित नहीं होती थी, क्योंकि सहेजे गए एनोटेशन को कोड id से जोड़ने वाली कोई चीज़ नहीं थी।
  • स्नैपशॉट मैनिफ़ेस्ट null सहमति के आँकड़े जमा देते थे, और अब kappa और प्रतिशत सहमति दर्ज करते हैं।
  • मॉडल समीक्षा reject निर्णय को उस प्री-लेबल के विरुद्ध नहीं बल्कि चूक के रूप में गिनती थी जिसे निर्णय ने उतारा, और समीक्षा रिपोर्ट की precision गलत आती थी। writeback.field के pre_annotation.field से अलग होने पर होल्ड-आउट एनोटेटर-आइटम जोड़ा आइटम डेटा में राइट-बैक फ़ील्ड भी रखता था, और ऐसे जोड़े का आइटम डेटा अब दोनों फ़ील्ड छोड़ देता है।

2.14 इंस्टॉल करना

अपग्रेड करें, हर config validate करें, और जो ट्रेनर चाहिए वे इंस्टॉल करें:

bash
pip install --upgrade potato-annotation
potato validate config.yaml --strict
pip install "potato-annotation[train]"

मॉडल प्रशिक्षण शुरू करने की जगह है, और नया क्या है रिलीज़ की बाकी बातें सूचीबद्ध करता है।