GLiNER2.5: предсказание границ вместо перебора спанов в извлечении информации

Командам, которые занимаются извлечением информации, приходится выбирать между дешёвыми, но негибкими кодировщиками и гибкими, но дорогими большими языковыми моделями. 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