GLiNER: quyết định và trích xuất thực thể cục bộ
Bản xem trước đang phát triển. Trọng số đã được phát hành trên Hugging Face; mô-đun Swift đang được xem xét và chưa có trong bản phát hành speech-swift nào.
Mô-đun GLiNER chạy GLiNER2.5-Decide trên MLX Swift. Đưa vào văn bản và danh sách nhãn cho phép để nhận điểm phân loại, hoặc yêu cầu các đoạn thực thể như người và thời gian.
Cách hoạt động
Bộ mã hóa DeBERTa đọc văn bản và lược đồ cùng lúc. Các đầu phân loại chấm điểm nhãn của bạn. Các đầu thực thể xác định đoạn trong câu gốc. Runtime không sinh phản hồi JSON theo từng token.
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"]
)
Trọng số
Ba bản chuyển đổi MLX của phiên bản upstream cố định 7ee5da4c được phát hành trên Hugging Face. Runtime tải phiên bản đã chọn trong lần dùng đầu tiên rồi dùng lại bộ nhớ đệm cục bộ; không cần Python.
| Phiên bản | Kho | Trọng số | Định tuyến | Trích xuất | Bộ nhớ đỉnh |
|---|---|---|---|---|---|
int8 (mặc định) | 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, máy không chạy tác vụ khác: trung vị của một yêu cầu đầy đủ gồm cả tách token, và bộ nhớ đỉnh của tiến trình. Cả ba phiên bản trả về cùng nhãn, đoạn và offset như mô hình PyTorch gốc trên 24 trường hợp tham chiếu, với độ lệch độ tin cậy không quá 0,006.
Dòng lệnh
CLI speech cung cấp hai tác vụ qua speech gliner classify và speech gliner extract. Truyền nhãn dưới dạng danh sách phân tách bằng dấu phẩy và lặp lại --description label=text khi cần. Nếu bỏ trống văn bản, dữ liệu được đọc từ stdin. --variant chọn int8 (mặc định), fp16 hoặc fp32, còn --model-dir tải gói cục bộ thay vì tải xuống. Đối số không hợp lệ bị từ chối trước khi tải mô hình. Với --json, đầu ra gồm xác suất của từng nhãn, hoặc các đoạn với offset UTF-16, cùng thời gian tải và suy luận.
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
Thẻ mô hình cho agent là một tệp Markdown liệt kê chính xác API, các trường đầu ra và kết quả đã xác minh.
Độ chính xác trên một tập lệnh nhỏ
Trong mười sáu ví dụ định tuyến viết tay, 12 ví dụ khớp kỳ vọng; trong tám ví dụ trích xuất, 7 ví dụ khớp. Bản port Swift tái tạo mô hình PyTorch gốc trên 24 trường hợp tham chiếu: cùng ID token, nhãn và đoạn, điểm lệch trong phạm vi 0,001. Các tập nhỏ này kiểm tra hành vi và độ trung thực; chúng không phải benchmark độ chính xác diện rộng.
Phạm vi và giới hạn
- Phân loại một nhãn và đoạn thực thể; tối đa 512 token đã mã hóa mỗi yêu cầu.
- Checkpoint span/count_lstm với attention tương đối dùng chung, ở FP32, FP16 hoặc INT8. Mô hình boundary, đồ thị quan hệ và ràng buộc kết hợp không thuộc API đầu tiên này.
- Offset thực thể dùng UTF-16, giống NSRange. Ngày và giờ cần được chuẩn hóa riêng.
- Điểm số không bảo đảm quyết định là đúng. Mô-đun không thực thi công cụ nào.
- Dung lượng tải mô hình, bộ nhớ tiến trình và mức dùng vật lý của bộ nhớ hợp nhất là các phép đo khác nhau.
Độ chính xác số và bộ nhớ
FP16 giảm một nửa dung lượng trọng số, còn 973 MB. INT8 lượng tử hóa ma trận bộ mã hóa và embedding token xuống 8 bit theo nhóm 64, giữ các đầu, chuẩn hóa và activation ở FP16, cho tệp 567 MB. Runtime giữ ma trận INT8 ở dạng nén và chỉ giải mã những hàng embedding mà yêu cầu dùng đến.
Các phép chiếu vị trí tương đối của bộ mã hóa chỉ phụ thuộc vào trọng số, nên được tính một lần khi tải thay vì mỗi yêu cầu. Chế độ tùy chọn GLiNER.load(from:evaluateLayers:) tính từng lớp bộ mã hóa một để giảm mức cấp phát đỉnh.