GLiNER: लोकल निर्णय और एंटिटी निष्कर्षण
डेवलपमेंट प्रीव्यू। वेट Hugging Face पर प्रकाशित हैं; Swift मॉड्यूल समीक्षा में है और अभी speech-swift के किसी रिलीज़ में शामिल नहीं है।
GLiNER मॉड्यूल GLiNER2.5-Decide को MLX Swift में चलाता है। टेक्स्ट और अनुमत लेबल की सूची दें तो वर्गीकरण स्कोर मिलते हैं, या व्यक्ति और समय जैसे एंटिटी स्पैन माँगें।
यह कैसे काम करता है
DeBERTa एनकोडर टेक्स्ट और स्कीमा को साथ पढ़ता है। वर्गीकरण हेड आपके लेबल को स्कोर करते हैं। एंटिटी हेड मूल वाक्य में स्पैन पहचानते हैं। रनटाइम JSON जवाब को टोकन-दर-टोकन जनरेट नहीं करता।
import GLiNER
let model = try await GLiNER.fromPretrained()
let choices = try model.classify(
"Remind me to call Dad at six PM.",
labels: ["create_reminder", "send_message", "other"]
)
let spans = try model.extractEntities(
"Remind me to call Dad at six PM.",
labels: ["person", "time"]
)
वेट
तय अपस्ट्रीम रिविज़न 7ee5da4c के तीन MLX रूपांतरण Hugging Face पर प्रकाशित हैं। रनटाइम पहली बार उपयोग पर चुना गया वेरिएंट डाउनलोड करता है और उसके बाद लोकल कैश दोबारा इस्तेमाल करता है; Python की ज़रूरत नहीं।
| वेरिएंट | रिपॉज़िटरी | वेट | रूटिंग | निष्कर्षण | अधिकतम मेमोरी |
|---|---|---|---|---|---|
int8 (डिफ़ॉल्ट) | aufklarer/GLiNER2.5-Decide-340M-MLX-8bit | 567 MB | 7.6 ms | 8.9 ms | 0.85 GB |
fp16 | aufklarer/GLiNER2.5-Decide-340M-MLX-fp16 | 973 MB | 8.8 ms | 10.0 ms | 1.58 GB |
fp32 | aufklarer/GLiNER2.5-Decide-340M-MLX | 1.95 GB | 11.1 ms | 12.6 ms | 2.55 GB |
Apple M5 Pro, बिना अन्य लोड के: टोकनाइज़ेशन सहित पूरे अनुरोध का माध्यिका समय, और प्रोसेस की अधिकतम मेमोरी। तीनों वेरिएंट 24 संदर्भ मामलों पर अपस्ट्रीम PyTorch मॉडल जैसे ही लेबल, स्पैन और ऑफ़सेट लौटाते हैं; कॉन्फ़िडेंस का अंतर 0.006 से कम है।
कमांड लाइन
speech CLI दोनों कार्य speech gliner classify और speech gliner extract के रूप में देता है। लेबल कॉमा से अलग करके दें और --description label=text ज़रूरत के अनुसार दोहराएँ। टेक्स्ट न देने पर stdin से पढ़ा जाता है। --variant से int8 (डिफ़ॉल्ट), fp16 या fp32 चुनें, और --model-dir डाउनलोड के बजाय लोकल बंडल लोड करता है। गलत आर्ग्युमेंट मॉडल लोड होने से पहले ही अस्वीकार हो जाते हैं। --json के साथ आउटपुट में हर लेबल की संभावना, या UTF-16 ऑफ़सेट वाले स्पैन, और लोड व इन्फ़रेंस समय होते हैं।
swift build -c release --product speech --disable-sandbox
scripts/build_mlx_metallib.sh release
.build/release/speech gliner classify "Remind me to call Dad at six PM." \
--labels create_reminder,send_message,set_timer,other
.build/release/speech gliner extract "Remind me to call Dad at six PM." \
--labels person,time --json
एजेंट्स के लिए मॉडल कार्ड एक Markdown फ़ाइल है, जिसमें सटीक API, आउटपुट फ़ील्ड और सत्यापित परिणाम दिए गए हैं।
छोटे कमांड सेट पर सटीकता
हाथ से लिखे सोलह रूटिंग उदाहरणों में से 12 और आठ निष्कर्षण उदाहरणों में से 7 अपेक्षा से मेल खाए। Swift पोर्ट 24 संदर्भ मामलों पर अपस्ट्रीम PyTorch मॉडल को दोहराता है: वही टोकन ID, लेबल और स्पैन, स्कोर 0.001 के भीतर। ये छोटे सेट व्यवहार और सटीक पुनरुत्पादन जाँचते हैं; ये व्यापक सटीकता बेंचमार्क नहीं हैं।
दायरा और सीमाएँ
- एकल-लेबल वर्गीकरण और एंटिटी स्पैन; प्रति अनुरोध अधिकतम 512 एनकोडेड टोकन।
- साझा रिलेटिव अटेंशन वाले span/count_lstm चेकपॉइंट, FP32, FP16 या INT8 में। Boundary मॉडल, संबंध ग्राफ़ और संयुक्त बाधाएँ इस शुरुआती API में शामिल नहीं हैं।
- एंटिटी ऑफ़सेट UTF-16 में हैं, NSRange की तरह। तारीख और समय को अलग से सामान्य करना होगा।
- स्कोर यह गारंटी नहीं देते कि निर्णय सही है। मॉड्यूल कोई टूल नहीं चलाता।
- मॉडल डाउनलोड आकार, प्रोसेस मेमोरी और यूनिफ़ाइड मेमोरी में भौतिक उपयोग अलग-अलग माप हैं।
प्रिसिज़न और मेमोरी
FP16 वेट स्टोरेज को आधा करके 973 MB कर देता है। INT8 एनकोडर मैट्रिक्स और टोकन एम्बेडिंग को 64 के समूहों में 8 बिट पर क्वांटाइज़ करता है, जबकि हेड, नॉर्मलाइज़ेशन और एक्टिवेशन FP16 में रहते हैं; फ़ाइल 567 MB की है। रनटाइम INT8 मैट्रिक्स को पैक्ड रखता है और केवल वही एम्बेडिंग पंक्तियाँ डिकोड करता है जिनकी अनुरोध को ज़रूरत है।
एनकोडर के रिलेटिव-पोज़िशन प्रोजेक्शन केवल वेट पर निर्भर करते हैं, इसलिए उन्हें हर अनुरोध पर नहीं, लोड के समय एक बार गणना किया जाता है। वैकल्पिक GLiNER.load(from:evaluateLayers:) मोड अधिकतम मेमोरी आवंटन घटाने के लिए एनकोडर लेयर एक-एक करके गणना करता है।