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-8bit567 MB7.6 ms8.9 ms0.85 GB
fp16aufklarer/GLiNER2.5-Decide-340M-MLX-fp16973 MB8.8 ms10.0 ms1.58 GB
fp32aufklarer/GLiNER2.5-Decide-340M-MLX1.95 GB11.1 ms12.6 ms2.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. هذه المجموعات الصغيرة تتحقق من السلوك ومطابقة النموذج الأصلي، وليست معيارًا واسعًا للدقة.

النطاق والقيود

الدقة العددية والذاكرة

تخفض FP16 مساحة الأوزان إلى النصف، أي 973 ميغابايت. وتُكمّم INT8 مصفوفات المُرمِّز وتضمينات الرموز إلى 8 بت في مجموعات من 64، مع إبقاء الرؤوس والتطبيع والتنشيطات بدقة FP16، ليصبح حجم الملف 567 ميغابايت. يُبقي وقت التشغيل مصفوفات INT8 مضغوطة ولا يفك إلا صفوف التضمين التي يحتاجها الطلب.

تعتمد إسقاطات المواضع النسبية في المُرمِّز على الأوزان وحدها، لذا تُحسب مرة واحدة عند التحميل بدلًا من كل طلب. ويحسب الوضع الاختياري GLiNER.load(from:evaluateLayers:) طبقات المُرمِّز واحدة تلو الأخرى لخفض ذروة الحجز.

المصادر والإسناد