Гайд по NER на 2026 год: GLiNER, spaCy, Transformers и LLMs
Автоматический перевод Эта статья была автоматически переведена с оригинальной английской версии.
Распознавание именованных сущностей (NER) теперь включает компактные энкодеры, модели с открытым словарём и извлечение на основе LLM. В упомянутой оценке CrossNER модель GLiNER с 300M параметров превосходит заявленный zero-shot F1 модели UniNER-13B. Более новая bi-encoder-модель показывает до 130 раз больший throughput, чем сопоставимый gliner_small-v2.5 uni-encoder при 1 024 типах сущностей, если метки предварительно закодированы. Авторы измеряли это на одной H100 при batch size 1 для входов длиной 64, 256 и 512 токенов. Эти результаты мотивируют эксперименты, но не задают универсальный production-рейтинг.
Сопутствующий репозиторий содержит запускаемые примеры для GLiNER, экспорта в ONNX, генерации обучающих меток с помощью LLM и структурированного извлечения. Для нагрузок, где преобладают явные спаны, компактные энкодеры обычно быстрее и дешевле. LLM по-прежнему полезны для генерации обучающих данных и обработки случаев, требующих инференса или нормализации.
Этот гайд предназначен для инженеров, которые выбирают и оценивают архитектуры NER для RAG, агентных, документных или privacy-пайплайнов. В результате у вас будет путь выбора модели, ограниченный план оценки и трёхуровневая архитектура, объединяющая энкодеры с извлечением через LLM.
Сопутствующий репозиторий: ner-field-guide с запускаемыми демо для GLiNER, экспорта в ONNX, пайплайна LLM-as-teacher и структурированного извлечения с Instructor.
Коротко: Начинайте с GLiNER, если вам нужно извлечение спанов с открытым словарём и деплой на CPU. Если большой переиспользуемый набор типов делает повторное совместное кодирование меток дорогим, первым для сравнения берите GLiNER bi-encoder. Для доменных задач протестируйте пайплайн LLM-as-teacher: сгенерируйте метки, проверьте выборку, дообучите энкодер и оцените его на размеченном людьми датасете. Неявные сущности, маппинг на онтологию и другие случаи, требующие интенсивного ризонинга, направляйте в LLM с нативным schema API, Instructor или локальным constrained decoder. Трёхуровневая архитектура объединяет эти пути без предположения о фиксированном распределении трафика.
Краткое сравнение моделей см. в статье Лучшие модели NER в 2026 году.
Что такое распознавание именованных сущностей?
Распознавание именованных сущностей находит спаны в тексте и назначает им типы: человек, организация, дата, продукт или доменные метки. NER идентифицирует упоминание. Entity linking — отдельный этап, который связывает упоминание с канонической записью или концептом онтологии.
| Нагрузка | Первая модель для тестирования | Когда переходить на следующий вариант |
|---|---|---|
| Стабильные метки и много обучающих данных | spaCy или файн-тюненный энкодер | Набор меток меняется или recall перестаёт расти для редких типов. |
| Меняющиеся метки; небольшой набор типов | GLiNER cross-encoder | Набор типов растёт или метки переиспользуются для множества документов. |
| Большой переиспользуемый набор типов | GLiNER bi-encoder | На доменном наборе появляется регрессия качества или калибровки. |
| Несколько задач извлечения в одном пайплайне текста | GLiNER2 | Качество совместной задачи не достигает целевого уровня отдельных задач. |
| Неявные факты или ризонинг по схеме | Структурированное извлечение через LLM | Латентность, стоимость или неподтверждённые утверждения выходят за бюджет продукта. |
Где современные системы используют NER
NER по-прежнему находит спаны текста и назначает им метки. Изменилось его место в системе. Теперь NER предоставляет фильтры для RAG, структурированные аргументы для инструментов агентов и поля для пайплайнов обработки документов. Поэтому латентность, стоимость и гибкость схемы так же важны, как и точность на бенчмарках.
RAG: улучшение retrieval с помощью извлечения сущностей
Один только similarity search плохо справляется с вопросами, содержащими точные сущности. Для запроса «что Anthropic говорил о безопасности моделей в Q4 2024?» система должна извлечь «Anthropic» и «Q4 2024» как фильтры метаданных, а не полагаться только на эмбеддинги.
При индексации извлекайте сущности из каждого чанка и сохраняйте их как метаданные: {"organizations": ["Anthropic"], "dates": ["Q4 2024"], ...}. Это позволяет отфильтровать документы по сущности до запуска vector search. Knowledge graph RAG (GraphRAG, property graph в LlamaIndex) идёт дальше: NER вместе с извлечением отношений строит граф, который может отвечать на multi-hop-вопросы, недоступные плоским эмбеддингам.
Во время запроса извлечённые из вопроса пользователя сущности управляют роутингом. Вопрос с названием компании направляется в финансовый индекс, а вопрос с названиями препаратов — в клиническую базу знаний. GLiNER полезен, когда schema или типы сущностей меняются во время запроса. Незнакомые названия компаний или препаратов сами по себе не требуют меток с открытым словарём: closed-label-модель всё равно может распознавать новые упоминания известных типов.
AI agents: превращение текста в структурированные факты
Агенты получают неструктурированный текст: веб-страницы, ответы API и сообщения пользователей. NER превращает этот текст в структурированные факты, над которыми агент может выполнять ризонинг, сохранять их или передавать инструментам.
Для роутинга инструментов запрос «запланируй встречу с Sarah Chen из Accenture в четверг в 14:00» требует извлечь PERSON: Sarah Chen, ORGANIZATION: Accenture и DATETIME: Thursday 2pm до вызова агентом calendar API. Локальный энкодер устраняет round trip к API и обычно существенно быстрее, но латентность зависит от модели, рантайма, железа, batch size и числа меток. Измеряйте оба варианта на нагрузке календаря, а не исходите из фиксированной разницы в миллисекундах.
NER также поддерживает отслеживание сущностей в диалогах. Системам памяти агента нужно понимать, что «Sarah» в третьем ходе и «Ms. Chen» в двенадцатом — один и тот же человек. NER идентифицирует спаны, а entity linking связывает их с одним ID.
Ограничение в обоих случаях — латентность. Если каждый из десяти последовательных шагов делает вызов NER длительностью 200 мс, эти вызовы добавляют 2 секунды воспринимаемой задержки. Один вызов добавляет 200 мс. Энкодерные модели обычно лучше вписываются в агентные циклы для работы с сущностями, чем извлечение на основе LLM.
Document intelligence: от изображений к структурированным данным
OCR превращает изображения в текст. NER превращает этот текст в структурированные поля.
Стандартный пайплайн сначала использует OCR — например, Tesseract, Azure Document Intelligence или AWS Textract — чтобы получить текст и bounding boxes. Затем NER извлекает такие поля, как invoice_number, vendor_name, line_items, total и due_date. Та же последовательность применяется к контрактам, медицинским картам и нормативным документам.
Современные документные пайплайны могут объединять понимание layout, извлечение сущностей и извлечение отношений. OCR или layout-aware document model по-прежнему предоставляет текст, порядок чтения, таблицы и bounding boxes. Затем GLiNER 2 может одним schema-driven проходом объединить извлечение сущностей, отношений, классификацию и иерархическое структурированное извлечение.
Большинство таких пайплайнов определяется стоимостью. Рассчитайте её для фактического месячного объёма документов, включая ретраи и ручную проверку. Компактный энкодер может работать на CPU, тогда как API-based LLM добавляет стоимость и латентность инференса для каждого документа. Практический тест: разметить LLM репрезентативный набор счетов. Дообучить GLiNER на проверенных записях, затем сравнить оба пути по F1 на уровне полей, латентности и полной стоимости.
Обнаружение PII и гардрейлы для LLM
Принципы защиты данных и обязанности по безопасности GDPR (статьи 5, 25 и 32), технологически нейтральное Security Rule в HIPAA (рекомендации HHS) и калифорнийский CCPA с поправками CPRA устанавливают разные права и основанные на риске меры защиты. Указанные положения не предписывают использовать NER или конкретную архитектуру сканирования до модели. Это не юридическая консультация; попросите юристов проверить требования, применимые к вашим данным и юрисдикции. NER может поддерживать инвентаризацию данных, минимизацию или деидентификацию, но это лишь один из контролей, и его recall нужно валидировать для соответствующих данных и юрисдикции.
NER обрабатывает эту задачу напрямую. Модели деидентификации находят спаны PERSON, SSN, PHONE, EMAIL и ADDRESS и либо редактируют их, либо заменяют синтетическими эквивалентами. Microsoft Presidio объединяет recognizer-ы с операторами анонимизации, а его примеры включают GLiNER в качестве recognizer-а. Ещё один кандидат — GLiNER2-PII с 0,3B параметров: в статье рассматриваются 42 типа PII с разрешением на уровне символьных спанов. Ни один из этих вариантов не является доказательством compliance. Перед использованием любого детектора как контроля проверьте recall по формату данных, юрисдикции, языку и классу PII.
В сравнении, проведённом поставщиком John Snow Labs на 48 размеченных экспертами open-source-документах, охватывающих шесть классов PHI, token-level evaluation показала 96% F1. Для Azure было заявлено 91%, для AWS — 83%, для GPT-4o — 79%. Исследование сопоставляло метки провайдеров с ground-truth-схемой и исключало предсказания, которые нельзя было сопоставить. Рассматривайте его как узкое сравнение провайдеров, а не доказательство compliance. В отдельном отчёте о деплое описывается, как Providence обрабатывает более 100 000 клинических заметок в день.
Для гардрейлов LLM NER работает как слой предварительного скрининга: перед отправкой во внешний API просканировать пользовательский ввод на PII, а затем заблокировать или анонимизировать его. Это может быть быстрее или проще, чем просить LLM самостоятельно модерировать ввод. Считайте это гипотезой для деплоя: измерьте оба пути на своей модели, железе, наборе входов и целевом recall. Ложные отрицания всё ещё возможны, поэтому добавьте дополнительный контроль для того уровня раскрытия PII, который система не может принять. GLiNER особенно полезен здесь, поскольку категории PII зависят от юрисдикции. При появлении нового регулирования можно добавить тип сущности вроде «генетическая информация» без переобучения.
GLiNER: сопоставление спанов с метками для NER с открытым словарём
GLiNER (NAACL 2024, Zaratiana et al.) сделал NER на основе энкодеров конкурентоспособным с LLM при существенно меньшей стоимости. Вместо того чтобы рассматривать NER как sequence labeling или генерацию текста, GLiNER формулирует его как задачу сопоставления. Модель оценивает каждый кандидатный спан текста — каждую непрерывную последовательность слов вроде «Bill Gates» или «Microsoft» — относительно каждого типа сущности, а затем оставляет пары с высоким score.
На вход модель получает метки типов сущностей и текст как одну последовательность: [ENT] person [ENT] organization [ENT] date [SEP] Bill Gates founded Microsoft.... Двунаправленный трансформер (DeBERTa-v3) кодирует их совместно.
Из выхода модель строит два набора представлений. Один представляет типы сущностей на позициях токенов [ENT]. Второй представляет текстовые спаны, объединяя векторы начального и конечного токенов через небольшую FFN. Dot product между представлением спана и представлением типа сущности даёт score.
Применив sigmoid, мы получаем вероятность того, что спан от токена до токена относится к типу сущности : . Здесь — вектор спана, полученный FFN, а — embedding типа сущности из соответствующего токена [ENT] (Zaratiana et al., 2024, уравнения 1–2). Длина спанов ограничена 12 токенами, чтобы сохранить высокую скорость.
GLiNER принимает описания меток на естественном языке во время инференса без переобучения, однако качество извлечения зависит от формулировки меток и соответствия домену. Вы передаёте типы сущностей вроде «person», «adverse drug reaction» или «financial instrument», а модель оценивает спаны относительно них. Конфигурации 50M, 90M и 300M ниже — это модели из оригинальной статьи. В текущей карточке модели v2.1 перечислены английские чекпоинты на 166M, 209M и 459M параметров, а также мультиязычный чекпоинт на 209M, все под Apache 2.0. Не сравнивайте латентность или память между этими поколениями так, будто названия параметров идентичны (карточка модели GLiNER v2.1).
Для настоящего hard zero-shot-теста нужно исключать как целевые типы, так и целевые примеры. Описание типа вроде «медицински подтверждённый нежелательный эффект, вызванный лечением» даёт модели больше информации, чем одно лишь adverse event. Это не гарантирует переносимость, но description-driven ZeroNER превзошёл baseline-ы только с названиями на бенчмарках с отложенными типами (Cocchieri et al., 2025).
Обучающие данные оригинальной модели происходили из датасета Pile-NER: 44 889 фрагментов с 240K спанов сущностей и 13K типов сущностей, размеченных ChatGPT. Обучение GLiNER-L заняло около 5 часов на одной A100 (Zaratiana et al., 2024).
Результаты бенчмарков
Zero-shot-результаты из Zaratiana et al. (2024), таблицы 1 и 2:
| Модель | Параметры | CrossNER F1 | Среднее (20 датасетов) |
|---|---|---|---|
| GLiNER-L | 300M | 60,9% | 47,8% |
| GoLLIE | 7B | 58,0% | — |
| UniNER-13B | 13B | 55,6% | — |
| GLiNER-M | 90M | 55,4% | — |
| UniNER-7B | 7B | 53,7% | 45,7% |
| GLiNER-S | 50M | 52,7% | — |
| ChatGPT (GPT-3.5) | — | 47,5% | 36,5% |
GLiNER-M с 90M параметров почти соответствует UniNER-13B в таблице CrossNER из статьи (55,4% против 55,6% F1), используя примерно в 140 раз меньше параметров. GLiNER-S с 50M параметров превосходит заявленный результат ChatGPT (GPT-3.5) на 5 пунктов F1. Мультиязычная версия, обученная только на английских данных, превосходит тот же baseline ChatGPT в 8 из 10 неанглоязычных языков (Zaratiana et al., 2024). Эти сравнения используют версии моделей и evaluation harness из статьи; они не устанавливают рейтинг относительно более новых LLM.
Варианты GLiNER охватывают биомедицинские тексты, обнаружение PII, новости и мультиязычные сценарии.
Из scripts/01_gliner_quickstart.py:
from gliner import GLiNER
model = GLiNER.from_pretrained("urchade/gliner_medium-v2.1")
text = "Bill Gates founded Microsoft on April 4, 1975."
labels = ["person", "organization", "date"]
entities = model.predict_entities(text, labels, threshold=0.5)
for entity in entities:
print(f" {entity['text']} => {entity['label']}")
# Bill Gates => person
# Microsoft => organization
# April 4, 1975 => date
Как GLiNER сравнивается со spaCy
spaCy — одна из наиболее распространённых NLP-библиотек в production. При этом она работает в других архитектурных условиях, чем GLiNER.
Пайплайны spaCy (en_core_web_sm, en_core_web_trf) выполняют NER с закрытым словарём: используют фиксированный набор типов сущностей (PERSON, ORG, GPE, DATE и т. д.), заданный во время обучения. Нужен новый тип сущности? Соберите размеченные данные и переобучите модель. Зафиксируйте поддерживаемый пакет модели 3.8, а не считайте невыпущенную мажорную ветку production-обновлением. В карточке модели en_core_web_trf 3.8.0 заявлен 90,19 NER F1 на OntoNotes 5.0, но только для 18 предопределённых типов (карточка модели spaCy).
GLiNER выполняет NER с открытым словарём: во время инференса подходит любая метка, переобучение не требуется. Поэтому это лучший выбор, когда типы сущностей заранее неизвестны, часто меняются или специфичны для домена («adverse drug reaction», «financial instrument», «threat indicator»).
Моя рекомендация: используйте spaCy для стандартных типов сущностей, если её предобученные пайплайны хорошо провалидированы. Используйте GLiNER, когда нужны гибкие zero-shot-типы или пайплайн должен адаптироваться без переобучения. Их можно объединить в одном пайплайне: spaCy будет отвечать за токенизацию и разделение на предложения, а GLiNER — за извлечение сущностей.
Supervised baseline на Transformer
Для стабильных меток и репрезентативных размеченных спанов начните с файн-тюненного token classifier, например RoBERTa или DeBERTa, в качестве supervised baseline. Он жертвует гибкостью меток ради task-specific-точности. Сравните его со spaCy и GLiNER по exact-span F1, recall каждой метки, калибровке, латентности и стоимости на одном и том же доменном наборе.
UniNER и NuNER: насколько компактной может быть модель?
UniNER (ICLR 2024, Zhou et al.) и NuNER (EMNLP 2024, Bogdanov et al.) дистиллируют аннотации LLM в более компактные NER-модели, но по-разному отвечают на вопрос, насколько маленькой может быть модель.
UniNER: максималистский путь
UniNER файн-тюнит LLaMA-7B/13B на 45 889 парах input-output, сгенерированных ChatGPT. Для каждого типа сущности модель отвечает на вопрос «Что описывает [type] в тексте?» и выдаёт JSON-списки. Важный приём обучения: frequency-based negative sampling повышает F1 с 31,5% до 53,4% (Zhou et al., 2024).
UniNER-7B достигает 41,7% zero-shot F1 на 43 датасетах, превосходя ChatGPT с его 34,9% на 7 пунктов. Версия 13B достигает 43,4% — всего на 1,7 пункта больше при почти двукратных вычислительных затратах (Zhou et al., 2024).
Компромисс для production: в статье более точная конфигурация типа UniNER опрашивает каждый тип сущности последовательно. Вариант all-in-one использует один ответ, но в среднем набрал на 3,3% меньше. При FP16 чекпоинту 7B требуется примерно 14 GB только для весов; низкобитная квантизация может уменьшить этот объём. У модели также ограничительная лицензия CC BY-NC 4.0.
NuNER: минималистский путь
NuNER стартует с RoBERTa-base (125M параметров) и использует contrastive training с 4,38 миллиона аннотаций GPT-3.5 по 200K концептам. После обучения encoder концептов удаляется; text encoder встраивается в любой стандартный NER-пайплайн вместо RoBERTa (Bogdanov et al., 2024).
NuNER превосходит обычную RoBERTa на 6–15 пунктов F1 при любом размере few-shot-выборки. Всего с дюжиной примеров на тип сущности NuNER достигает уровня UniNER-7B, будучи в 56 раз меньше (Bogdanov et al., 2024).
Обе статьи показывают, что аннотации LLM можно дистиллировать в компактные NER-модели. NuNER демонстрирует: энкодер на 125M параметров может соответствовать заявленному результату UniNER-7B при наличии task-specific данных для файн-тюнинга, с лицензией MIT и удобным инференсом на CPU.
GLiNER 2: одна модель, четыре задачи
В оригинальной экосистеме GLiNER NER, извлечение отношений, классификация и документное извлечение были разделены между разными моделями. Статья GLiNER2 на EMNLP 2025 объединила NER, классификацию и иерархическое извлечение в одной модели на 205M параметров; в более поздних текущих релизах к тому же schema-интерфейсу добавили извлечение отношений.
Архитектура сохраняет cross-encoder-дизайн, но расширяет контекст до 2 048 токенов (в 4 раза больше оригинала) и добавляет декларативные схемы для описания задач извлечения. Для обучения использовались 135 698 реальных документов, размеченных GPT-4o, и 118 636 синтетических примеров (Zaratiana et al., 2025).
На zero-shot CrossNER GLiNER 2 набирает 0,590 F1, почти достигая 0,599 у GPT-4o в бенчмарке статьи середины 2025 года. В классификации средний результат на 7 бенчмарках составляет 0,72 против 0,69 у DeBERTa-v3-large. Для CPU статья сообщает латентность классификации 130–208 мс при протестированных количествах меток. У baseline DeBERTa показатель растёт с 1 714 мс для 5 меток до 16 897 мс для 50 (Zaratiana et al., 2025).
from gliner2 import GLiNER2
extractor = GLiNER2.from_pretrained("fastino/gliner2-base-v1")
# Multi-task composition in ONE forward pass
schema = (extractor.create_schema()
.entities({"person": "Names of people", "company": "Organization names"})
.classification("sentiment", ["positive", "negative", "neutral"])
.relations(["works_for", "founded", "located_in"])
.structure("product_info")
.field("name", dtype="str")
.field("price", dtype="str"))
text = "Acme launched a $19 widget in Berlin."
results = extractor.extract(text, schema)
Текущие релизы GLiNER2 предоставляют распознавание сущностей, классификацию, иерархическое извлечение и извлечение отношений через одну схему. В статье EMNLP оцениваются NER и классификация; бенчмарк иерархического извлечения не приводится, а более поздний API отношений не рассматривается. Воспринимайте сценарий с четырьмя задачами как deployment-возможность, которую нужно измерять, а не как доказательство того, что одна модель сохраняет точность четырёх специализированных моделей.
Дополнения 2026 года: выбирайте архитектуру под боттлнек
В экосистеме GLiNER теперь представлены разные архитектуры. Это кандидаты для доменного сравнения, а не единый leaderboard.
| Потребность | Кандидат | Что проверить |
|---|---|---|
| Много переиспользуемых типов сущностей | GLiNER bi-encoder | Exact-span F1 и калибровку после кэширования embedding-ов типов. |
| Сущности и отношения за один проход | GLiNER-Relex | F1 и для спанов, и для отношений на одних и тех же документах. |
| Локальный кандидат для PII | GLiNER2-PII | Recall по языку, формату документов и типу PII. |
| Мультиязычный кандидат с открытым словарём | GLiNER-X | Качество по языкам; в карточке указаны 23 языка. |
| Генерируемые или меняющиеся типы | GLiNER Decoder | Стабильны ли сгенерированные типы и полезны ли они downstream. |
Оригинальная статья GLiNER, статья о bi-encoder и GLiNER-Relex используют собственные модели и harness-ы. В карточках моделей GLiNER-X и GLiNER Decoder описаны выпущенные чекпоинты, но это не peer-reviewed сопоставимый бенчмарк. Зафиксируйте это различие в architecture decision record.
Лицензии чекпоинтов — часть выбора модели
Перед деплоем проверьте точные условия для кода, весов и датасетов. Указанные текущие релизы не взаимозаменяемы:
| Релиз | Опубликованная лицензия | Практическое следствие |
|---|---|---|
| GLiNER v2.1 и GLiNER bi | Apache 2.0 | Либеральные условия в карточке модели; всё равно проверьте зависимости и данные. |
| GLiNER2 и GLiNER2-PII | Apache 2.0 | Проверьте выбранный чекпоинт, а не только библиотеку. |
| UniNER-7B-all | CC BY-NC 4.0 | Не используйте в коммерческом сценарии без отдельного разрешения. |
| NuNER | MIT | В условиях выпущенной модели и датасета указана лицензия MIT. |
Обозначения лицензий не являются юридической консультацией. Production-проверка должна включать условия для базовой модели, обучающих данных и провайдера.
Bi-encoder: масштабирование NER до миллионов меток
Оригинальный GLiNER кодирует метки и текст совместно. Совместное кодирование становится всё дороже по мере того, как текст меток занимает контекст и должен повторно кодироваться для каждого документа. Точка перехода зависит от чекпоинта, описаний меток и железа. Когда один большой набор типов переиспользуется для множества документов, GLiNER bi-encoder должен стать вариантом сравнения по умолчанию. Он разделяет кодирование текста и меток между двумя отдельными трансформерами (Stepanov et al., 2026).
В text encoder используется ModernBERT (семейство Ettin), а в label encoder — sentence transformers (BGE или MiniLM). Спаны и метки оцениваются через dot product. Благодаря такому разделению embedding-и типов сущностей можно вычислить заранее и закэшировать. Во время инференса кодировать нужно только текст, а сторона меток превращается в чтение из кэша.
Доступны четыре размера моделей, все протестированы на CrossNER (Stepanov et al., 2026, таблица 1):
| Модель | Параметры | CrossNER F1 | Throughput (H100) | С предварительно вычисленными метками |
|---|---|---|---|---|
| gliner-bi-edge-v2.0 | 60M | 54,0% | 13,64 экз./с | 24,62 экз./с |
| gliner-bi-small-v2.0 | 108M | 57,2% | 7,99 экз./с | 15,22 экз./с |
| gliner-bi-base-v2.0 | 194M | 60,3% | 5,91 экз./с | 9,51 экз./с |
| gliner-bi-large-v2.0 | 530M | 61,5% | 2,68 экз./с | 3,60 экз./с |
При 1 024 типах сущностей bi-encoder с предварительно вычисленными gliner-bi-edge-v2.0 теряет лишь 5,2% throughput по сравнению с одной меткой (19,3 → 18,3 экз./с). Сопоставимый gliner_small-v2.5 uni-encoder теряет 98,7% (10,7 → 0,14 экз./с). В тестах статьи на одной H100, с batch size 1 и входами длиной 64, 256 и 512 токенов, bi-encoder с предварительно вычисленными метками достиг до 130-кратного преимущества по throughput над gliner_small-v2.5. При 100 типах сущностей на одной H100 bi-encoder обрабатывает 1,96 млн предсказаний в день против 368K у cross-encoder (Stepanov et al., 2026).
С точностью всё также хорошо. Bi-encoder-large достигает 61,5% CrossNER F1, немного опережая 60,9% у cross-encoder. Авторы рекомендуют bi-base-v2.0 (194M) как оптимальный вариант: 98% точности большой модели при скорости в 2,6 раза выше (Stepanov et al., 2026).
from gliner import GLiNER
model = GLiNER.from_pretrained("knowledgator/gliner-bi-base-v2.0")
# Pre-compute embeddings for massive label sets — encode once, use forever
entity_types = ["person", "organization", "date"] # Can be thousands or millions
entity_embeddings = model.encode_labels(entity_types, batch_size=8)
# Inference only encodes text — labels are a cached lookup
outputs = model.batch_predict_with_embeds(texts, entity_embeddings, entity_types)
Возможные применения включают биомедицинский NER относительно онтологии UMLS (более 4M концептов), корпоративные таксономии, которые меняются без переобучения модели, и entity linking через сопутствующий фреймворк GLiNKER.
LLM в роли учителей: кейс $70 и production-пайплайн
Паттерн LLM-as-teacher разделяет дорогую аннотацию и более дешёвый инференс. Два опубликованных кейса показывают, как команды применяли его в разных условиях.
Кейс CFM
В кейсе на Hugging Face компания Capital Fund Management извлекала названия компаний примерно из 900 000 заголовков финансовых новостей. Zero-shot GLiNER показал 87,0% F1. Команда использовала Llama 3.1-70B для разметки датасета примерно за 8 часов и около $70, затем ещё 8 часов проверяла 2 714 примеров через Argilla.
Файн-тюнинг GLiNER на этих данных дал 93,4% F1 в рамках кейса против 92,7% у teacher-модели Llama-70B. Авторы заявляют $0,10 в час на CPU для файн-тюненной модели и $8 в час для teacher-модели (кейс CFM). Эти цифры относятся к одной задаче на финансовых новостях и одной инфраструктурной конфигурации.
Исследование Refuel AI
В техническом отчёте Refuel AI сравнивается разметка LLM на 8 NLP-датасетах, включая CoNLL-2003. В отчёте заявлены 88,4% согласия с ground truth для GPT-4 (март 2023 года) и 86,2% для людей-разметчиков в рамках их setup-а, а также разметка в 20 раз быстрее и в 7 раз дешевле. Их ансамбль направляет простые примеры в более дешёвые модели, а сложные — в GPT-4, достигая более 95% согласия в описанных экспериментах (технический отчёт Refuel AI). Считайте эти результаты заявленными поставщиком и зависящими от протокола аннотации исследования.
Production-пайплайн
Практический production-процесс состоит из шести шагов:
- Напишите инструкции для аннотаторов на естественном языке
- Создайте валидационный и отложенный тестовый наборы, размеченные людьми, с размером, определённым распространённостью сущностей, требованиями к срезам по каждой метке и желаемой шириной доверительного интервала. Пилот на 50–200 документах может помочь откалибровать инструкции, но не является размером production-оценки по умолчанию.
- Используйте LLM с версионируемым промптом и явной схемой вывода для разметки массовых обучающих данных; сохраняйте версию модели, промпт и исходный текст вместе с каждой меткой
- Проверьте подвыборку через Argilla или Label Studio
- Дообучите компактный энкодер (GLiNER, SpanMarker, RoBERTa)
- Деплойте модель только если энкодер проходит quality gate и снижает измеренную полную стоимость. CFM заявляет в своей конфигурации почасовую стоимость инфраструктуры в 16–80 раз ниже; при сравнении учитывайте стоимость аннотации, проверки, сервинга и переобучения.
LLM может сократить объём ручной разметки, но команда всё равно отвечает за валидационный набор, инструкции для аннотаторов, целевую проверку и анализ ошибок.
Где GLiNER ошибается и где LLM по-прежнему полезны
В бенчмарке Sease (октябрь 2025 года) GLiNER сравнивался с GPT-4.1-mini на 30 задачах разбора запросов. GPT-4.1-mini дал 100% полностью корректных ответов. GLiNER — 53% (16 из 30). Однако GLiNER отвечал за 0,08 секунды против 1,21 секунды у LLM — в 15 раз быстрее.
В этом бенчмарке из 30 задач GLiNER регулярно ошибался в трёх случаях:
- Неявные сущности: извлечение «event» из фразы «Elton John performed at Madison Square Garden» — слово «event» буквально отсутствует, но LLM выводит «concert»
- Чувствительность к формулировке метки: «2022» получает 0,388 относительно «date», но 0,958 относительно «year» — небольшие изменения метки вызывают большие скачки score
- Маппинг значений: GLiNER возвращает точный текст («family houses») вместо канонического значения («Single family house»). LLM может выполнить такую нормализацию, если промпт и schema задают целевые значения.
Вложенные и пересекающиеся сущности
По умолчанию GLiNER использует плоский декодинг, который подавляет пересекающиеся спаны. Его API также поддерживает flat_ner=False, поэтому вложенные предсказания возможны, хотя качество зависит от чекпоинта, меток и доменных данных. Перед выбором специализированной модели сравните оба режима декодинга на span-level тестовом наборе с вложенными сущностями.
Используйте GLiNER для извлечения явных сущностей, а случаи, требующие инференса, ризонинга или маппинга на предопределённые онтологии, направляйте в LLM. Порог роутинга должен определяться на размеченном доменном наборе.
Оценка NER: метрики, подводные камни и тестовые наборы
Модель может получить 95% F1 на тщательно отобранном тестовом наборе и всё равно провалиться на смеси документов, которую увидит после деплоя. Формируйте evaluation set из production-распределения и сохраняйте срезы для редких форматов и типов сущностей, которые aggregate F1 может скрыть.
Основные метрики
- Entity-level F1: стандартная метрика. Предсказание считается корректным только при точном совпадении границ спана и типа с ground truth. Именно это обычно сообщается в статьях.
- Token-level F1: оценивает каждый токен отдельно. Результаты завышаются, поскольку правильное распознавание большей части длинной сущности даёт частичный credit. Предпочитайте entity-level F1.
- Precision против Recall: у них часто асимметричная стоимость ошибок. Для деидентификации важнее recall: пропустить имя хуже, чем удалить лишнее. Для извлечения в базу данных важнее precision: ложные записи искажают downstream-анализ.
Распространённые ошибки при оценке
- Завышение из-за частичного совпадения: извлечено «Bill», тогда как gold label — «Bill Gates»; некоторые скрипты считают это частичным совпадением. Используйте точное совпадение спанов, если у вас нет причины поступать иначе.
- Путаница типов: «Microsoft» правильно найден как спан, но размечен как PERSON вместо ORG — результат должен быть нулевым. Проверьте, что evaluation code это учитывает.
- Утечка тестового набора: если тестовые сущности пересекаются с обучающими, score завышается. Zero-shot-бенчмарки CrossNER и Few-NERD предназначены для проверки обобщения.
- Неконтролируемые label-промпты: короткое название типа и протестированное описание типа — разные входы. Версионируйте описания меток, thresholds, ревизии чекпоинтов и режим декодинга вместе со score.
- Zero-shot-заявления на одном языке: не делайте вывод о мультиязычном качестве по английскому. OpenNER охватывает 36 корпусов и 52 языка, а его baseline-ы показали, что ни одна модель не является лучшей на всех языках (Palen-Michel et al., 2025). В экспериментах FiNERweb переход от английских к меткам на целевом языке менял F1 на 0,02–0,09 в зависимости от setup-а (Golde et al., 2026). Если продукт использует локальную терминологию, протестируйте оба языка меток.
- Один запуск — не вердикт: где применимо, сообщайте вариацию по random seed, sweep-ы thresholds и результаты повторных production-выборок. При малом числе примеров в срезах рейтинг моделей нестабилен.
Построение доменного тестового набора
Для production-оценки я рекомендую:
- Выбирать данные из production, а не из curated-примеров. Включайте неидеальные документы, с которыми модель действительно будет работать.
- Подбирать размер тестового набора под требуемую точность оценки. Определяйте число примеров по распространённости сущностей, размерам срезов по каждой метке и желаемой ширине доверительного интервала. Сообщайте bootstrap- или аналитические доверительные интервалы.
- Использовать минимум двух аннотаторов на калибровочной подвыборке. Разбирайте разногласия и сообщайте span-aware-меру согласия. Согласие помогает диагностировать неоднозначность и качество инструкций; это не верхняя граница производительности модели.
- Стратифицировать по сложности — простые случаи (чистый текст, стандартные типы) и сложные случаи (неоднозначные сущности, жаргон, шумный текст).
- Сохранять privacy- и fairness-срезы. Для PII сообщайте recall по типу PII, языку, локали, формату документа и релевантным демографическим срезам или происхождению имён. Минимизируйте доступ оценщиков к исходному чувствительному тексту, установите ограничения хранения и анализируйте ложные отрицания.
Continual NER требует неизменяемого regression set
Production-таксономии меняются. Добавляйте новые типы, не меняя незаметно смысл старых. Храните версионируемый неизменяемый regression set для существующих типов, отдельный тестовый набор для нового типа и changelog изменений инструкций для аннотаторов. Перед заменой чекпоинта отдельно сообщайте score старых и новых типов. Это самый простой способ обнаружить forgetting и дрейф таксономии.
Production NER в четырёх индустриях
Ниже приведены отдельные индустриальные примеры с конкретными цифрами в заявленных условиях. Источники включают сравнения от поставщиков, кейсы компаний или проектов, а также peer-reviewed статьи и препринты. Рассматривайте их как практические примеры, а не рейтинг зрелости.
Здравоохранение
John Snow Labs предлагает модели клинических сущностей, сопоставленные с ICD-10, SNOMED CT, LOINC и RxNorm. В заявленном поставщиком сравнении на 48 документах и шести классах token-level evaluation показала 96% F1, против 91% у Azure, 83% у AWS и 79% у GPT-4o. В сравнении метки были перемаплены, а несопоставимые предсказания исключены. В отдельном кейсе, представленном провайдером, описывается, как Providence St. Joseph Health обрабатывает 100 000–500 000 клинических заметок в день.
В опубликованном в рамках проекта обзоре 2025 года open-source проект OpenMed сообщает о более чем 380 биомедицинских NER-моделях, 29,7 млн загрузок с Hugging Face и лидирующих результатах на 10 из 12 публичных биомедицинских бенчмарков.
Финансовый NER
Основной сценарий — извлечение данных из документов SEC. Finance NLP от John Snow Labs извлекает более 11 типов сущностей из документов 10-K/10-Q: адреса, тикеры, финансовые годы, фондовые биржи. В peer-reviewed вариантах FinBERT-MRC достигается 0,87–0,93 F1 на задачах извлечения финансовых сущностей. Основные сложности — длинные документы и вложенные сущности в сложных финансовых инструментах.
E-commerce
Peer-reviewed статьи сообщают, что система EAMT Walmart (KDD 2023) обучается на 965 млн запросов, использует около 60 меток сущностей и дала рост GMV на 0,51% в A/B-тестах. Фреймворк TripleLearn Home Depot (AAAI 2021) повысил NER F1 с 69,5 до 93,3 за счёт итеративного обучения.
Кибербезопасность
Peer-reviewed система iACE (CCS 2016) обработала 71 000 статей из 45 security-блогов и извлекла 900K элементов OpenIOC с 95% precision и более чем 90% coverage. В отчёте о проекте современных систем вроде CyNER описывается объединение DeBERTa (F1 >91%) с regex-эвристиками для IOC. Препринт CyberNER за 2025 год описывает унифицированный датасет, объединяющий четыре датасета в 21 тип сущностей, согласованный со STIX 2.1; RoBERTa достигает 0,736 F1.
Оптимизация деплоя: от Python к инференсу с меньшей латентностью
Сопутствующий репозиторий демонстрирует экспорт GLiNER в ONNX и упаковку INT8. Он фиксирует размеры артефактов, но не воспроизводит значения латентности или F1, заявленные внешними проектами.
Нативный сервинг GLiNER
Перед переходом на новый рантайм протестируйте Ray Serve path проекта. gliner[serve] предоставляет dynamic batching, memory-aware batch sizing, масштабирование на несколько реплик и HTTP-клиент. Это может убрать queueing overhead в multi-user-сервисе, сохранив тот же код модели. Перед сравнением с ONNX или Rust измерьте queue latency, warm latency, throughput и exact-span F1 при вашем профиле запросов.
Экспорт в ONNX
У GLiNER есть нативная конвертация в ONNX, а предварительно сконвертированные модели доступны на Hugging Face (onnx-community/gliner_small-v2.1). Измеряйте латентность относительно того же PyTorch-чекпоинта, batch size, железа и протокола прогрева.
# Export with quantization
# python convert_to_onnx.py --model_path model/ --save_path onnx/ --quantize True
# Load the exported ONNX model
from gliner import GLiNER
model = GLiNER.from_pretrained("path/to/model", load_onnx_model=True)
entities = model.predict_entities(text, labels, threshold=0.5)
INT8-квантизация
Dynamic quantization может уменьшить требования ONNX-модели к хранилищу и памяти. Влияние на латентность и F1 по каждой метке зависит от чекпоинта и CPU, поэтому скрипт экспорта — это подтверждение упаковки, а не бенчмарк деплоя.
from onnxruntime.quantization import quantize_dynamic, QuantType
# Quantize weights dynamically, then evaluate the result
quantize_dynamic("gliner.onnx", "gliner_int8.onnx", weight_type=QuantType.QInt8)
gline-rs: реимплементация на Rust
gline-rs (Apache 2.0) убирает Python-рантайм из inference path. В его token-mode-бенчмарке v0.9.0 на Intel i9 с тремя метками заявлено 6,67 seq/s против 1,61 у Python, а результат для RTX 4080 составляет 248,75 seq/s. Это собственные условия проекта, а не результаты, воспроизведённые в сопутствующем репозитории. Поддерживаются span- и token-модели, GPU/NPU через ONNX Runtime; пакет опубликован как crate на crates.io.
use gliner::{GLiNER, TokenMode, Parameters, RuntimeParameters, TextInput};
let model = GLiNER::<TokenMode>::new(
Parameters::default(), RuntimeParameters::default(),
"tokenizer.json", "model.onnx")?;
let input = TextInput::from_str(
&["My name is James Bond."], &["person", "vehicle"])?;
let output = model.inference(input)?;
// => "James Bond" : "person" (99.7%)
Пакет fast-gliner предоставляет Python bindings через PyO3.
Что покрывают данные об оптимизации
| Путь | Доступные подтверждения | Что измерить до деплоя |
|---|---|---|
| ONNX export | Сопутствующий скрипт экспортирует чекпоинт GLiNER | Warm latency, throughput и exact-span F1 |
| INT8 package | Сопутствующий скрипт создаёт dynamic quantized model | Размер артефакта, латентность и recall по меткам |
| gline-rs | Бенчмарк проекта на документированном железе и setup-е | Режим модели, метки, железо и batch в вашем сценарии |
Структурированное извлечение: нативные схемы, Instructor и локальные декодеры
Когда вам нужна большая гибкость, чем дают энкодерные модели — неявные сущности, ризонинг, маппинг на онтологию — начните с нативного механизма схем провайдера. OpenAI поддерживает строгие форматы ответа json_schema, Anthropic structured outputs поддерживает JSON-вывод и строгие tool inputs, а Gemini API поддерживает подмножество JSON Schema. Общая Pydantic- или Zod-модель может описывать контракт, но каждый провайдер принимает своё подмножество схемы и по-разному обрабатывает отказы и сложные схемы.
Соответствие схеме делает парсинг надёжным. Но оно не доказывает, что извлечённый спан существует в исходном тексте или что нормализованное значение корректно. Валидируйте значения полей, по возможности сохраняйте offsets или цитаты и оценивайте semantic accuracy на размеченном наборе.
Instructor оборачивает клиентские библиотеки провайдеров валидацией через Pydantic и опциональными ретраями после ошибок валидации.
Адаптировано из паттерна Instructor в scripts/05_structured_extraction.py:
import instructor
from pydantic import BaseModel
from typing import List, Literal
from openai import OpenAI
class Entity(BaseModel):
name: str
label: Literal["PERSON", "ORGANIZATION", "LOCATION"]
class ExtractEntities(BaseModel):
entities: List[Entity]
client = instructor.from_openai(OpenAI())
result = client.chat.completions.create(
model="gpt-5.4-mini", temperature=0.0,
response_model=ExtractEntities,
messages=[{"role": "user", "content": "BioNTech SE acquired InstaDeep in the U.K."}])
# entities=[Entity(name='BioNTech SE', label='ORGANIZATION'), ...]
Outlines от dottxt использует другой подход: генерацию токенов с ограничениями через finite-state machines. Декодер маскирует токены, нарушающие целевую грамматику, вместо того чтобы ждать ошибки валидации и выполнять ретрай. В обзоре AWS приводится 98% соответствия схеме против 76% для валидации после генерации. Там же отдельно повторяется утверждение .txt Engineering об ускорении генерации до 5 раз благодаря coalescence-подходу; на странице недостаточно методологии, чтобы считать эти две цифры результатом одного контролируемого бенчмарка.
import outlines
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "microsoft/Phi-3-mini-4k-instruct"
model = outlines.from_transformers(
AutoModelForCausalLM.from_pretrained(model_id),
AutoTokenizer.from_pretrained(model_id),
)
result = model(
"Extract entities from: BioNTech SE acquired InstaDeep in the U.K.",
ExtractEntities,
)
LangExtract полезен, когда сгенерированное поле должно быть привязано к источнику: он возвращает символьные интервалы и поддерживает hosted- и локальные LLM-бэкенды. Для self-hosted извлечения из документов NuExtract преобразует JSON Schema в шаблоны и включает мультимодальные документные модели. Рассматривайте оба инструмента как системы структурированного извлечения, а не как автоматическую замену span NER. Их цели по полям, offsets, layout документа и латентности требуют отдельных тестов.
Выбор зависит от места запуска моделей. Нативные схемы — самый простой путь для поддерживаемого провайдера. Instructor добавляет provider-agnostic слой валидации и ретраев через Pydantic. Outlines ограничивает локальную генерацию схемой. LangExtract делает приоритетом граундинг в источнике, а NuExtract ориентирован на self-hosted извлечение из документов. Все пути через LLM по-прежнему включают autoregressive generation. Сравнивайте каждый путь с энкодером при одинаковых batch size, железе, схеме сущностей и rubric semantic accuracy.
Трёхуровневая production-архитектура
Я бы строил роутинг production NER по форме задачи, а не по единому рейтингу моделей.
Tier 1: энкодерные модели для явных спанов. Используйте GLiNER cross-encoder для небольшого набора типов. Если набор большой и переиспользуемый, сравните bi-encoder с закэшированными embedding-ами типов. Дообучите модель через пайплайн LLM-as-teacher, а затем деплойте с native serving, ONNX, INT8 или gline-rs только после прохождения доменного бенчмарка.
Tier 2: multi-task или извлечение отношений. Если один запрос требует NER, классификации и иерархических полей, протестируйте общую модель GLiNER2 на 205M параметров. Если центральное требование — совместное извлечение спанов и отношений, протестируйте GLiNER-Relex. В статье о GLiNER2 сообщается латентность классификации на CPU 130–208 мс при протестированных количествах меток; это не доказательство характеристик более позднего API отношений или другого деплоя.
Tier 3: LLM для извлечения, требующего ризонинга. Направляйте неявные сущности, контекстный инференс и маппинг на онтологию в native schema API или Instructor для cloud API, а для локального constrained output — в Outlines. Используйте LangExtract, когда критичны интервалы в источнике, и NuExtract, когда входом является сам документ. Логируйте такие случаи: они могут стать основой следующего обучающего набора Tier 1.
Кейс CFM даёт один ориентир по стоимости для Tier 1: 93,4% F1 при заявленной стоимости $0,10 в час на CPU против 92,7% F1 и $8 в час у teacher-модели Llama-70B. Пересчитайте сравнение для своего железа, teacher-модели, набора меток и стоимости проверки.
Компромиссы и ограничения
Для каждого компромисса ниже важно понять, где он проявляется и можно ли измерить его до деплоя.
Ошибки LLM-as-teacher распространяются дальше. Если LLM систематически неверно обрабатывает конкретный тип сущностей, например путает названия дочерних компаний с материнскими, файн-тюненный энкодер унаследует этот bias. Исправление — целевая проверка людьми: сосредоточьтесь на типах сущностей, где confidence LLM низкий или нестабильный, а не на случайной выборке.
Валидная схема может содержать ложные факты. Native structured output, Instructor и constrained decoder-ы делают ответ пригодным для парсинга. Но они не гарантируют, что каждое поле обосновано источником, границы спана корректны или нормализованное значение связано с правильной записью. Сохраняйте исходные подтверждения и отдельно валидируйте семантику.
Потери от квантизации зависят от чекпоинта и данных. Сопутствующий проект создаёт dynamic quantized INT8-артефакт, но не измеряет его F1. Актуальные рекомендации GLiNER предлагают quantization-aware training, когда нужно сохранить точность INT8. Перед деплоем сравните квантизированный и оригинальный чекпоинты по exact-span F1 и recall каждой метки.
Когда трёхуровневая архитектура избыточна. Одному домену со стабильными типами сущностей и достаточным числом размеченных примеров может хватить файн-тюненного RoBERTa или пайплайна spaCy. Трёхуровневый паттерн подходит для нескольких доменов, меняющихся типов сущностей или измеренной смеси явного извлечения и извлечения, требующего ризонинга. Узкий invoice-пайплайн, извлекающий имена и даты, может остановиться на Tier 1.
Качество bi-encoder зависит от датасета. Совместное кодирование может помогать на некоторых датасетах, тогда как bi-encoder выигрывает сравнение статьи на CrossNER, а uni-encoder немного опережает его на CoNLL-2003. Тестируйте оба варианта на доменном наборе и выбирайте по измеренным exact-span quality, калибровке, числу меток и throughput, а не используйте «high stakes» как правило выбора семейства моделей.
Заявления о PII и мультиязычности требуют срезов. Высокий aggregate score может скрывать опасное падение recall для конкретной локали, формы имени, layout документа или редкого класса PII. Рассматривайте privacy-модель как один из уровней защиты, определите процесс обработки false negative и повторяйте оценку при изменении таксономии, языкового состава или источника данных.
Ключевые выводы
- Используйте компактный энкодер для явных спанов только после прохождения доменного тестового набора с поддержкой по каждому типу и доверительными интервалами.
- Используйте GLiNER для меняющегося словаря меток. Сначала сравните его bi-encoder, если большой набор типов переиспользуется; включайте
flat_ner=Falseтолько после измерения качества вложенных спанов. - Для жёстких zero-shot-заявлений используйте протестированные описания типов, а в мультиязычных продуктах отдельно проверяйте английские и локализованные формулировки меток.
- Сохраняйте OCR, NER, извлечение отношений и entity linking как отдельные этапы оценки, даже если одна модель предоставляет несколько задач.
- Рассматривайте teacher-модель LLM как систему предложения аннотаций. Инструкции для людей, adjudication, неизменяемые regression set-ы и отложенный тестовый набор всё равно обязательны.
- Используйте нативные схемы для поддерживаемых LLM-провайдеров, но отдельно от JSON validity валидируйте semantic correctness и grounding в источнике.
- Отдельно и совместно бенчмаркайте native serving, ONNX, квантизацию и Rust-пути. Никогда не перемножайте неизмеренные ускорения.
References
Статьи
- GLiNER: Generalist Model for Named Entity Recognition using Bidirectional Transformer — Zaratiana et al., NAACL 2024. Базовая архитектура сопоставления спанов и сущностей.
- GLiNER2: An Efficient Multi-Task Information Extraction System with Schema-Driven Interface — Zaratiana et al., EMNLP 2025 System Demonstrations. Объединяет NER, классификацию и иерархическое извлечение; в текущих релизах позже добавлено извлечение отношений.
- GLiNER Bi-Encoder: Scalable Named Entity Recognition with Bi-Encoder Architecture — Stepanov et al., февраль 2026 года. Раздельное кодирование для масштаба в миллионы меток.
- GLiNER-Relex: A Unified Framework for Joint Named Entity Recognition and Relation Extraction — Stepanov et al., 2026. Совместное zero-shot-извлечение сущностей и отношений.
- GLiNER2-PII: A Multilingual Model for Personally Identifiable Information Extraction — Zaratiana et al., 2026. 42 типа PII с разрешением на уровне символьных спанов.
- ZeroNER: Fueling Zero-Shot Named Entity Recognition via Entity Type Descriptions — Cocchieri et al., ACL 2025. Hard zero-shot-оценка с описаниями типов.
- OpenNER 1.0: Standardized Open-Access Named Entity Recognition Datasets in 50+ Languages — Palen-Michel et al., EMNLP 2025. 36 корпусов, 52 языка и baseline-ы для нескольких онтологий.
- FiNERweb: Datasets and Artifacts for Scalable Multilingual Named Entity Recognition — Golde et al., EACL 2026. Мультиязычные метки и оценка переноса.
- UniNER: Universal NER using Large Language Models — Zhou et al., ICLR 2024. Универсальный NER на основе LLM через дистилляцию ChatGPT.
- NuNER: Entity Recognition Encoder Pre-training via LLM-Annotated Data — Bogdanov et al., EMNLP 2024. Показывает, что при наличии данных, сгенерированных LLM, достаточно 125M параметров.
Индустриальные статьи
- EAMT: Entity-Aware Multi-Task Learning for Query Understanding — Walmart, KDD 2023. 965M запросов, рост GMV на 0,51%.
- TripleLearn: End-to-End NER for E-Commerce Search — Home Depot, AAAI 2021. F1 вырос с 69,5 до 93,3.
- iACE: Automatic Collection of Cyber Threat Intelligence — CCS 2016. 71K статей, 900K IOC.
- CyberNER: A Harmonized STIX Corpus for Cybersecurity NER — 21 тип сущностей, согласованный со STIX 2.1.
- FinBERT-MRC: Financial NER via Machine Reading Comprehension — 0,87–0,93 F1 на задачах извлечения финансовых сущностей.
Кейсы
- CFM Case Study: Fine-tuning GLiNER for Financial NER — пайплайн разметки LLM Capital Fund Management за $70, достигший 93,4% F1.
- Refuel AI: LLM Labeling Technical Report — GPT-4 достиг 88,4% согласия при аннотации, превысив результат людей-разметчиков.
- Sease: GLiNER as an Alternative to LLMs for Query Parsing — где GLiNER ошибается и где LLM по-прежнему необходимы.
- John Snow Labs: Medical Text De-Identification Benchmark — сравнение обнаружения PHI с 96% F1 у разных провайдеров.
- OpenMed: Year in Review 2025 — более 380 биомедицинских NER-моделей, 29,7M загрузок Hugging Face.
Инструменты и фреймворки
- ner-field-guide demo repo — сопутствующие демо для статьи: GLiNER quickstart, экспорт в ONNX, LLM-as-teacher и структурированное извлечение.
- gline-rs: Rust reimplementation of GLiNER — ускорение CPU в 4,1 раза по сравнению с Python, лицензия Apache 2.0.
- GLiNER serving — Ray Serve path с dynamic batching и деплоем нескольких реплик.
- spaCy English pipelines — метрики версионируемого пайплайна с закрытыми метками.
- Microsoft Presidio — анализ и анонимизация PII с кастомными recognizer-ами.
- Instructor — структурированное извлечение через LLM с Pydantic-моделями.
- Outlines — генерация токенов с ограничениями через FSM и заявленный бенчмарк соответствия схеме.
- LangExtract — структурированное извлечение с привязкой к источнику и символьными интервалами.
- NuExtract — self-hosted извлечение из документов через преобразование схемы в шаблон.
- OpenAI Structured Outputs — справочник по строгому формату ответа на основе JSON Schema.
- Anthropic Structured Outputs — JSON-вывод и строгие входы инструментов.
- Gemini Structured Outputs — подмножество JSON Schema для структурированных ответов.
- AWS: Structured Output with Outlines — бенчмарк с 98% соответствия схеме.