Traduzione automatica · Originale inglese
GLiNER: decisioni locali e e estrazione di entità
Anteprima dello sviluppo. I pesi sono pubblicati su Hugging Face; il modulo Swift è in recensione e non ancora in versione speech-swift.
Il modulo GLiNER esegue GLiNER2.5-Decide in MLX Swift. Dagli un testo e un elenco di etichette autorizzate per ottenere punteggi di classificazione, o chiedere per le campate di entità come una persona e un tempo.
Come funziona
Un encoder DeBERTa legge il testo e lo schema insieme. Teste di classificazione segnano le etichette. Teste d'ingresso identificano le campate della frase originale. Il runtime non genera un token di risposta 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"]
)
Pesi
Tre conversioni MLX della revisione a monte pinned 7ee5da4c sono pubblicati su Hugging Face. Il runtime scarica la variante scelta in primo utilizzo e riutilizza la cache locale in seguito; non è coinvolto Python .
| Variante | Repository | Pesi | Routing | Estrazione | Memoria di picco |
|---|---|---|---|---|---|
int8 (default) | 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 m | 12.6 ms | 2.55 GB |
Apple M5 Pro, idle machine: median full request tra cui tokenization e memoria di processo di picco. Tutte e tre le varianti restituiscono le stesse etichette, campate e offset del modello PyTorch a monte su 24 casi di riferimento, con fiducia entro 0.006.
Linea di comando
Il speech CLI espone entrambi i compiti come speech gliner classify e speech gliner extract. Passare le etichette come un elenco separato da virgola e ripetere --description label=text omettere il testo per leggerlo da stdin. --variant scelte int8 (default) fp16 o fp32e --model-dir carica un fascio locale invece di scaricare. Gli argomenti non validi vengono rifiutati prima che il modello carichi. --json, l'output include ogni probabilità di etichetta, o si estende con gli offset UTF-16, più tempi di carico e inferenza.
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
Il scheda modello per gli agenti è un file Markdown che elenca l'esatto API, i campi di uscita e i risultati verificati.
Accuratezza su un piccolo set di comando
Sedici esempi di routing scritti a mano corrispondono alle aspettative in 12 casi; otto esempi di estrazione corrispondono in 7 casi. La porta Swift riproduce il modello PyTorch a monte su 24 casi di riferimento: ID token identici, etichette e campate, con punteggi entro 0,001. Questi piccoli set controllano il comportamento e la fedeltà; non sono un benchmark di accuratezza larga.
Ambito e limitazioni
- La classificazione e l'entità di un singolo marchio abbraccia fino a 512 token codificati per richiesta.
- I punti di controllo Span/count_lstm con attenzione relativa condivisa, in FP32, FP16 o INT8. I modelli di relazione, i grafici e i vincoli comuni non fanno parte di questo primo API.
- Gli offset di ingresso utilizzano UTF-16, corrispondenti NSRange. Date e tempi richiedono una normalizzazione separata.
- I punteggi non garantiscono che una decisione sia corretta. Nessun strumento viene eseguito dal modulo.
- Dimensioni del download del modello, memoria di processo e impronta fisica unificata-memoria sono misure diverse.
Precisione e memoria
FP16 halves stoccaggio di peso a 973 MB. INT8 quantizza le matrici e i token di encoder 8 bit in gruppi di 64, con teste, normalizzazione e attivazioni in FP16# Per una # 567 Il file MB. Il runtime continua INT8 matrici imballate e decodifica solo le righe incorporanti che una richiesta utilizza.
Le proiezioni di posizione relativa dell'encoder dipendono solo dai pesi, quindi vengono calcolate una volta a carico invece di ogni richiesta. Il carico opzionale GLiNER.load(from:evaluateLayers:)