GLiNER: yerel kararlar ve varlık çıkarma

Geliştirme önizlemesi. Ağırlıklar Hugging Face üzerinde yayımlandı; Swift modülü incelemede ve henüz bir speech-swift sürümüne dahil değil.

GLiNER modülü GLiNER2.5-Decide modelini MLX Swift ile çalıştırır. Bir metin ve izin verilen etiketlerin listesini verin, sınıflandırma puanlarını alın; ya da kişi ve saat gibi varlık aralıklarını isteyin.

Nasıl çalışır

Bir DeBERTa kodlayıcı metni ve şemayı birlikte okur. Sınıflandırma kafaları etiketlerinizi puanlar. Varlık kafaları özgün cümledeki aralıkları belirler. Çalışma zamanı JSON yanıtını token token üretmez.

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"]
)

Ağırlıklar

Sabitlenmiş upstream revizyonu 7ee5da4c için üç MLX dönüşümü Hugging Face üzerinde yayımlandı. Çalışma zamanı seçilen sürümü ilk kullanımda indirir, sonra yerel önbelleği kullanır; Python gerekmez.

SürümDepoAğırlıklarYönlendirmeÇıkarmaEn yüksek bellek
int8 (varsayılan)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, başka yük olmadan: tokenizasyon dahil tam isteğin medyanı ve sürecin en yüksek bellek kullanımı. Üç sürüm de 24 referans vakada upstream PyTorch modeliyle aynı etiketleri, aralıkları ve ofsetleri döndürür; güven farkı 0,006 içindedir.

Komut satırı

speech CLI iki görevi speech gliner classify ve speech gliner extract olarak sunar. Etiketleri virgülle ayırarak verin, --description label=text gerektiği kadar tekrarlanabilir. Metin verilmezse stdin okunur. --variant ile int8 (varsayılan), fp16 veya fp32 seçilir; --model-dir indirmek yerine yerel bir paketi yükler. Geçersiz argümanlar model yüklenmeden reddedilir. --json ile çıktı her etiketin olasılığını ya da UTF-16 ofsetli aralıkları, ayrıca yükleme ve çıkarım sürelerini içerir.

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

Ajanlar için model kartı, tam API’yi, çıktı alanlarını ve doğrulanmış sonuçları listeleyen bir Markdown dosyasıdır.

Küçük bir komut kümesinde doğruluk

Elle yazılmış on altı yönlendirme örneğinin 12’si, sekiz çıkarma örneğinin 7’si beklentiyle eşleşti. Swift sürümü, upstream PyTorch modelini 24 referans vakada yeniden üretir: aynı token kimlikleri, etiketler ve aralıklar; puan farkı 0,001 içinde. Bu küçük kümeler davranışı ve modele sadakati denetler; geniş kapsamlı bir doğruluk ölçütü değildir.

Kapsam ve sınırlamalar

Hassasiyet ve bellek

FP16 ağırlık depolamasını yarıya, 973 MB’a indirir. INT8, kodlayıcı matrislerini ve token gömmelerini 64’lük gruplar halinde 8 bite kuantize eder; kafalar, normalleştirme ve aktivasyonlar FP16 kalır ve dosya 567 MB olur. Çalışma zamanı INT8 matrislerini paketli tutar ve yalnızca isteğin kullandığı gömme satırlarını çözer.

Kodlayıcının göreli konum projeksiyonları yalnızca ağırlıklara bağlıdır; bu yüzden her istekte değil, yüklemede bir kez hesaplanır. İsteğe bağlı GLiNER.load(from:evaluateLayers:) modu, en yüksek bellek ayırmayı azaltmak için kodlayıcı katmanlarını tek tek hesaplar.

Kaynaklar ve atıf