Командам, которые занимаются извлечением информации, приходится выбирать между дешёвыми, но негибкими кодировщиками и гибкими, но дорогими большими языковыми моделями. Fastino выпустила GLiNER2.5, чтобы сократить этот разрыв: вместо перечисления спанов модель предсказывает границы сущностей.
Это одно изменение убирает ограничение на максимальную ширину сущности, позволяет работать с контекстом до 4096 слов и сохраняет линейную вычислительную сложность. Кроме того, новая архитектура открывает путь к совместному декодированию сущностей и связей, ограничениям на метки и атрибутам спанов.
Что изменилось в архитектуре
Ранние модели GLiNER находили сущности перечислением кандидатов-спанов: каждая стартовая позиция сочеталась с каждой допустимой шириной, и каждый вариант оценивался относительно схемы. Это привязывало вычисления к оси ширины и жёстко ограничивало длину сущности.
GLiNER2.5 убирает перечисление. Общий кодировщик по-прежнему обрабатывает текст и запросы схемы за один проход, но вместо оценки спанов предсказывает оценки начала и конца на границах токенов и внутренние оценки по токенам. Разреженный этап предложений отбирает самые перспективные начала и концы для каждого запроса и соединяет их без ограничения на расстояние. Затем этап переранжирования оценивает каждый кандидат по граничным признакам и содержимому спана. Кандидаты для связей берутся из того же пула, а не из отдельного пути.
По данным команды Fastino, вычисления остаются линейными относительно длины последовательности при фиксированной схеме и бюджете кандидатов.
Пять новых возможностей
Извлечение из длинных контекстов. Отказ от явных представлений спанов сократил потребление памяти настолько, что стало возможным обучение на последовательностях до 4096 слов. Модели поставляются с параметром max_len=4096, а библиотека получила нативные хелперы для чанкинга: extract_entities_long, extract_long, Classifier.classify_long, JointIE.extract_long. Они пересчитывают спаны в смещения символов в исходном документе.
Без ограничения длины спана. GLiNER2 перечислял спаны до фиксированной ширины, обычно около двенадцати слов; более длинные сущности не оценивались вовсе. В GLiNER2.5 спан может открываться на первом токене и закрываться на последнем. Оговорка об indemnification на сорок слов стоит столько же, сколько имя из двух слов.
Совместное извлечение сущностей и связей. Пользователь объявляет типы сущностей, типизированные связи и структурные правила (unique_head=True, no_self_loops()), а поиск по лучу собирает глобально согласованный граф. Недопустимые комбинации не допускаются, поэтому вывод корректен по построению. Перед использованием графа стоит проверить result.feasible.
Классификация с ограничениями. Правила C.implies и C.excludes связывают метки между задачами во время декодирования. Собственная модель Fastino GLiGuard иллюстрирует решаемую проблему: без ограничений промпт может быть помечен как безопасный и одновременно как содержащий промпт-инъекцию. Если допустимого назначения не существует, классификатор возвращает ошибку.
Атрибуты спанов. Группы атрибутов, например тональность, привязываются к конкретным типам сущностей через applies_to и декодируются поспанно в том же прямом проходе. Сущности возвращаются квалифицированными, а не плоскими.
Модели и бенчмарки
| Модель | Параметры | Кодировщик | Язык |
|---|---|---|---|
| gliner2.5-small-v1 | 74M | DeBERTa-v3-xsmall | Английский |
| gliner2.5-base-v1 | 194M | DeBERTa-v3-base | Английский |
| gliner2.5-multi-v1 | 287M | mDeBERTa-v3-base | Многоязычный |
Все три модели используют один публичный API. Загружаются через AutoExtractor, а не через устаревший загрузчик спанов GLiNER2. Модели опубликованы на Hugging Face под лицензией Apache 2.0.
Команда Fastino оценивает zero-shot на 16 публичных датасетах, сообщая макро F1 в сравнении с GLiNER2 тех же размеров:
- Многоязычная модель: 56.17 против 56.09 у GLiNER2 Multi;
- Base: 54.87 против 53.34;
- Главный прирост — XNLI: многоязычная модель поднялась с 37.55 до 62.30, то есть на 24.75 пункта;
- Few-NERD: Base улучшился с 47.22 до 55.14;
- Румынский RONEC, язык, которого не было в обучении, показывает улучшение у обеих моделей.
Развёртывание
Fastino выпустила три чекпоинта GLiNER2.5 на Hugging Face под Apache 2.0. Локальный инференс доступен на CPU, CUDA или MPS через pip install "gliner2[local]" (Python 3.10+). Ни один провайдер инференса пока не хостит эти модели, так что самостоятельный хостинг — единственный путь развёртывания.
Модели 74M и 194M работают на обычных CPU-серверах, поэтому команда из двух человек может запустить извлечение без GPU-бюджета. Крупным организациям это даёт дообучаемую и приватно размещённую альтернативу LLM-извлечению с оплатой за токен. Для сравнения: Muse Glimmer от Meta с открытыми весами требует 24 ГБ VRAM, а здесь достаточно процессора.
Типичные применения: обнаружение и редактирование PII, извлечение пунктов контрактов, графы знаний для памяти агентов, маршрутизация агентов и моделей, классификация guardrail, извлечение клинических сущностей с атрибутами отрицания и дозировки. Для агентных сценариев с большим контекстом стоит присмотреться и к Pokee-Isaac 28B — там контекст достигает 10M токенов.
Частые вопросы
Что такое span enumeration?
Это подход, при котором модель оценивает все возможные фрагменты текста заданной ширины, начиная с каждой позиции. Вычислительная стоимость растёт с максимальной шириной, а длинные сущности вообще не рассматриваются.
Чем предсказание границ лучше?
Модель предсказывает, где сущность начинается и заканчивается, а не оценивает каждый кандидат. Это убирает ограничение на длину и снижает вычислительную сложность.
На каком железе можно запустить GLiNER2.5?
Модели 74M и 194M работают на CPU. Для многоязычной модели 287M CPU тоже подходит, но CUDA или MPS ускорят инференс.
Что нужно для установки?
Python 3.10 или новее и команда pip install "gliner2[local]". Никаких внешних API-ключей не требуется.
Можно ли дообучить модели под свою предметную область?
Да, модели опубликованы под лицензией Apache 2.0, что допускает коммерческое использование и дообучение.
Чем отличаются чекпоинты?
Small и Base работают только с английским, Multi поддерживает несколько языков. Multi также показывает значительно лучшие результаты на задачах логического вывода из текста.
Что делать, если сущность пересекает границу чанка?
Библиотека использует чанкинг: спан сохраняется только тогда, когда обе его границы попадают в один чанк. Для длинных сущностей используйте хелперы extract_long или JointIE.extract_long.
Это замена большим языковым моделям для извлечения?
Для задач, где важны стоимость и скорость, — да. LLM остаются уместны там, где нужна сложная семантика, выходящая за рамки схемы GLiNER2.5.
Где посмотреть примеры использования?
В техническом блоге Fastino, репозитории GitHub и документации по архитектуре границ.
Есть ли ограничения на связи между сущностями?
Можно задавать типизированные связи и структурные правила вроде unique_head=True и no_self_loops(). Поиск по лучу гарантирует глобальную согласованность графа.
Источник: marktechpost.com