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"]
)
الأوزان
نُشرت على Hugging Face ثلاث تحويلات MLX للمراجعة الأصلية المثبتة 7ee5da4c. ينزّل وقت التشغيل النسخة المختارة عند أول استخدام ثم يعيد استخدام الذاكرة المؤقتة المحلية، دون الحاجة إلى 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 دون أحمال أخرى: الوسيط لطلب كامل يشمل تقسيم الرموز، وذروة ذاكرة العملية. تُعيد النسخ الثلاث التسميات والمقاطع والإزاحات نفسها التي يُعيدها نموذج PyTorch الأصلي في 24 حالة مرجعية، بفارق ثقة لا يتجاوز 0.006.
سطر الأوامر
توفر واجهة speech المهمتين عبر 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 يوضح الواجهة البرمجية بدقة وحقول الإخراج والنتائج المُتحقَّق منها.
الدقة على مجموعة أوامر صغيرة
طابقت 12 من ستة عشر مثال توجيه مكتوبًا يدويًا ما هو متوقع، و7 من ثمانية أمثلة استخراج. يعيد منفذ Swift إنتاج نموذج PyTorch الأصلي في 24 حالة مرجعية: معرّفات الرموز والتسميات والمقاطع نفسها، بدرجات ضمن 0.001. هذه المجموعات الصغيرة تتحقق من السلوك ومطابقة النموذج الأصلي، وليست معيارًا واسعًا للدقة.
النطاق والقيود
- تصنيف بتسمية واحدة ومقاطع كيانات؛ حتى 512 رمزًا مُرمَّزًا لكل طلب.
- نقاط حفظ span/count_lstm مع انتباه نسبي مشترك، بصيغ FP32 أو FP16 أو INT8. نماذج boundary ورسوم العلاقات والقيود المشتركة ليست جزءًا من هذه الواجهة الأولى.
- تستخدم إزاحات الكيانات ترميز UTF-16 مثل NSRange. تحتاج التواريخ والأوقات إلى توحيد منفصل.
- الدرجات لا تضمن صحة القرار. لا تنفّذ الوحدة أي أداة.
- حجم تنزيل النموذج وذاكرة العملية والاستهلاك الفعلي للذاكرة الموحّدة قياسات مختلفة.
الدقة العددية والذاكرة
تخفض FP16 مساحة الأوزان إلى النصف، أي 973 ميغابايت. وتُكمّم INT8 مصفوفات المُرمِّز وتضمينات الرموز إلى 8 بت في مجموعات من 64، مع إبقاء الرؤوس والتطبيع والتنشيطات بدقة FP16، ليصبح حجم الملف 567 ميغابايت. يُبقي وقت التشغيل مصفوفات INT8 مضغوطة ولا يفك إلا صفوف التضمين التي يحتاجها الطلب.
تعتمد إسقاطات المواضع النسبية في المُرمِّز على الأوزان وحدها، لذا تُحسب مرة واحدة عند التحميل بدلًا من كل طلب. ويحسب الوضع الاختياري GLiNER.load(from:evaluateLayers:) طبقات المُرمِّز واحدة تلو الأخرى لخفض ذروة الحجز.