Гайд по NER 2026: GLiNER, spaCy, Transformers и LLMs
Автоматический перевод Эта статья была автоматически переведена с оригинальной английской версии.
Обновление статьи
Впервые опубликовано 2 апреля 2026 года. Проверено и обновлено 6 сентября 2026 года. Обновление охватывает новые модели GLiNER, потоковое обнаружение PII, API для структурированного извлечения и интерпретацию бенчмарков.
Распознавание именованных сущностей (NER) превращает текст в размеченные фрагменты, которые может использовать программа. Для фразы «Bill Gates founded Microsoft on April 4, 1975» оно может вернуть непрерывные текстовые спаны Bill Gates, Microsoft и April 4, 1975 с типами person, organization и date. В span-based encoder, таком как GLiNER, модель один раз читает текст и оценивает candidate spans относительно переданных вами labels. Выбор NER-системы означает решение о том, сколько латентности, стоимости, гибкости labels и reasoning требуется этому извлечению.
Сопутствующий репозиторий содержит smoke-примеры для GLiNER, ONNX export, генерации аннотаций и structured extraction. Его сравнение на трёх предложениях не является рейтингом моделей: scorer схлопывает повторяющиеся пары text/type и может игнорировать завершающие gold-документы, если для них отсутствуют predictions. В teacher-скрипте также нет показанного преобразования в проверенные training spans. Используйте эти примеры для изучения API, а не для заявления о завершённом training или evaluation workflow. Для workload, где преобладают явные spans, компактные encoders обычно быстрее и дешевле. LLMs по-прежнему полезны для генерации training data и обработки случаев, требующих inference или normalization. В разделах о benchmark объясняются опубликованные сравнения и их ограничения; ни одно из них не является новым benchmark run для этого гайда.
Для retrieval- или privacy-пайплайна я сначала выяснил бы, должен ли output быть literal mention. Это решение отделяет span recognizer от систем, которые также нормализуют значения, связывают записи или выводят факты.
Сопутствующий репозиторий: ner-field-guide с запускаемыми демо для GLiNER, ONNX export, LLM-as-teacher pipeline и structured extraction с Instructor.
Краткое сравнение моделей см. в Best NER Models in 2026.
Что такое named entity recognition?
Named entity recognition находит spans в тексте и назначает им типы: person, organization, date, product или domain-specific labels. Span — это непрерывный фрагмент исходного текста. NER идентифицирует mention; entity linking — отдельный шаг, который сопоставляет его с canonical record или concept в ontology.
| Workload | Первая модель для тестирования | Когда переходить к следующему варианту |
|---|---|---|
| IDs или controlled dictionaries | Rules или spaCy EntityRuler | Важен recall за пределами известных patterns. |
| Стабильные labels и большой объём training data | spaCy или fine-tuned encoder | Меняется label set или recall перестаёт расти на редких типах. |
| Меняющиеся labels; небольшой inventory типов | GLiNER cross-encoder | Inventory растёт или labels переиспользуются во множестве документов. |
| Большой переиспользуемый inventory типов | GLiNER bi-encoder | На domain set появляется regression качества или calibration. |
| Несколько extraction tasks в одном text pipeline | GLiNER2.5 | Joint-task quality не достигает target для отдельных tasks. |
| Неявные факты или schema reasoning | Structured LLM extraction | Latency, cost или unsupported claims превышают product budget. |
Где современные системы используют NER
NER по-прежнему находит фрагменты текста и назначает им labels. Изменилось его место в системе. Теперь NER предоставляет filters для RAG, structured arguments для agent tools и fields для document-processing pipelines. Поэтому latency, cost и schema flexibility стали не менее важны, чем benchmark accuracy.
RAG: улучшение retrieval с помощью entity extraction
Одного similarity search недостаточно, когда вопрос содержит точные entities. Для запроса “what did Anthropic say about model safety in Q4 2024?” entity extraction может предложить “Anthropic” и “Q4 2024” как filters. Применяйте hard filter только тогда, когда indexed metadata и date semantics это поддерживают; иначе используйте его как ranking signal или сохраняйте unfiltered retrieval path. Пропущенный alias или ошибочно выведенный date range может исключить правильный ответ.
При indexing вы извлекаете entities из каждого chunk и сохраняете их как metadata: {"organizations": ["Anthropic"], "dates": ["Q4 2024"], ...}. Это позволяет фильтровать по entity до запуска vector search. Knowledge graph RAG (GraphRAG, property graphs в LlamaIndex) добавляет named relationships, по которым retrieval может переходить через несколько hops. Сравнивайте этот подход с повторными vector searches на тех questions и corpus, которые вам нужно поддерживать.
На этапе query entities, извлечённые из вопроса пользователя, управляют routing. Вопрос с названием компании направляется в finance index; вопрос с названиями препаратов — в clinical knowledge base. GLiNER полезен, когда query-time schema или типы entities меняются. Незнакомые названия компаний или препаратов сами по себе не требуют open-vocabulary labels; closed-label model всё равно может распознавать новые mentions известных типов.
ИИ-агенты: превращение текста в структурированные факты
ИИ-агенты получают неструктурированный текст: web pages, API responses и user messages. NER превращает этот текст в structured facts, над которыми agent может выполнять reasoning, сохранять их или передавать tools.
Для tool routing запрос вроде “schedule a meeting with Sarah Chen from Accenture on Thursday at 2pm” может дать PERSON: Sarah Chen, ORGANIZATION: Accenture, DATE: Thursday и TIME: 2pm. Затем calendar resolver объединяет date и time в timestamp, требуемый API. Локальный encoder не требует API round trip и часто работает существенно быстрее, но latency зависит от модели, runtime, hardware, batch size и количества labels. Измеряйте оба пути на calendar workload, а не предполагайте фиксированный разрыв в миллисекундах.
NER также поддерживает entity tracking между сообщениями. Системам памяти agent нужно понимать, что “Sarah” в turn 3 и “Ms. Chen” в turn 12 — один и тот же человек. NER идентифицирует spans; coreference resolution определяет, относятся ли mentions к одному человеку в контексте. Затем entity linking сопоставляет этого человека с canonical record, если такой существует.
Ограничение в обоих случаях — latency. Если каждый из десяти последовательных шагов делает NER call длительностью 200 мс, эти calls добавляют 2 секунды воспринимаемой задержки. Один call добавляет 200 мс. Encoder models обычно лучше подходят для entity work внутри agent loops, чем extraction на базе LLM.
Document intelligence: от изображений к структурированным данным
OCR превращает изображения в текст. NER превращает этот текст в structured fields.
Стандартный pipeline сначала использует OCR, например Tesseract, Azure Document Intelligence или AWS Textract, чтобы получить text и bounding boxes. Затем NER находит spans для таких fields, как invoice_number, vendor_name, total и due_date. Шаг schema или relation extraction должен объединить descriptions, quantities и prices line items в line_items. Та же последовательность применяется к contracts, medical records и regulatory filings.
Современные document pipelines могут объединять layout understanding, entity extraction и relation extraction. OCR или layout-aware document model по-прежнему предоставляет text, reading order, tables и bounding boxes. Текущий GLiNER2.5 открывает entities, relations, classification и structured records через schema interface. Оценивайте каждый output отдельно: более старая статья о GLiNER2 не benchmark’ила каждую task, которую теперь предоставляет library.
В большинстве таких pipelines решающим фактором является cost. Рассчитывайте стоимость по фактическому месячному объёму документов, включая retries и review. Компактный encoder может работать на CPU, тогда как API-based LLM добавляет per-document inference cost и latency. Практический тест — разметить representative invoice set с помощью LLM. Выполните fine-tuning GLiNER на проверенных records, затем сравните оба пути по field-level F1, latency и total cost.
Обнаружение PII и LLM guardrails
Принципы защиты данных и обязанности по безопасности GDPR (Articles 5, 25, and 32), технологически нейтральное Security Rule закона HIPAA (HHS guidance) и CCPA в Калифорнии с поправками CPRA устанавливают разные права и safeguards, основанные на рисках. Цитируемые положения не предписывают NER или конкретную архитектуру pre-model scanning. Это не юридическая консультация; привлеките counsel для анализа требований, применимых к вашим данным и jurisdiction. NER может поддерживать data inventory, minimization или de-identification, но это лишь один control, recall которого необходимо валидировать для соответствующих данных и jurisdiction.
NER обрабатывает эту задачу напрямую. De-identification models находят spans PERSON, SSN, PHONE, EMAIL и ADDRESS и либо редактируют их, либо заменяют synthetic equivalents. Microsoft Presidio объединяет recognizers с anonymization operators; в его samples есть GLiNER as a recognizer. Ещё один кандидат — GLiNER2-PII с 0,3B parameters: в статье описаны 42 типа PII на уровне character spans. Ни один из этих вариантов не является доказательством compliance. Перед использованием detector в качестве control проверьте recall по data format, jurisdiction, language и PII class.
В vendor-run comparison John Snow Labs 48 документов, размеченных экспертами, охватывают шесть классов PHI. Labels providers были remapped, а unmappable predictions исключены, что ограничивает cross-provider interpretation. В отчёте Providence описаны 281 leaked PHI events в ходе review 1 000 notes, содержащих 34 701 предложение. Events — это не отдельные affected sentences: при privacy evaluation считайте и leaked instances, и affected documents.
Для LLM guardrails NER работает как pre-screening layer: сканирует user input на PII до отправки во внешний API, после чего блокирует или anonymizes его. Это может быть быстрее или проще, чем просить LLM самостоятельно выполнять moderation. Рассматривайте это как deployment hypothesis: измерьте оба пути на вашей модели, hardware, input mix и целевом recall. False negatives всё ещё возможны, поэтому добавьте ещё один control для PII exposure, который система не может допустить. GLiNER особенно полезен здесь, поскольку категории PII различаются по jurisdiction. API может принять новый label, например “genetic information”, без retraining. Это не доказывает recall для новой категории; проверьте её на reviewed examples, прежде чем на неё полагаться.
GLiNER: сопоставление span с label для open-vocabulary NER
GLiNER (NAACL 2024, Zaratiana et al.) сделал encoder-based NER конкурентоспособным с LLMs при существенно меньшей стоимости. Вместо того чтобы рассматривать NER как sequence labeling или text generation, GLiNER рассматривает его как matching problem. Она оценивает каждый candidate text span (каждую непрерывную последовательность слов, например “Bill Gates” или “Microsoft”) относительно каждого label типа entity, а затем оставляет пары с высоким score.
Модель получает labels типов entities и input text как одну sequence: [ENT] person [ENT] organization [ENT] date [SEP] Bill Gates founded Microsoft.... Bidirectional transformer (DeBERTa-v3) кодирует всё совместно.
Из output модель строит два набора representations. Один уточняет representation каждого entity type из позиции токена [ENT] через небольшую feed-forward network (FFN), преобразующую vector encoder. Другой представляет text spans, объединяя vectors начального и конечного слов через другую FFN. Dot product между representation span и representation entity type даёт score.
Примените sigmoid — и получите вероятность того, что span от word position до word position относится к entity type : . Здесь — span vector, созданный FFN, а — уточнённый FFN embedding entity type из соответствующего токена [ENT] (Zaratiana et al., 2024, Eqs. 1–2). Candidate spans ограничены 12 словами; tokenizer может разделить одно слово на несколько subword tokens.
GLiNER принимает natural-language label descriptions во время inference без retraining, но quality extraction зависит от формулировки labels и domain fit. Вы передаёте entity types вроде “person”, “adverse drug reaction” или “financial instrument”, а модель оценивает spans относительно них. Конфигурации 50M, 90M и 300M ниже — это модели из оригинальной статьи. В model card v2.1 вместо них перечислены English checkpoints на 166M, 209M и 459M, а также multilingual checkpoint на 209M — все под Apache 2.0. Не сравнивайте latency или memory между этими поколениями так, будто названия параметров идентичны (GLiNER v2.1 model card).
Для настоящего hard zero-shot test нужно исключить и target types, и target examples: у модели нет labeled examples для target task. Описание типа вроде “a medically confirmed adverse effect caused by a treatment” даёт модели больше информации, чем только adverse event. Это не гарантирует transfer, но description-driven ZeroNER превзошёл name-only baselines на benchmark с held-out types (Cocchieri et al., 2025).
Training data оригинальной модели поступили из датасета Pile-NER: 44 889 passages с 240K entity spans по 13K entity types, все размечены ChatGPT. Training GLiNER-L занял около 5 часов на одном A100 (Zaratiana et al., 2024).
Результаты benchmark
Zero-shot results из Zaratiana et al. (2024), Tables 1 и 2. F1 объединяет precision и recall в один score; более высокий score лучше только при одинаковых task и evaluation rules. Среднее по семи datasets объединяет пять datasets CrossNER с MIT Movie и MIT Restaurant:
| Model | Params | Avg F1 (CrossNER + MIT) | Avg F1 (20 datasets) |
|---|---|---|---|
| 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 parameters почти сравнивается с UniNER-13B в опубликованном среднем по семи datasets (55.4% против 55.6% F1), используя примерно в 140 раз меньше parameters. 50M GLiNER-S превосходит опубликованный результат ChatGPT (GPT-3.5) на 5 F1 points. Multilingual variant, обученный только на English data, превосходит тот же ChatGPT baseline в 8 из 10 неанглоязычных языков (Zaratiana et al., 2024). Эти сравнения используют версии models и evaluation harness из статьи; они не устанавливают ranking относительно более новых LLMs.
Варианты GLiNER охватывают biomedical text, PII detection, news и multilingual support.
В сопутствующем репозитории для quickstart сохраняется v2.1. Для нового cross-encoder comparison добавьте к нему maintained GLiNER v2.5 checkpoints; номера версий сами по себе не доказывают прирост domain F1. GLiNER v2.5 и Fastino GLiNER2.5 ниже — разные model families.
Из 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 libraries в production. Она также работает при других архитектурных ограничениях, чем GLiNER.
Pipelines spaCy (en_core_web_sm, en_core_web_trf) выполняют closed-vocabulary NER: фиксированный набор типов entities (PERSON, ORG, GPE, DATE и т. д.), заданный во время training. Расширение обученного компонента ner требует labeled examples и training. Для identifiers или controlled dictionary EntityRuler может добавлять custom labels через patterns без retraining; проверьте его recall за пределами этих patterns. Зафиксируйте поддерживаемый 3.8 model package, не считая unreleased major line production upgrade. Model card en_core_web_trf 3.8.0 сообщает 90.19 NER F1 на OntoNotes 5.0, но только для 18 predefined types (spaCy model card).
GLiNER выполняет open-vocabulary NER: принимает новый text label во время inference без retraining. Это не гарантирует полезное extraction для каждого label; формулировка и domain fit по-прежнему важны. Это сильный кандидат, когда entity types заранее неизвестны, часто меняются или специфичны для domain (“adverse drug reaction”, “financial instrument”, “threat indicator”).
Моя рекомендация: используйте spaCy для стандартных entity types, где pretrained pipelines хорошо проверены. Используйте GLiNER, когда нужны гибкие zero-shot types или pipeline должен адаптироваться без retraining. Они могут работать в одном pipeline: spaCy отвечает за tokenization и sentence splitting, а GLiNER — за entity extraction.
Supervised Transformer baseline
Для стабильных labels с representative annotated spans начните с fine-tuned token classifier, например RoBERTa или DeBERTa, как с supervised baseline. Он жертвует label flexibility ради task-specific accuracy. Сравните его со spaCy и GLiNER по exact-span F1, per-label recall, calibration, latency и cost на одном и том же domain set.
UniNER и NuNER: насколько маленькой может быть модель?
UniNER (ICLR 2024, Zhou et al.) и NuNER (EMNLP 2024, Bogdanov et al.) distill’ят LLM annotations в меньшие NER models — но расходятся в вопросе о том, насколько маленькими они могут быть.
UniNER: максималистский путь
UniNER выполняет fine-tuning LLaMA-7B/13B на 45 889 input-output pairs, сгенерированных ChatGPT. Для каждого entity type модель отвечает на вопрос “What describes [type] in the text?” и выдаёт JSON lists. Важный training trick: frequency-based negative sampling повышает F1 с 31.5% до 53.4% (Zhou et al., 2024).
UniNER-7B достигает 41.7% zero-shot F1 на 43 datasets — превосходя ChatGPT с 34.9% на 7 points. Версия 13B достигает 43.4%, то есть даёт лишь на 1.7 points больше почти при двукратном количестве parameters (Zhou et al., 2024).
Production trade-off: setup типа UniNER с более высоким score из статьи запрашивает каждый entity type последовательно. Вариант all-in-one использует один response, но в среднем получает score на 3.3% ниже. При FP16 checkpoint на 7B требует примерно 14GB только для weights; lower-bit quantization может уменьшить этот footprint. В UniNER-7B-all checkpoint указана лицензия CC BY-NC 4.0; проверяйте точный checkpoint, а не переносите эту label на все variants.
NuNER: минималистский путь
NuNER начинает с RoBERTa-base (125M parameters) и использует contrastive training с 4,38 миллиона GPT-3.5 annotations по 200K concepts. После training concept encoder удаляется; text encoder встраивается в любой стандартный NER pipeline как замена RoBERTa (Bogdanov et al., 2024).
В Table 3 NuNER сообщает примерно 6.1–16.2 points преимущества над RoBERTa по macro-average token-classification F1 с frozen encoders и linear heads на четырёх datasets и разных sampled training sizes. В статье также сравнивается task-specific fine-tuning с UniNER-7B; отдельное обсуждение более чем дюжины examples относится к GPT-4 in-context learning, а не к threshold для matching UniNER (Bogdanov et al., 2024).
Обе статьи подтверждают возможность learning из LLM annotations. Они не доказывают, что любая меньшая model превзойдёт своего teacher на новом domain. Храните отдельно проверенный test set.
GLiNER2 и GLiNER2.5: отделяйте статью от checkpoint
Изначальная экосистема GLiNER распределяла NER, relation extraction, classification и document-level extraction между отдельными models. Статья GLiNER2 на EMNLP 2025 объединила NER, classification и hierarchical extraction в одной 205M-parameter model; в текущих releases позже добавили relation extraction в тот же schema interface.
Эта architecture 2025 года сохраняет cross-encoder design, но расширяет context до 2 048 tokens (в 4 раза больше оригинала) и добавляет declarative schemas для определения extraction tasks. Training использует 135 698 real documents, размеченных GPT-4o, и 118 636 synthetic examples (Zaratiana et al., 2025).
На zero-shot CrossNER GLiNER 2 получает 0.590 F1, что близко к 0.599 у GPT-4o в benchmark статьи середины 2025 года. Для classification среднее составляет 0.72 по 7 benchmarks против 0.69 у DeBERTa-v3-large. На CPU в статье сообщается classification latency 130–208 мс при протестированных количествах labels. Zero-shot DeBERTa baseline требует forward pass для каждого candidate label и растёт с 1 714 мс для 5 labels до 16 897 мс для 50; это не runtime supervised DeBERTa classifier (Zaratiana et al., 2025).
Вместо этого следующий пример загружает GLiNER2.5: 194M parameters, boundary architecture и настроенное окно 4 096 tokens. AutoExtractor выбирает BoundaryExtractor; legacy GLiNER2 loader здесь не подходит. Sparse start/end pairing изменяет spans, для которых выполняется scoring, но не конечный context limit. Для длинных documents используйте документированные overlapping-chunk helpers и проверяйте remapped offsets. Приведённые выше scores 2025 года не описывают этот checkpoint.
from gliner2 import AutoExtractor
# Requires `pip install gliner2[local]` and downloads the checkpoint.
extractor = AutoExtractor.from_pretrained("fastino/gliner2.5-base-v1")
# Compose tasks through the current schema interface
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)
Текущие releases GLiNER2 предоставляют entity recognition, classification, hierarchical extraction и relation extraction через одну schema. В статье EMNLP оцениваются NER и classification; benchmark hierarchical extraction не приводится, а более поздний relation API не рассматривается. Рассматривайте four-task path как deployment capability, которую нужно benchmark’ить, а не как доказательство того, что одна model сохраняет accuracy четырёх специализированных models.
Нововведения 2026 года: выбирайте architecture под bottleneck
В экосистеме GLiNER теперь есть разные architectures. Это кандидаты для domain comparison, а не единый leaderboard.
| Need | Candidate | Что проверить |
|---|---|---|
| Много переиспользуемых entity types | GLiNER bi-encoder | Exact-span F1 и calibration после caching type embeddings. |
| Entities и relations за один pass | GLiNER-Relex | Span F1 и relation F1 на одних и тех же documents. |
| Локальный кандидат для PII | GLiNER2-PII | Recall по language, document format и PII type. |
| Multilingual open-vocabulary candidate | GLiNER-X | Quality для каждого language; в card указаны 23 languages. |
| Generated или меняющиеся types | GLiNER Decoder | Стабильность и downstream usefulness generated types. |
Оригинальная статья GLiNER, статья о bi-encoder и GLiNER-Relex используют собственные models и harnesses. В model cards GLiNER-X и GLiNER Decoder описаны released checkpoints, но это не peer-reviewed comparable benchmark. Зафиксируйте различие в architecture decision record.
Streaming PII меняет момент, когда можно выпускать текст
GLiNER Streaming PII добавляет incremental detection с causal backbone Qwen3-0.6B и cached session state. Его API возвращает весь текущий session snapshot с offsets в accumulated text. Сохраняйте chunk boundaries, не меняйте labels до полного recompute и очищайте завершённые sessions. Требуется GLiNER 0.2.28 или новее.
Для streaming redaction я бы буферизовал unreleased text и тестировал entities, разделённые между chunks. Обнаружение номера телефона после отправки его первой половины не позволит отозвать эти bytes. Измеряйте leaked characters до release и добавленную задержку, а также final-span recall. В model card PIIMB masking F2 и strict typed-span F1 сообщаются отдельно; они отвечают на разные вопросы. Его multilingual weakness также не позволяет считать released checkpoint универсальным privacy filter.
Лицензии checkpoints — часть выбора модели
Перед deployment проверьте точные условия для code, weights и dataset. Указанные releases не взаимозаменяемы:
| Release | Опубликованная лицензия | Практическое следствие |
|---|---|---|
| GLiNER v2.1 и GLiNER bi | Apache 2.0 | Permissive terms model card; всё равно проверьте dependencies и data. |
| GLiNER2 и GLiNER2-PII | Apache 2.0 | Подтвердите выбранный checkpoint, а не только library. |
| UniNER-7B-all | CC BY-NC 4.0 | Не используйте в commercial path без отдельного разрешения. |
| NuNER | MIT | В released model и dataset указаны условия MIT. |
Обозначения лицензий не являются юридической консультацией. Production review должен включать условия base model, training data и provider.
Bi-encoder: масштабирование NER до миллиона labels
Оригинальный GLiNER кодирует labels и text совместно. Joint encoding постепенно становится дороже по мере того, как label text занимает context и должен заново кодироваться с каждым document. Точка перехода зависит от checkpoint, label descriptions и hardware. Когда один и тот же большой inventory типов переиспользуется во множестве documents, сделайте GLiNER bi-encoder основным вариантом для сравнения. Он разделяет encoding текста и labels на два отдельных transformers (Stepanov et al., 2026).
Text encoder использует ModernBERT (семейство Ettin), label encoder — sentence transformers (BGE или MiniLM). Spans и labels оцениваются через dot product. Такое разделение означает, что entity type embeddings можно вычислить заранее и закэшировать. На inference cached labels избавляют от повторного encoding labels. Scoring candidate spans относительно этих labels всё ещё требует compute и memory; приложению с million labels также нужны bounded candidate retrieval или batching, при этом recall labels, исключённых до scoring, нужно измерять.
Доступны четыре model sizes, все benchmark’нуты на CrossNER (Stepanov et al., 2026, Table 1):
| Model | Parameters | Avg F1 (CrossNER + MIT) | Throughput (H100) | With Pre-computed Labels |
|---|---|---|---|---|
| gliner-bi-edge-v2.0 | 60M | 54.0% | 13.64 ex/s | 24.62 ex/s |
| gliner-bi-small-v2.0 | 108M | 57.2% | 7.99 ex/s | 15.22 ex/s |
| gliner-bi-base-v2.0 | 194M | 60.3% | 5.91 ex/s | 9.51 ex/s |
| gliner-bi-large-v2.0 | 530M | 61.5% | 2.68 ex/s | 3.60 ex/s |
При 1 024 entity types pre-computed gliner-bi-edge-v2.0 bi-encoder теряет лишь 5.2% throughput относительно одного label (19.3 → 18.3 ex/s). Сопоставимый gliner_small-v2.5 uni-encoder теряет 98.7% (10.7 → 0.14 ex/s). В тестах статьи на одном H100, batch size 1 и inputs длиной 64, 256 и 512 tokens pre-computed bi-encoder достигает до 130× throughput advantage относительно gliner_small-v2.5. При 100 entity types на одном H100 bi-encoder обрабатывает 1.96 миллиона predictions в день против 368K у cross-encoder (Stepanov et al., 2026).
В статье о bi-encoder сообщается 61.5% для gliner-bi-large-v2.0 против 60.9% для gliner_large-v2.5 на том же среднем CrossNER-plus-MIT. В оригинальной статье GLiNER также указано 60.9%, но для другого checkpoint и evaluation. Рассматривайте сравнение bi-paper как результат статьи, затем протестируйте обе architectures на domain set. Авторы рекомендуют bi-base-v2.0 (194M) как sweet spot: он достигает 98% accuracy large model при скорости в 2.6 раза выше (Stepanov et al., 2026).
from gliner import GLiNER
model = GLiNER.from_pretrained("knowledgator/gliner-bi-base-v2.0")
# Pre-compute embeddings for a reused label set; rebuild this cache when labels or the checkpoint change.
entity_types = ["person", "organization", "date"] # Small example; large inventories need bounded candidate selection
entity_embeddings = model.encode_labels(entity_types, batch_size=8)
# Encode text and score spans against the cached labels
texts = ["Bill Gates founded Microsoft on April 4, 1975."]
outputs = model.batch_predict_with_embeds(texts, entity_embeddings, entity_types)
Timing sweep останавливается на 1 024 labels и использует H100, batch size one и десять forward passes на configuration. Он не измеряет deployed million-label service. Более крупные biomedical или enterprise inventories — это applications для отдельной оценки; entity linking доступен через сопутствующий framework GLiNKER.
LLMs в роли teachers: case study $70 и deployable pipeline
Паттерн LLM-as-teacher разделяет дорогую annotation от более дешёвого inference. Два опубликованных case studies показывают, как команды применяли его в разных условиях.
Case study CFM
В case study Hugging Face Capital Fund Management извлекала названия компаний примерно из 900 000 financial news headlines. Zero-shot GLiNER получил 87.0% F1. Команда использовала Llama 3.1-70B для annotation dataset примерно за 8 часов и около $70, затем ещё за 8 часов проверила 2 714 samples через Argilla.
Fine-tuning GLiNER на этих данных дал 93.4% F1 в case study против 92.7% у Llama-70B teacher. Авторы сообщают $0.10 в час на CPU для fine-tuned model и $8 в час для teacher (CFM case study). Эти figures описывают одну financial-news task и одну infrastructure setup.
Исследование Refuel AI
В technical report Refuel AI benchmark’ится LLM labeling на 8 NLP datasets, включая CoNLL-2003. В report указано 88.4% agreement with ground truth для GPT-4 (March 2023) и 86.2% для human annotators в их setup, а также labeling в 20 раз быстрее и в 7 раз дешевле. В отдельном experiment с ensemble на proprietary data agreement превысил 95%, при этом лучший отдельный LLM получил 89%. Confidence-based routing к более дешёвым или сильным models — предложенное применение, а не измеренный механизм результата на восьми datasets (Refuel AI technical report). Рассматривайте эти figures как vendor-reported results в рамках annotation protocol этого исследования.
Production pipeline
Практический production flow состоит из шести steps:
- Напишите annotation guidelines на естественном языке
- Создайте human-labeled validation и held-out test sets размером, рассчитанным по entity prevalence, требованиям к per-label slices и желаемой ширине confidence interval. Pilot на 50–200 documents может откалибровать guidelines, но это не default production evaluation size.
- Используйте LLM с versioned prompt и явной output schema, чтобы предложить bulk training labels. Сохраняйте requested и actual model, prompt, source text и fallback status. Отклоняйте unknown types и spans, которые нельзя выровнять с source; companion сейчас молча выполняет fallback, и это нужно исправить до того, как его output будет считаться training gold.
- Проверьте subset через Argilla или Label Studio
- Выполните fine-tuning компактного encoder (GLiNER, SpanMarker, RoBERTa)
- Выполняйте deployment только после того, как encoder пройдёт held-out quality и total-cost check. CFM сообщила о 16–80x меньшей hourly infrastructure cost в своём setup; включите в comparison затраты на annotation, review, serving и retraining.
LLM может сократить объём ручной annotation, но команда по-прежнему отвечает за validation set, annotation guidelines, targeted review и error analysis.
Где GLiNER ошибается и где LLMs остаются полезными
В benchmark Sease (октябрь 2025 года) GLiNER сравнивался с GPT-4.1-mini на 30 query-parsing tasks. GPT-4.1-mini получил 100% fully correct. GLiNER получил 53% (16 из 30). Но GLiNER отвечал за 0,08 секунды против 1,21 секунды у LLM — в 15 раз быстрее.
В этом benchmark из 30 tasks GLiNER демонстрировал три повторяющихся pattern:
- Implicit entities: extraction “event” из “Elton John performed at Madison Square Garden” — в тексте буквально не сказано “event”, но LLM выводит “concert”
- Label phrasing sensitivity: “2022” получает score 0.388 относительно “date”, но 0.958 относительно “year” — небольшие изменения label вызывают большие колебания score
- Value mapping: GLiNER возвращает точный surface text (“family houses”) вместо canonical value (“Single family house”). LLM может выполнить такую normalization, если prompt и schema определяют target values.
Вложенные и пересекающиеся entities
GLiNER по умолчанию использует flat decoding, подавляющий overlapping spans. Его API также поддерживает flat_ner=False, поэтому nested predictions возможны, хотя quality зависит от checkpoint, labels и domain data. Перед выбором специализированной model benchmark’ьте оба decoding modes на nested, span-level test set.
Используйте GLiNER для явного entity extraction, а cases, требующие inference, reasoning или mapping в predefined ontologies, направляйте в LLM. Routing threshold должен определяться labeled domain set.
Оценка NER: metrics, pitfalls и test sets
Model может получить 95% F1 на curated test set и при этом провалиться на document mix, который увидит после deployment. Формируйте evaluation set из production distribution и сохраняйте slices для редких formats и entity types, которые aggregate F1 может скрыть.
Основные metrics
Идентифицируйте каждое occurrence по document ID, half-open start/end offsets и type и проверяйте, что text[start:end] восстанавливает mention. Два occurrence слова “John” — это две targets. Перед matching проверьте document counts: missing predictions должны создавать false negatives, а не исчезать через zip(). Wrong types или offsets считайте unmatched prediction и unmatched gold span. Отчитывайтесь о micro precision, recall и F1, per-type support и recall, а также определяйте macro aggregation и empty cases.
- Entity-level F1: Стандартная metric. Prediction считается правильным только при точном совпадении span boundaries и type с ground truth. Именно это обычно сообщается в papers.
- Token-level F1: Оценивает каждый token независимо. Она может сделать partial boundary лучше, чем exact-span score, поэтому сообщайте exact-span F1, когда важна корректность boundaries; token-level metrics используйте только тогда, когда downstream decision принимается на уровне token.
- Precision vs Recall: У них часто асимметричная стоимость. Для de-identification важнее recall — пропустить имя хуже, чем выполнить избыточное redaction. Для database extraction важнее precision — false entries портят downstream analysis.
Распространённые evaluation pitfalls
- Partial match inflation: извлечённое “Bill”, когда gold label — “Bill Gates”, некоторые scripts считают partial match. Используйте exact span matching, если у вас нет причины поступать иначе.
- Type confusion: если “Microsoft” правильно найден как span, но помечен как PERSON вместо ORG, score должен быть zero. Проверьте, что evaluation code это учитывает.
- Test set leakage: не включайте duplicate и near-duplicate records, documents и annotations в test set. Для hard zero-shot claim также исключите target entity types из training; одни лишь повторяющиеся surface strings не являются leakage.
- Uncontrolled label prompts: короткое имя типа и протестированное описание типа — разные inputs. Version label descriptions, thresholds, checkpoint revisions и decoding mode вместе со score.
- One-language zero-shot claims: не выводите multilingual quality из English. OpenNER охватывает 36 corpora и 52 languages, а baselines показали, что ни одна model не является лучшей для каждого language (Palen-Michel et al., 2025). В экспериментах FiNERweb переход с English labels на target-language labels изменил F1 на 0.02–0.09 в зависимости от setting (Golde et al., 2026). Тестируйте оба языка labels, если product использует локальную терминологию.
- One run is a verdict: сообщайте variation по random seeds, где это применимо, threshold sweeps и повторные production samples. Небольшие slice counts делают ranking models нестабильным.
Сохраняйте normalization, entity linking, record grouping и relation endpoints отдельно от extractive F1. Для privacy сообщайте leaked instances и affected auto-accepted documents, false redactions и review fraction. Для serving сообщайте completion rate, p50/p95 document latency, cold и warm runs, batch и label sizes, peak memory и cost per accepted document.
Создание domain test set
Для production evaluation я рекомендую:
- Выбирайте samples из production data, а не из curated examples. Включайте messy documents, которые model действительно увидит.
- Определяйте размер test set под нужную оценку. Выберите count с учётом entity prevalence, размеров per-label slices и желаемой ширины confidence interval. Сообщайте bootstrap или analytic confidence intervals.
- Привлекайте минимум двух annotators для calibration subset. Adjudicate disagreements и сообщайте span-aware agreement measure. Agreement помогает выявить ambiguity и качество guidelines; это не ceiling производительности model.
- Stratify по сложности — easy cases (clean text, standard types) и hard cases (ambiguous entities, jargon, noisy text).
- Сохраняйте privacy и fairness slices. Для PII сообщайте recall по PII type, language, locale, document format и релевантным demographic или name-origin slices. Минимизируйте доступ evaluators к raw sensitive text, задайте retention limits и проверяйте false negatives.
Continual NER требует immutable regression set
Production taxonomies меняются. Добавляйте новые types, не меняя молча смысл старого type. Храните versioned, immutable regression set для existing types, отдельный test set для нового type и changelog изменений annotation guidelines. Перед заменой checkpoint сообщайте scores для old types и new type отдельно. Это самый простой способ обнаруживать forgetting и taxonomy drift.
Production NER в четырёх индустриях
Ниже приведены selected industry examples с конкретными numbers в условиях, указанных в источниках. Источники объединяют vendor-reported comparisons, case studies от компаний или проектов и peer-reviewed papers или preprints. Рассматривайте их как практические примеры, а не как ranking зрелости.
Healthcare
Приведённые выше examples John Snow Labs и Providence показывают, почему de-identification требует как entity-level, так и document-level reporting. Их evaluation protocols полезнее для проектирования review, чем безоговорочный ranking providers.
В ретроспективе OpenMed, опубликованной 6 января 2026 года, сообщается о 481 model; 380+ описывает inventory на момент July launch. Downloads измеряют distribution, а не deployments. Заявление о leading results на 10 из 12 benchmarks взято из отдельного author preprint августа 2025 года, а не из independently verified production results.
Financial NER
Financial extraction включает company mentions в news и fields в filings; их schemas и document lengths различаются. CFM case study охватывает первый вариант. FinBERT-MRC формулирует extraction как machine reading comprehension и сообщает 92.78±0.56 F1 на ChFinAnn и 96.80±0.38 на AdminPunish, оба — китайские datasets. Эти results не доказывают accuracy на English SEC filings. Тестируйте long documents и nested financial entities на целевом language.
E-commerce
В KDD 2023 paper Walmart используется multitask query data QU-965M; примерно 60 NER labels представлены как IOB2 classes. Section 6.8 связывает 0.51% GMV lift с MTDNN baseline, обученным на этих data, тогда как online evaluation EAMT осталась future work. Business delta нельзя приписать только NER. В TripleLearn Home Depot сообщается, что held-out F1 вырос с 69.5 до 93.3, online experiment продолжался более девяти месяцев в production. Переносимый вывод — iterative domain supervision, а не ranking architectures на текущий момент.
Cybersecurity
iACE — исторический пример automated threat-intelligence extraction. Статья CyNER объединяет neural recognition с другими extraction sources и сообщает 76.66 span micro-F1 для XLM-RoBERTa-large, с evaluation через seqeval. В preprint CyberNER четыре datasets harmonized в 21 STIX 2.1-aligned labels; для RoBERTa сообщается 0.736 F1. Это research results, а не доказательство production adoption.
Optimization deployment: от Python к inference с меньшей latency
Сопутствующий repo демонстрирует GLiNER ONNX export и INT8 packaging. Он записывает artifact sizes, но не воспроизводит latency или F1 figures, сообщённые внешними projects.
Native GLiNER serving
Прежде чем переходить на новый runtime, протестируйте Ray Serve path проекта. gliner[serve] предоставляет dynamic batching, memory-aware batch sizing, multi-replica scaling и HTTP client. Batching и replicas могут повысить throughput, сохраняя model code; batching также может добавить waiting time, а replicas не устраняют queueing. Перед сравнением с ONNX или Rust benchmark’ьте queue latency, warm latency, throughput и exact-span F1 при вашем request mix.
ONNX export
GLiNER имеет native ONNX conversion, а pre-converted models доступны на Hugging Face (onnx-community/gliner_small-v2.1). Измеряйте latency относительно того же PyTorch checkpoint, batch size, hardware и warm-up protocol.
Запустите scripts/02_onnx_export.py из companion repository, чтобы экспортировать model и выполнить dynamic quantization её ONNX artifact. Скрипту нужны соответствующие environment и checkpoint download, поэтому это command для запуска там, а не self-contained article snippet:
uv run python scripts/02_onnx_export.py
INT8 quantization
Dynamic quantization может уменьшить storage и memory requirements ONNX model. Влияние на latency и per-label F1 зависит от checkpoint и CPU, поэтому export script — evidence упаковки, а не deployment benchmark.
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 reimplementation
gline-rs (Apache 2.0) убирает Python runtime из inference path. В его token-mode benchmark v0.9.0 на Intel i9 с тремя labels сообщается 6.67 seq/s против 1.61 у Python на 100 NuNER samples. Отдельный experiment v0.9.1 на RTX 4080 и 1 000 samples сообщает 248.75 seq/s без matched Python GPU comparison. Это conditions самого проекта, а не results, воспроизведённые companion repo. Поддерживаются span и token models, GPU/NPU через ONNX Runtime; package выпускается как 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%)
Package fast-gliner предоставляет Python bindings через PyO3.
Что покрывает optimization evidence
| Path | Доступное evidence | Что измерить перед deployment |
|---|---|---|
| ONNX export | Companion script экспортирует GLiNER checkpoint | Warm latency, throughput и exact-span F1 |
| INT8 package | Companion script создаёт dynamically quantized model | Artifact size, latency и per-label recall |
| gline-rs | Project benchmark на документированных hardware/setup | Ваш model mode, labels, hardware и batch |
Structured extraction: native schemas, Instructor и local decoders
Когда требуется больше flexibility, чем дают encoder models — implicit entities, reasoning, ontology mapping, — начните с native schema mechanism провайдера. OpenAI поддерживает strict json_schema response formats, Anthropic structured outputs поддерживает JSON outputs и strict tool inputs, а Gemini API поддерживает subset JSON Schema. Общая Pydantic или Zod model может описывать contract, но каждый provider принимает свой schema subset и по-разному обрабатывает refusals и complexity.
Schema conformance делает parsing надёжным. Она не доказывает, что extracted span существует в source text или что normalized value корректно. Валидируйте field values, сохраняйте offsets или quotations, когда возможно, и оценивайте semantic accuracy на labeled set.
Instructor оборачивает provider clients в Pydantic validation и optional retries после validation failures.
Адаптировано из Instructor pattern в scripts/05_structured_extraction.py. Нужны перечисленные packages и OPENAI_API_KEY; companion script выполняет fallback на GLiNER, если key недоступен. Теперь в статье используется GPT-5.6 Terra, model card которого поддерживает Chat Completions, function calling, structured outputs и none reasoning effort. Сравните его с более дешёвым старым baseline перед switching high-volume extractor; новое generation не доказывает лучшую NER accuracy.
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.6-terra", reasoning_effort="none",
response_model=ExtractEntities,
messages=[{"role": "user", "content": "BioNTech SE acquired InstaDeep in the U.K."}])
# entities=[Entity(name='BioNTech SE', label='ORGANIZATION'), ...]
Outlines от dottxt использует другой подход: constrained token generation через finite-state machines. Decoder маскирует tokens, которые нарушили бы target grammar, вместо того чтобы ждать validation failure и выполнять retry. В AWS overview приводится 98% schema adherence против 76% для post-generation validation. Там же отдельно повторяется claim .txt Engineering о generation до 5 раз быстрее благодаря coalescence; на странице недостаточно methodology, чтобы считать обе figures результатом одного controlled benchmark.
Следующий небольшой local example сохраняет Phi-3 как исторический пример decoder integration, а не как рекомендацию модели на 2026 год. Для нового self-hosted extraction comparison добавьте актуальный Qwen3.8-27B или меньшие Qwen3.5 checkpoints. Используйте их documented model loader, chat template и serving backend; одна лишь замена строки ниже не доказывает compatibility с multimodal architecture или её reasoning format.
import outlines
from transformers import AutoModelForCausalLM, AutoTokenizer
from pydantic import BaseModel
from typing import Literal
class Entity(BaseModel):
name: str
label: Literal["PERSON", "ORGANIZATION", "LOCATION"]
class ExtractEntities(BaseModel):
entities: list[Entity]
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 полезен, когда generated field должен быть grounded in source: он возвращает character intervals и поддерживает hosted или local LLM backends. Для self-hosted document extraction NuExtract преобразует JSON schemas в templates и включает multimodal document models. Рассматривайте оба инструмента как structured-extraction systems, а не как автоматическую замену span NER. Их targets по fields, offsets, document layout и latency требуют собственных tests.
Выбор зависит от того, где запускаются models. Native schemas — путь с наименьшим friction для поддерживаемого provider. Instructor добавляет provider-agnostic Pydantic validation и retry layer. Outlines ограничивает local generation заданной schema. LangExtract ставит в приоритет source grounding, а NuExtract ориентирован на self-hosted document extraction. Все LLM paths по-прежнему включают autoregressive generation. Benchmark’ьте каждый path вместе с encoder на одинаковых batch size, hardware, entity schema и rubric semantic accuracy.
Three-tier production architecture
Я бы направлял production NER по форме task, а не по единому ranking models.
Tier 1: encoder models для explicit spans. Используйте GLiNER cross-encoder для небольшого inventory типов. При большом переиспользуемом inventory сравните bi-encoder с cached type embeddings. Выполните fine-tuning через LLM-as-teacher pipeline, а затем deploy через native serving, ONNX, INT8 или gline-rs только после прохождения domain benchmark.
Tier 2: multi-task или relation extraction. Если одному request нужны NER, classification и hierarchical fields, протестируйте текущий GLiNER2.5 с 194M parameters против отдельных per-task baselines. Если центральное требование — joint spans плюс relations, протестируйте GLiNER-Relex. В статье GLiNER2 сообщается CPU classification latency 130–208 мс для протестированных label counts; это не evidence для более позднего relation API или другой deployment setup.
Tier 3: LLMs для reasoning-heavy extraction. Направляйте implicit entities, contextual inference и ontology mapping в native schema API или Instructor для cloud APIs, а в Outlines — для local constrained output. Используйте LangExtract, когда source intervals критичны, и NuExtract, когда input — сам document. Логируйте эти cases для review. Только explicit source-aligned spans могут стать обычными Tier 1 training targets; inferred facts и normalized values требуют собственных targets и evaluation.
CFM case study даёт один cost reference для Tier 1: 93.4% F1 при заявленных $0.10 в час на CPU против 92.7% F1 и $8 в час у Llama-70B teacher. Hourly instance prices не определяют cost per document без throughput. Пересчитайте его с вашим hardware, teacher model, label set, utilization и review cost.
Trade-offs и ограничения
Для каждого trade-off ниже полезно спросить, где он проявляется и можете ли вы измерить его до deployment.
LLM-as-teacher errors распространяются дальше. Если LLM систематически ошибается в конкретном entity type (например, путает названия subsidiaries и parent companies), fine-tuned encoder унаследует этот bias. Тщательно проверяйте low-confidence или inconsistent types и сохраняйте stratified random sample для обнаружения уверенных systematic errors.
Valid schema может содержать false facts. Native structured output, Instructor и constrained decoders могут сделать response parseable. Но они не гарантируют, что каждое field grounded, span boundary корректна или normalized value сопоставлено с правильной записью. Сохраняйте source evidence и отдельно валидируйте semantics.
Quantization losses зависят от checkpoint и data. Companion создаёт dynamically quantized INT8 artifact, но не измеряет его F1. Текущие рекомендации GLiNER предлагают quantization-aware training, когда необходимо сохранить INT8 accuracy. Перед deployment сравните quantized и original checkpoints по exact-span F1 и per-label recall.
Когда three-tier architecture избыточна. Одному domain со стабильными entity types и достаточным количеством labeled examples может быть достаточно fine-tuned RoBERTa или spaCy pipeline. Three-tier pattern подходит для нескольких domains, меняющихся entity types или измеряемого mix explicit и reasoning-heavy extraction. Узкий invoice pipeline, извлекающий names и dates, может остановиться на Tier 1.
Bi-encoder quality зависит от dataset. Joint encoding может помогать на одних datasets, тогда как bi-encoder выигрывает paper comparison на CrossNER, а uni-encoder немного превосходит его на CoNLL-2003. Benchmark’ьте оба на domain set; выбирайте по измеренным exact-span quality, calibration, label count и throughput, а не используйте “high stakes” как правило выбора model family.
PII и multilingual claims требуют slices. Высокий aggregate score может скрывать опасное снижение recall для locale, name form, document layout или редкого PII class. Рассматривайте privacy model как один из defense-in-depth controls, задайте response process для false negatives и проводите повторную evaluation при изменении taxonomy, language mix или data source.
Основные выводы
- Используйте compact encoder для explicit spans только после прохождения domain test set с per-type support и confidence intervals.
- Используйте GLiNER для меняющихся label vocabularies. Сначала сравните его bi-encoder, когда большой inventory типов переиспользуется; включайте
flat_ner=Falseтолько после измерения nested-span quality. - Для hard zero-shot claims используйте проверенные type descriptions, а для multilingual products отдельно тестируйте English и localized label wording.
- Сохраняйте OCR, NER, relation extraction и entity linking отдельными evaluation stages, даже если одна model предоставляет несколько tasks.
- Рассматривайте LLM teacher как систему предложений для annotation. Human guidelines, adjudication, immutable regression sets и held-out test set по-прежнему обязательны.
- Используйте native schemas для поддерживаемых LLM providers, но валидируйте semantic correctness и source grounding отдельно от JSON validity.
- Отдельно и совместно benchmark’ьте native serving, ONNX, quantization и Rust paths. Никогда не перемножайте speedups, которые не были измерены.
References
Papers
- GLiNER: Generalist Model for Named Entity Recognition using Bidirectional Transformer — Zaratiana et al., NAACL 2024. Базовая span-entity matching architecture.
- GLiNER2: An Efficient Multi-Task Information Extraction System with Schema-Driven Interface — Zaratiana et al., EMNLP 2025 System Demonstrations. Объединяет NER, classification и hierarchical extraction; в текущих releases позже добавлена relation extraction.
- GLiNER Bi-Encoder: Scalable Named Entity Recognition with Bi-Encoder Architecture — Stepanov et al., February 2026. Decoupled encoding для million-label scale.
- GLiNER-Relex: A Unified Framework for Joint Named Entity Recognition and Relation Extraction — Stepanov et al., 2026. Joint, zero-shot entity и relation extraction.
- GLiNER2-PII: A Multilingual Model for Personally Identifiable Information Extraction — Zaratiana et al., 2026. 42 PII types на уровне character spans.
- ZeroNER: Fueling Zero-Shot Named Entity Recognition via Entity Type Descriptions — Cocchieri et al., ACL 2025. Hard zero-shot evaluation с type descriptions.
- OpenNER 1.0: Standardized Open-Access Named Entity Recognition Datasets in 50+ Languages — Palen-Michel et al., EMNLP 2025. 36 corpora, 52 languages и multi-ontology baselines.
- FiNERweb: Datasets and Artifacts for Scalable Multilingual Named Entity Recognition — Golde et al., EACL 2026. Multilingual labels и transfer evaluation.
- UniversalNER: Targeted Distillation from Large Language Models for Open Named Entity Recognition — Zhou et al., ICLR 2024. Universal NER на базе LLM с distillation от ChatGPT.
- NuNER: Entity Recognition Encoder Pre-training via LLM-Annotated Data — Bogdanov et al., EMNLP 2024. Исследует 125M encoder, pretrained на LLM annotations.
Industry papers
- EAMT: Entity-Aware Multi-Task Learning for Query Understanding — Walmart, KDD 2023. Multitask query study; online result относится к его MTDNN baseline.
- TripleLearn: End-to-End NER for E-Commerce Search — Home Depot, AAAI 2021. F1 с 69.5 до 93.3.
- Acing the IOC Game: Toward Automatic Discovery and Analysis of Open-Source Cyber Threat Intelligence — Liao et al., CCS 2016. Historical extraction approach.
- CyberNER: A Harmonized STIX Corpus for Cybersecurity NER — 21 STIX 2.1-aligned entity types.
- FinBERT-MRC: Financial NER via Machine Reading Comprehension — MRC formulation на Chinese financial datasets.
Case studies
- CFM Case Study: Fine-tuning GLiNER for Financial NER — $70 LLM labeling pipeline Capital Fund Management с результатом 93.4% F1.
- Refuel AI: LLM Labeling Technical Report — GPT-4 достиг 88.4% annotation agreement, превысив human annotators.
- Sease: GLiNER as an Alternative to LLMs for Query Parsing — Где GLiNER ошибается и где LLMs по-прежнему нужны.
- John Snow Labs: Medical Text De-Identification Benchmark — Vendor study с label remapping и exclusions.
- OpenMed: Year in Review 2025 — January 2026 retrospective; inventory и downloads не являются deployments.
Tools and frameworks
- ner-field-guide demo repo — Companion demos для этой статьи: GLiNER quickstart, ONNX export, LLM-as-teacher и structured extraction.
- gline-rs: Rust reimplementation of GLiNER — Отдельные CPU и GPU experiments maintainer; code под Apache 2.0.
- GLiNER serving — Ray Serve path с dynamic batching и multi-replica deployment.
- spaCy English pipelines — Versioned closed-label pipeline metrics.
- Microsoft Presidio — PII analysis и anonymization с custom recognizers.
- Instructor — Structured LLM extraction через Pydantic models.
- Outlines — Constrained token generation через FSMs с сообщённым benchmark schema adherence.
- LangExtract — Source-grounded structured extraction с character intervals.
- NuExtract — Self-hosted schema-to-template document extraction.
- OpenAI Structured Outputs — Reference для strict JSON Schema response format.
- Anthropic Structured Outputs — JSON outputs и strict tool inputs.
- Gemini Structured Outputs — JSON Schema subset для structured responses.
- AWS: Structured Output with Outlines — Benchmark schema adherence 98%.