[!NOTE] Автоматический перевод Эта статья была автоматически переведена с оригинальной английской версии.

Полное руководство по NER в 2026 году: кодировщики, LLMs и трехуровневая архитектура производства

Распознавание именованных сущностей (NER) в настоящее время осуществляется с помощью компактных кодеров спаны, методов с открытым словарём модели и техник извлечения, основанных на LLM. Согласно результатам исследования CrossNER, модель GLiNER с 300 миллионами параметров модель показывает более высокий показатель F1 в режиме без предварительной обучения, чем модель UniNER объёмом 13 миллиардов параметров. Более современный двойной кодер достигает в 130 раз большего уровня throughput, чем первоначальный кросс-кодер, обрабатывая 1 024 типа сущностей. Эти результаты подтверждают эффективную практику явного извлечения спан: сначала используется LLM для маркировки данных конкретной области, затем анализируются примеры, дорабатывается компактный кодер, и в итоге он внедряется с использованием ONNX или языка Rust.

В сопутствующем репозитории представлены запускаемые примеры для GLiNER, экспорта ONNX, обучающих меток, генерируемых с помощью LLM, а также для структурированной выделения информации. Для задач, в которых доминируют явные спаны, компактные кодировщики обеспечивают высокую латентность эффективность при одновременно низких затратах. LLMs по-прежнему остаются полезными инструментами для создания обучающих данных и обработки случаев, требующих инференс или нормализации.

Сопутствующий репозиторий: ner-руководство по полям, с запускаемыми демонстрациями для GLiNER, экспорта ONNX, роли LLM-как-учителя пайплайн, а также структурированного извлечения с использованием Instructor.

Кратко: начните с GLiNER, когда вам требуется извлечение информации из открытого словаря спан и выполнение операций CPU деплой. Для задач специфических для определённой области протестируйте подход LLM-as-teacher пайплайн: сгенерируйте метки, проанализируйте примеры, отрегулируйте работу кодера и оцените его на наборе данных с ручными метками. Передачу имплицитных сущностей, картографирование онтологий и другие случаи, требующие активного использования ризонинг, направляйте через Instructor или Outlines к LLM. Трёхуровневая архитектура объединяет все эти пути, не предполагая фиксированного распределения нагрузки между ними.


Где применяются современные системы с NER

NER по‑прежнему находит фрагменты текста спаны и присваивает им метки. Изменилось лишь его положение в системе: теперь он предоставляет фильтры для RAG, структурированные аргументы для инструментов агентов, а также поля, необходимые для обработки документов с использованием пайплайны. Благодаря этим возможностям параметры латентность, затраты на реализацию и гибкость схемы становятся настолько же важными, как и точность бенчмарк.

RAG: улучшение качества retrieval с помощью извлечения сущностей

Одного только поиска по сходству недостаточно в тех случаях, когда в запросе присутствуют точные указания на конкретные сущности. В вопросе «Что сказала компания Anthropic о безопасности модель в 4‑м квартале 2024 года?» системе следует извлекать «Anthropic» и «4‑й квартал 2024 года» в качестве фильтров метаданных, вместо того чтобы опираться исключительно на эмбеддинги.

Во время индексации вы извлекаете сущности из каждого чанк и сохраняете их в качестве метаданных: {"organizations": ["Anthropic"], "dates": ["Q4 2024"], ...}. Это позволяет фильтровать сущности до выполнения vector search. Граф знаний RAG (GraphRAG, графы свойств LlamaIndex) идёт ещё дальше: благодаря NER в сочетании с извлечением отношений формируется граф, способный отвечать на многоэтапные вопросы, с которыми не справляются простые эмбеддинги.

Во время обработки запроса сущности, извлечённые из вопроса пользователя, определяют направление работы роутинг. Запрос, содержащий название компании, направляется в финансовый индекс; запрос с упоминанием названий лекарств — в клиническую базу знаний. GLiNER отлично справляется с такой задачей, поскольку сущности запросов являются непредсказуемыми — невозможно переобучать модель для каждого нового типа сущностей, о которых могут спросить пользователи.

ИИ-агенты: преобразование текста в структурированные факты

Агенты получают неструктурированный текст — веб-страницы, ответы API, сообщения пользователей — и должны принимать по нему действия. NER преобразует этот текст в структурированные факты, с помощью которых агент может осуществлять логические выводы, хранить информацию или передавать её во внешние инструменты.

Два аспекта, имеющих наибольшее значение.

Первым инструментом является роутинг. Когда пользователь говорит: «Запланируйте встречу с Сарой Чен из Accenture на четверг в 14:00», агенту необходимо извлечь PERSON: Sarah Chen, ORGANIZATION: Accenture, и DATETIME: Thursday 2pm до вызова календаря API. Кодировщик NER модель выполняет эту операцию за менее чем 10 мс. LLM добавляет 1–2 секунды на каждый вызов, и эта задержка накапливается в многоэтапных рабочих процессах до тех пор, пока агент, который раньше казался «мгновенным», перестает им быть.

Вторая задача заключается в отслеживании сущностей на протяжении всего диалога. Системам памяти агентов необходимо понимать, что «Сара» из третьего разговорного этапа и «г-жа Чен» из двенадцатого — это один и тот же человек. NER используется для идентификации спаны; механизм связывания сущностей приводит к присвоению им одного и того же идентификатора.

В обоих случаях ограничением является латентность. Вызов NER продолжительностью 200 мс внутри цепочки агентов из 10 шагов приводит к появлению эффекта задержки в 2 секунды. Именно поэтому для обработки сущностей внутри циклов агентов более подходящим решением является использование кодера модели, а не методов извлечения, основанных на LLM.

Интеллект документов: от изображений к структурированным данным

OCR преобразует изображения в текст. NER преобразует текст в структурированные поля. Вместе они обеспечивают масштабную дигитализацию документов.

Стандартный пайплайн сначала использует OCR, такие как Tesseract, Azure Document Intelligence или AWS Textract, для генерации текста и областей ограничения. Затем NER извлекает такие поля, как invoice_number, vendor_name, line_items, total, и due_date. Тот же принцип применяется к контрактам, медицинской документации и заявкам на регуляторное утверждение.

Современные платформы объединяют три этапа: понимание структуры (является ли это заголовком или ячейкой таблицы?), извлечение сущностей (какого типа этот текст?) и извлечение связей (какие значения находятся между собой?). GLiNER 2 обрабатывает все три аспекта за один проход; один вызов модель может вернуть {vendor: "Acme Corp", amount: "\$4,200", due_date: "2026-04-15"} из счёта-фактуры.

Именно здесь критически важна стоимость. Определяйте цену для пайплайн исходя из фактического ежемесячного объёма документов, включая попытки повторной обработки и этапы проверки. Компактный кодер может работать на CPU, тогда как решение, основанное на API и использующее LLM, приводит к дополнительным расходам в размере инференс за каждый документ, а также к возникновению затрат типа латентность. Практический способ тестирования — пометить выборку инвойсов меткой LLM, отточить модель GLiNER на проанализированных данных и сравнить результаты обоих подходов с точки зрения значений поля F1, латентность, а также общей стоимости.

Обнаружение PII и LLM гардрейлы

Положения о защите персональных данных (GDPR, HIPAA, CCPA) требуют выявления персональных данных до того, как они попадут в системы нижнего уровня. В контексте LLM деплои это означает сканирование входных данных до их поступления в модель, а также сканирование выходных данных перед тем, как они становятся доступными для пользователя.

NER обрабатывает это напрямую. Процесс деидентификации модели выполняется автоматически. PERSON, SSN, PHONE, EMAIL, и ADDRESS спаны — их следует либо замаскировать, либо заменить на синтетические аналоги. В ходе сравнения самых популярных провайдеров John Snow Labs публикует отчёты 96% F1 при обнаружении PHI по сравнению с Azure на уровне 91%, AWS — 83%, а GPT-4o — 79%. В отдельном отчёте деплой указано, что Providence обрабатывает более 100 000 клинических записей в день.

Для LLM гардрейлы NER выполняет роль уровня предварительной проверки: он сканирует ввод пользователя на наличие ПДн перед отправкой его во внешний API, после чего блокирует такую информацию или анонимизирует её. Такой подход быстрее и проще, чем просить LLM обеспечивать саморегулирование. GLiNER особенно полезен в этом случае, поскольку категории ПДн различаются в зависимости от юрисдикции. Можно добавлять новые типы сущностей, например «генетическую информацию», согласно новым нормативам, без необходимости перенастройки модели.


GLiNER изменяет экономические модели NER с использованием модель на 300 миллионов параметров

GLiNER (NAACL 2024, Zaratiana et al.) сделал методы, основанные на энкодере и использующие NER, конкурентоспособными по отношению к LLMs при значительно меньших затратах. Вместо того чтобы рассматривать задачу NER как маркировку последовательностей или генерацию текста, GLiNER подходит к ней как к задаче сопоставления: он оценивает каждый возможный вариант текста спан (каждую непрерывную последовательность слов, такую как «Bill Gates» или «Microsoft») по отношению ко всем возможным меткам типов сущностей, после чего сохраняет пары с наивысшими баллами.

модель принимает метки типов сущностей и входной текст в виде единой последовательности: [ENT] person [ENT] organization [ENT] date [SEP] Bill Gates founded Microsoft.... Двунаправленный трансформер (DeBERTa-v3) обрабатывает всю информацию совместно.

В результате обработки модель формируются два набора представлений: один для типов сущностей (из [ENT] токен позиции) и один для текста спаны (путем объединения начала и конца) токен векторов через небольшую FFN). Скалярное произведение между одним спан Представление и представление типа сущности присваивают соответствующий балл.

Применение функции сигмоиды позволяет получить вероятность того, что спан от токен ii до токен jj относится к типу сущности tt: ϕ(i,j,t)=σ(SijTqt)\phi(i, j, t) = \sigma(S_{ij}^T \cdot q_t), где SijS_{ij} — это спан-вектор, сгенерированный FFN, а qtq_t представляет собой эмбеддинг тип сущности из соответствующего [ENT] токен (Заратиана и др., 2024, Равенство 1). Значения Спаны ограничиваются значением 12 токены, что позволяет сохранять высокую скорость обработки.

Архитектура GLiNER: типы сущностей токены и текст токены кодируются совместно с помощью модели DeBERTa, после чего оценки представлений спан вычисляются посредством скалярного произведения относительно типа сущности эмбеддинги.

На практике это означает, что любое описание на естественном языке может служить меткой в момент инференс без необходимости переобучения. Вы указываете любые типы сущностей, которые нужны («человек», «побочная реакция на лекарство», «финансовый инструмент»), и модель модель вычисляет для них спаны. Доступны три версии: GLiNER-S (50 млн параметров), GLiNER-M (90 млн) и GLiNER-L (300 млн). Данные для обучения взяты из Pile-NER датасет: 44 889 текстовых фрагментов с 240 тыс. сущностных спаны в 13 тыс. типов сущностей, все из которых промаркированы ChatGPT. Обучение GLiNER-L занимает примерно 4 часа на одной карте A100.Заратиана и др., 2024).

Результаты Бенчмарк

Результаты работы в режиме «зеро-шот» от Заратиана и др. (2024), Таблицы 1 и 2:

МодельПараметрыКоэффициент F1 для модели CrossNERСреднее значение (20 датасеты)
GLiNER-L300 млн60.9%47.8%
GoLLIE7B58.0%
UniNER-13B13 млрд55.6%
GLiNER-M90 млн55.4%
UniNER-7B7B53.7%45.7%
GLiNER-S50 млн52.7%
ChatGPT (GPT-3.5)47.5%36.5%

Модель GLiNER-M с 90 миллионами параметров почти сопоставима с UniNER-13B по данным таблицы CrossNER в статье (55,4% против 55,6% по показателю F1), при этом используя примерно в 140 раз меньше параметров. Версия GLiNER-S с 50 миллионами параметров превосходит показатели ChatGPT (GPT-3.5), указанные в исследовании, на 5 единиц F1. Мультиязычная версия, обученная исключительно на английских данных, также превосходит базовый уровень ChatGPT в 8 из 10 языков, отличных от английского.Заратиана и др., 2024). В ходе этих сравнений используются версии модель из статьи и методы оценки харнесс; при этом не проводится ранжирование по сравнению с более новыми LLMs.

Эта экосистема довольно обширна: на платформе HuggingFace существует более 280 компонентов, совместимых с GLiNER модели, ежемесячно происходит около 350 000 загрузок из PyPI, а количество звёзд на странице в GitHub составляет примерно 2 800. Существуют варианты этого инструмента, предназначенные для обработки биомедицинских текстов, выявления персональных данных, анализа новостей и поддержки многоязычия.

Из 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']} ({entity['score']:.3f})")
# Bill Gates => person (0.987)
# Microsoft => organization (0.991)
# April 4, 1975 => date (0.974)

Как GLiNER сравнивается со spaCy

Любой руководство NER будет неполным без использования spaCyОколо 21 млн загрузок в месяц, и одна из самых надёжных библиотек NLP в продакшене. Однако она работает в условиях совершенно иных архитектурных ограничений по сравнению с GLiNER.

пайплайны в spaCy (en_core_web_sm, en_core_web_trf) выполняется закрытый словарь NER: фиксированный набор типов сущностей (PERSON, ORG, GPE, DATE и т. д.), определяемый во время обучения. Нужен новый тип сущности? Соберите маркированные данные и переобучите модель. Реализуется с использованием архитектуры на основе трансформеров en_core_web_trf количества запросов 89,8% показатель F1 в OntoNotes 5.0, но только для его 18 заранее определённых типов.

GLiNER поддерживает открытый словарь NER**: любая метка подойдёт** инференс Время обработки минимально, дополнительная переобучение не требуется. Именно поэтому этот подход является более предпочтительным в ситуациях, когда типы сущностей неизвестны заранее, часто меняются или имеют специфику конкретной области («побочная реакция лекарства», «финансовый инструмент», «индикатор угрозы»).

Мой совет: используйте spaCy для стандартных типов сущностей, поскольку заранее обученные модели пайплайны прошли строгую проверку качества. Применяйте GLiNER, когда требуется гибкость работы с типами сущностей без предварительного обучения, или в тех случаях, когда ваш пайплайн должен адаптироваться без необходимости повторного обучения. Оба инструмента могут использовать общий пайплайн: spaCy отвечает за обработку токенизация и разбиение предложений, а GLiNER — за извлечение сущностей.


UniNER и NuNER: насколько маленьким может быть модель?

UniNER (ICLR 2024, Zhou et al.) и NuNER (EMNLP 2024, Bogdanov et al.) оба преобразуют аннотации LLM в более компактные NER модели — однако они расходятся во мнениях относительно того, насколько маленькими они могут быть.

UniNER: путь максималистов

UniNER проходит финтунинг на базе LLaMA-7B/13B с использованием 44,889 NER пар (240 тыс. сущностей и 13 тыс. типов), сгенерированных ChatGPT. Для каждого типа сущности модель формулирует вопрос «Что описывает [тип] в тексте?» и генерирует списки JSON. Одним из ключевых приёмов обучения является отрицательное выборка на основе частоты, которая позволяет повысить показатель F1 с 31,5% до 53,4%.Чжоу и др., 2024).

UniNER-7B показывает показатель 41,7% F1 в режиме zero-shot на 43 датасеты — что на 7 пунктов выше, чем у ChatGPT с его 34,9%. Вариант объёмом 13 миллиардов параметров достигает значения 43,4%, превышая предыдущий результат всего на 1,7 пункта при почти вдвое больших вычислительных затратах.Чжоу и др., 2024).

Проблемы в промышленном использовании: в качестве 7B-модели с авторегрессивным подходом модель, UniNER требует выполнения N передовых проходов для обработки N типов сущностей, потребляет 14 ГБ и более VRAM (что означает полное исчерпание установленного лимита GPU ещё до обеда), к тому же распространяется под строгой лицензией CC BY-NC 4.0.

NuNER: минималистичный подход

NuNER начинается с модели RoBERTa-base (125 млн параметров) и использует метод контрастного обучения с 4,38 миллиона аннотаций GPT-3.5, охватывающих 200 тысяч концепций — общая стоимость аннотаций составляет менее $500. После завершения обучения кодер концепций удаляется; кодер текста заменяет любой стандартный NER пайплайн в качестве аналога RoBERTa.Богданов и др., 2024).

Результаты тестирования: NuNER превосходит обычную версию RoBERTa на 6–15 пунктов по метрике F1 при любом количестве примеров в формате few-shot. При использовании всего десяти–двенадцати примеров на каждый тип сущности NuNER демонстрирует показатели, сопоставимые с UniNER-7B, несмотря на то, что его размер в 56 раз меньше.Богданов и др., 2024).

Обе статьи поддерживают процесс дистилляции. LLM аннотации с разбиением на более мелкие NER модели. NuNER демонстрирует, что энкодер с 125 миллионами параметров способен достичь таких же результатов, как и UniNER-7B в специфических задачах, как это отмечалось в исследованиях. файн-тюнинг Данные доступны под лицензией MIT. CPUдружелюбный к использованию инференс.


GLiNER 2: один модель, четыре задачи

Изначальная экосистема GLiNER сталкивалась с растущей проблемой: наличием отдельных модулей модели для NER (GLiNER), извлечения связей (GLiREL), классификации (GLiClass) и обработки информации на уровне документов (GLiDRE) — каждый из которых требовал собственного деплой, контейнера Docker, системы мониторинга и механизмов обработки сбоев. В версии GLiNER 2 (EMNLP 2025, Zaratiana et al.) все эти компоненты объединены в один модель с 205 миллионами параметров модель, использующий интерфейс, основанный на схемах.

В данной архитектуре сохраняется дизайн кросс-энкодера, однако объём контекста увеличивается до 2,048 токены (в 4 раза по сравнению с исходной версией), к тому же добавляются декларативные схемы для определения задач извлечения информации. Для обучения используются 135,698 реальных документов, аннотированных с помощью GPT-4o, а также 118,636 синтетических примеров.Заратиана и др., 2025).

При решении задачи CrossNER в режиме zero-shot модель GLiNER 2 показывает показатель F1 0.590, что близко к значению 0.599, достигнутому моделью GPT-4o в исследовании за середину 2025 года бенчмарк. В задачах классификации её средний результат составляет 0.72 при обработке 7 бенчмарки, тогда как у DeBERTa-v3-large этот показатель — 0.69. Что касается CPU, то в работе указано, что время выполнения операций классификации составляет от 130 до 208 мс для различного количества тестированных меток латентность. У базовой модели DeBERTa это время растёт с 1 714 мс при 5 метках до 16 897 мс при 50 метках.Заратиана и др., 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"))
results = extractor.extract(text, schema)

В тех случаях, когда приложению требуются все четыре операции, общий модель может заменить четыре отдельных деплои, сохраняя при этом уровень точности, указанный в исходной работе.


Би-энкодер: масштабирование до миллионов меток NER

Исходная версия GLiNER кодирует метки и текст одновременно — в результате формируется боттлнек. Увеличение количества типов сущностей приводит к удлинению входной последовательности, а производительность резко снижается при более чем ~30 типах. Би-кодер GLiNER (февраль 2026 г., Stepanov и др.; arXiv 2602.18487) решает эту проблему путём разделения процессов кодирования текста и меток на два отдельных трансформера.

Кросс-энкодер против би-энкодера: кросс-энкодер одновременно кодирует метки и текст, тогда как би-энкодер использует отдельные энкодеры для предварительно вычисленных меток эмбеддинги

Энкодер текста использует ModernBERT (семейство Ettin), а энкодер меток — модели типа sentence transformers (BGE или MiniLM). Оценка Спаны и меток осуществляется с помощью скалярного произведения. Секрет заключается в том, что типы сущностей эмбеддинги можно предварительно вычислить один раз и сохранить в кэше. На этапе инференс требуется кодировать только текст — поиск соответствующих меток происходит мгновенно.

Доступны четыре размера модель, все из которых протестированы на платформе CrossNER.Степанов и др., 2026, Таблица 1):

МодельПараметрыКоэффициент F1 для модели CrossNERThroughput (H100)С предвычисленными метками
bi-edge-v2.060 млн54.0%13,64 экс/с24,62 экс/с
bi-small-v2.0108 млн57.2%7,99 экз/сек15,22 экс/с
bi-base-v2.0194 млн60.3%5,91 экс/с9,51 экс/с
bi-large-v2.0530 млн61.5%2,68 экс/с3,60 экс/с

При 1 024 типах сущностей би-энкодер (с использованием граничных узлов и предварительно вычисленных данных) теряет всего 5,2% throughput по сравнению с одной меткой. Кросс-энкодер же теряет 98,7% производительности (от 10,7 до 0,14 эксп/с). Это дает в 130 раз throughput большее преимущество при масштабировании. При наличии 100 типов сущностей на одном устройстве H100 би-энкодер обрабатывает 1,96 миллиона прогнозов в день, тогда как кросс-энкодер — лишь 368 тыс.Степанов и др., 2026).

Точность также остаётся на высоком уровне. Модель Bi-encoder-large достигает показателя 61,5% по метрике CrossNER F1, что немного превышает значение 60,9% у обычных кросс-энкодеров. Авторы рекомендуют использовать bi-base-v2.0 (194M) как оптимальный вариант — он обеспечивает 98% от точности больших моделей модель при скорости обработки, в 2,6 раза превышающей скорость последних.Степанов и др., 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 (более 4 млн концептов), корпоративные таксономии, которые обновляются без необходимости повторной подготовки моделей с использованием модель, а также связывание сущностей с помощью сопутствующего инструмента. GLiNKER фреймворк.


LLMs в качестве учебных примеров: исследование случая стоимостью 70 долларов и готовый к развертыванию пайплайн

Паттерн LLM-as-teacher позволяет разделять дорогостоящую аннотацию от более дешёвых инференс. Два опубликованных кейс-стади разъясняют, как команды применяли этот подход в различных условиях.

Механизм LLM в роли учителя пайплайн: метки LLM используются для обозначения сырых данных, человек проверяет лишь их подмножество, после чего кодер проходит финтунинг и развертывается при стоимости, в 80 раз ниже первоначальной.

Исследование случая использования 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, тогда как у модели Llama-70B в качестве учителя этот показатель составил 92,7%. Авторы указывают, что стоимость инференса для настроенной модель составляет $0,10 в час на CPU, в то время как для оригинальной учебной модели — $8 в час.Пример разработки в рамках проекта CFM). Эти примеры описывают одну задачу обработки финансовых новостей и одну конфигурацию инфраструктуры.

Исследование процесса дозаправки AI

Проводится дополнительная обработка технического отчета AI с использованием меток бенчмарки LLM в рамках 8 задач NLP датасеты, включая CoNLL-2003. В отчете указано, что точность совпадения для модели GPT-4 (март 2023 г.) составляет 88,4% по сравнению с эталонными данными, тогда как точность работы человеческих аннотаторов — 86,2%; кроме того, такой подход позволяет ускорить процесс аннотации в 20 раз и снизить его стоимость в 7 раз. Метод конвейера направляет простые примеры на более дешевые модели ресурсы, а сложные — на GPT-4, что в результате экспериментов обеспечивает более 95% точности совпадения.Пересборка технического отчета AI). Рассматривайте их как результаты, предоставленные поставщиком в соответствии с протоколом аннотации данного исследования.

Продакшн-среда пайплайн

Практический производственный пайплайн включает шесть этапов:

  1. Сформулируйте руководство по аннотации на естественном языке.
  2. Создайте небольшой набор данных с метками от людей (от 50 до 200 документов).
  3. Используйте LLM (GPT-5.4 Mini, Llama 4 Maverick или Qwen3.5) для маркировки больших объёмов обучающих данных.
  4. Проверьте подмножество данных вручную. глина или Label Studio
  5. Тонкая настройка компактного кодера (GLiNER, Маркер области, RoBERTa)
  6. Развертывание по цене на уровне 16–80 раз ниже инференс

LLM позволяет сократить объём ручной аннотации, однако команда по‑прежнему контролирует набор данных для верификации, руководства по аннотированию, процедуры целенаправленного рассмотрения и анализ ошибок.


Где GLiNER терпит неудачу, а LLMs остаётся полезным

Этот Sease бенчмарк (Октябрь 2025 г.) была проведена тестирование GLiNER против GPT-4.1-mini на 30 задачах анализа запросов. GPT-4.1-mini дал 100% полностью правильных ответов. GLiNER показал результат 53% (16 из 30). Однако время реакции GLiNER составило 0,08 секунды, в то время как у LLM оно было 1,21 секунды — что в 15 раз быстрее.

В этом тесте из 30 заданий бенчмарк модель GLiNER демонстрировала сбои в трёх типичных паттернах:

  1. Косвенные сущности: извлечение «события» из фразы «Elton John performed at Madison Square Garden» — в тексте прямо не указано слово «событие», но LLM позволяет заключить, что речь идёт о «концерте».
  2. Чувствительность формулировок меток: значение для «2022» составляет 0.388 при использовании метки «date», тогда как при использовании метки «year» оно достигает 0.958 — незначительные изменения меток приводят к значительным колебаниям результатов.
  3. Сопоставление значений: модель GLiNER возвращает точный исходный текст («family houses») вместо канонического значения («Single family house»). LLM может осуществить такую нормализацию, если его промпт и схема определяют требуемые значения.

Вложенные и перекрывающиеся сущности

GLiNER также испытывает трудности с вложенными сущностями. В выражении «New York University» человек может пометить как «New York» (МЕСТОПОЛОЖЕНИЕ), так и «New York University» (ОРГАНИЗАЦИЯ). GLiNER выбирает только ту сущность с наивысшей оценкой, соответствующую спан. Это имеет большое значение в биомедицинских текстах (например, в выражении «acute myeloid leukemia» одновременно присутствуют название заболевания и его модификатор) и в юридических документах (где встречаются вложенные иерархии организаций). Для обработки подобных случаев существуют специализированные модели, однако плоская структура спан, характерная для GLiNER, не позволяет справиться с вложенностью.

Для явной экстракции сущностей используйте модель GLiNER, а случаи, требующие обработки инференс, ризонинг или маппинга в заранее определённые онтологии, направляйте на модуль LLM. Пороговое значение роутинг должно определяться на основе наклассифицированного набора данных из конкретной области применения.


Оценка NER: метрики, подводные камни и наборы тестовых данных

модель может достигать значения F1 в 95% на специально подобранном наборе тестов, но при этом терпеть неудачу при обработке документов различных типов, с которыми он сталкивается после деплой. Необходимо формировать набор для оценки на основе реальных данных из продакшена, сохраняя отдельные группы документов редких форматов и типов сущностей, поскольку агрегированные показатели F1 могут скрывать их реальную эффективность.

Основные метрики

Распространённые ошибки оценки

  1. Инфляция частичного совпадения: извлекается термин «Bill», когда на источном тексте указано «Bill Gates» — некоторые скрипты считают такой случай частичным совпадением. Используйте точное совпадение спан, если только у вас нет причин этого не делать.
  2. Путаница типов: термин «Microsoft» правильно идентифицируется как спан, однако если он помечается как PERSON вместо ORG, его оценка должна быть равна нулю. Проверьте, корректно ли ваш код оценки учитывает этот случай.
  3. Утечка данных из тестового набора: если элементы тестового набора пересекаются с элементами обучающего набора, оценки становятся завышенными. Для проверки способности модели к обобщению существуют методы zero-shot бенчмарки (CrossNER, Few-NERD).

Создание тестового набора для доменов

Для оценки в производственных условиях я рекомендую:

  1. Образцы должны браться из реальных данных производства, а не из специально подобранных примеров. Необходимо включать «грязные» документы, с которыми фактически будет сталкиваться ваш модель.
  2. Для получения стабильных значений метрики F1 достаточно 200–500 аннотированных документов. При их количестве менее 100 диапазоны доверия оказываются слишком широкими.
  3. Минимальное количество аннотаторов — два, причём уровень согласованности между ними должен соответствовать критерию Коэна (Kappa > 0.8). Если люди приходят к разным выводам, ваш модель не сможет показать лучшие результаты.
  4. Производите стратификацию по уровню сложности — от простых случаев (чистый текст, стандартные типы) до сложных (неоднозначные сущности, специализированный жаргон, «шумный» текст).

Продакшн NER в четырёх отраслях

Вот наиболее зрелые реализации NER деплои, которые мне удалось найти, с указанием конкретных цифр.

Здравоохранение

Сфера здравоохранения обладает наиболее развитым набором инструментов NER. Компания John Snow Labs предоставляет более 2 500 заранее обученных модели, из которых более 1 200 предназначены для использования в медицине; эти модели охватывают более 400 типов клинических сущностей, соответствующих стандартам ICD-10, SNOMED CT, LOINC и RxNorm. В портфеле компании… сравнение поставщиков, уровень деидентификации модели достиг 96% по метрике F1, тогда как у Azure он составил 91%, у AWS — 83%, а у GPT-4o — 79%. В отдельном кейс-стади сообщается Организация Providence St. Joseph Health обрабатывает от 100 000 до 500 000 клинических записей ежедневно.

В своем обзоре проектов за 2025 год этот проект с открытым исходным кодом Проект OpenMed Система фиксирует более 380 научных публикаций в области биомедицины NER модели, 29,7 миллиона загрузок Hugging Face, а также лидирующие позиции среди результатов по 10 из 12 открытых биомедицинских баз данных бенчмарки.

Финансовый NER

Основной сценарий применения: извлечение данных из документов, подаваемых в SEC. Система Finance NLP от John Snow Labs позволяет выявлять более 11 типов сущностей в документах формата 10-K/10-Q — адреса, тикеры, финансовые годы, биржи ценных бумаг и т.д. FinBERT-MRC Варианты модели достигают показателя F1 в диапазоне 0,87–0,93 при обработке задач, связанных с финансовыми субъектами. Основная сложность заключается в больших объёмах документов и вложенных сущностях, присутствующих в сложных финансовых инструментах.

Электронная коммерция

Walmart’s Система EAMT (KDD 2023) обучается на 965 миллионах запросов с примерно 60 метками сущностей; в статье сообщается о повышении 0.51% GMV в ходе тестов типа A/B. У компании Home Depot TripleLearn фреймворк (AAAI 2021) путём итеративной обучающей процедуры повысил значение NER F1 с 69,5 до 93,3.

Кибербезопасность

Этот система iACE (CCS 2016) обработано 71 000 статей с 45 блогов по вопросам безопасности, в результате чего было извлечено 900 тыс. элементов IOC при точности 98 % и воспроизводимости 93 %. Современные системы подобного рода CyNER сочетать DeBERTa (F1 >91%) с эвристиками IOC, основанными на регулярных выражениях. CyberNER Unified датасет (2025) объединяет четыре датасеты в 21 тип сущности, соответствующий стандарту STIX 2.1, причём модель RoBERTa показывает значение F1 в 0.736.


Оптимизация Деплой: переход от Python к более латентность инференс

Я протестировал три способа ускорения GLiNER для промышленного использования в сопутствующем репозитории.

ONNX экспорт

GLiNER обеспечивает нативную конвертацию ONNX, причём заранее преобразованные варианты модели уже доступны на HuggingFace.onnx-community/gliner_small-v2.1). ONNX Runtime обеспечивает ускорение в 1,5–3 раза при обработке CPU по сравнению с PyTorch, предлагая четыре уровня оптимизации — от базового до работы с смешанной точностью.

Из onnx_export.py:

# Export with quantization
# python convert_to_onnx.py --model_path model/ --save_path onnx/ --quantize True

# Load ONNX model — same API, faster inference
from gliner import GLiNER
model = GLiNER.from_pretrained("path/to/model", load_onnx_model=True)

# Same predict_entities call, 1.5-3x faster on CPU
entities = model.predict_entities(text, labels, threshold=0.5)

INT8 квантизация

Динамический квантизация сокращает размер модели в 2,4 раза (от 438 МБ до 181 МБ) при уровне потерь по метрике F1 менее 0,6%. Быстродействие улучшается в 1,8 раза на CPU. При использовании технологии Intel VNNI CPUs в сочетании с ONNX Runtime, INT8 обеспечивает ускорение до 6 раз по сравнению с PyTorch FP32.

from onnxruntime.quantization import quantize_dynamic, QuantType

# One-line quantization — 2.4x smaller, <1% F1 loss
quantize_dynamic("gliner.onnx", "gliner_int8.onnx", weight_type=QuantType.QInt8)

gline-rs: Перереализация на Rust

gline-rs (Apache 2.0) устраняет дополнительную нагрузку, связанную с выполнением кода на Python. На CPU достигается скорость обработки 6.67 последовательностей/сек, тогда как у Python она составляет 1.61 — это в 4.1 раза большая скорость. На карте RTX 4080 показатель равен 248.75 последовательностей/сек.gline-rs бенчмарки). Данное решение поддерживает спан и токен модели, а также работу с GPU/NPU через ONNX Runtime, причём его можно загрузить в виде пакета с сайта 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 с использованием PyO3 — сочетание высокой производительности Rust и удобства работы с Python.

Краткое описание стека оптимизации

ОптимизацияУскорение по сравнению с PyTorchМодель РазмерF1 ImpactЛучше всего подходит для
ONNX Runtime1,5–3 разаТо же самоеНетБыстрое решение — любое оборудование
INT8 Квантизация3–6 раз2,4 раза меньшепотеря 0,6%CPU деплой, с ограниченными ресурсами памяти
gline-rs (Rust)4.1x (CPU)формат ONNXНетВысокий уровень throughput, критический по латентность
gline-rs + INT84–8 раз2,4 раза меньшепотеря 1%Промышленное производство в крупном масштабе

Структурированное извлечение: инструкторский формат против оглавлений

Если требуется большая гибкость, чем та, которую обеспечивает кодер модели — такая как работа с имплицитными сущностями, ризонинг и картографирование онтологий — то для структурированной выделения информации из LLMs используются две библиотеки.

Преподаватель По состоянию на март 2026 года проект имеет около 12 600 звёзд на GitHub и примерно 8,8 млн загрузок в месяц; его автор, Jason Liu, внёс исправления в LLM SDKs, позволяющие обрабатывать ответы формата Pydantic модели с автоматической попыткой повтора при сбое валидации. Инструмент поддерживает более 15 поставщиков данных и послужил основой для реализации встроенной функции structured output в OpenAI.

Из 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'), ...]

Основные схемы библиотека dottxt использует иной подход: ограниченное генерирование токен с помощью метода конечных машины состояний. Декодер маскирует токены, которые могут нарушить грамматику целевого языка, вместо того чтобы ждать сбоя проверки и повторять попытку. AWS бенчмарк, Данный путь достиг уровня соблюдения схемы 98%, тогда как при валидации после генерации показатель составил 76%, причём скорость генерации результата была в 5 раз выше, чем у тестированного рабочего процесса без ограничений с механизмом повторных попыток. Эти результаты напрямую зависят от указанной модель совокупности схем и настроек сервинг.

import outlines

model = outlines.models.transformers("microsoft/Phi-3-mini-128k-instruct")
generator = outlines.generate.json(model, ExtractEntities)
result = generator("Extract entities from: BioNTech SE acquired InstaDeep in the U.K.")

Выбор зависит от того, где вы запускаете свой модели. Инструктор предоставляет облачные ресурсы LLM APIs Знакомый паттерн валидации с помощью Pydantic и механизм повторных попыток. Функция Outlines ограничивает процесс локальной генерации согласно заданной схеме. Оба инструмента обеспечивают поддержку NERвыделение в стиле , при этом их латентность всё ещё содержит авторегрессию модель генерация. Бенчмарк любой из путей применяется к энкодеру при одинаковом размере пакета, аппаратном обеспечении и схеме сущностей.


Архитектура производственной среды с тремя уровнями

Я буду направлять работу с продакшн-контентом NER в зависимости от структуры задачи, а не на основе единого рейтинга модель.

Архитектура из трёх уровней NER, которая направляет явные спаны в кодировщики, задачи многозадачной экстракции — в GLiNER 2, а случаи с высокой нагрузкой на ризонинг — в LLMs.

Уровень 1: кодировщик модели для явного спаны. Для небольших наборов меток рекомендуется использовать кросс-кодировщик GLiNER, а по мере увеличения количества меток следует протестировать би-кодировщик. После этого производится тонкая настройка с использованием метода LLM-как-учителя пайплайн, а затем система развертывается с помощью ONNX, INT8 или библиотеки gline-rs, если эти подходы соответствуют требованиям конкретной области приложения бенчмарк.

Уровень 2: GLiNER 2 для многозадачной экстракции информации. Когда один запрос требует NER, классификации, экстракции отношений и структурированных данных, применяется общий модель модели GLiNER 2 с 205 миллионами параметров. В описании модели указано, что время выполнения операций классификации CPU составляет от 130 до 208 мс латентность при работе с различными количествами тегов, проходивших тестирование.

Уровень 3: LLMs для извлечения с высокой концентрацией ризонинг. Неявные сущности, контекстуальные инференс и карты онтологий направляются в LLM с использованием механизма Instructor для облачных APIs или инструмента Outlines для локальных модели. Записывайте такие случаи, поскольку они могут стать частью следующего набора данных для обучения на уровне 1.

В примере анализа CFM приводится ориентировочная стоимость для уровня Tier 1: показатель F1 составляет 93,4% при затратах в размере 0,10 доллара США в час на CPU, тогда как у модели Llama-70B такой показатель — 92,7%, а стоимость использования — 8 долларов в час. Пересчитайте этот показатель с учётом своего оборудования, модели-учителя модель и набора меток, чтобы оценить реальные затраты.


Компромиссы и ограничения

Системы на основе ML всегда сопряжены с компромиссами. Ключевой вопрос заключается в том, где проявляются эти компромиссы и можно ли измерить их до начала деплой.

LLM — ошибки, возникающие при работе в роли учителя, распространяются дальше. Если LLM постоянно неправильно определяет тип конкретной сущности (например, путает названия дочерних компаний с названиями материнских организаций), то тонко настроенный кодек унаследует эту предвзятость. Решением является целенаправленный человеческий аудит: необходимо сосредоточить усилия на типах сущностей, для которых уровень уверенности LLM низок или нестабилен, а не на случайном выборке.

Квантизация потери не являются однородными. Средний показатель потерь по метрике F1 в ~0.6% для INT8 может быть выше для редких типов сущностей с тонкими параметрами границ (химические соединения, многословные аббревиатуры). Всегда необходимо бенчмарк квантизировать модели для конкретных типов сущностей, а не просто использовать суммарное значение метрики F1.

Когда трёхуровневая архитектура избыточна. Для одной области с стабильными типами сущностей и достаточным количеством маркированных примеров может оказаться достаточным лишь тонко настроенный RoBERTa или spaCy пайплайн. Паттерн трёх уровней подходит в случаях, когда речь идёт о нескольких областях, постоянно меняющихся типах сущностей, или при комбинированном использовании явного извлечения данных и методов, основанных на ризонинг. Для простого извлечения информации из счёта-фактуры пайплайн, например имён и дат, может хватить первого уровня.

Предел качества би-энкодера. Би-энкодер идет на компромисс, отказываясь от совместной обработки аттеншн в пользу throughput. Когда семантика меток взаимодействует с текстовым контекстом (например, «дата», «год» или «период» применительно к одному и тому же спан), кросс-энкодер по-прежнему оказывается более эффективным решением. Для задач с высокой степенью значимости и небольшим количеством меток следует использовать кросс-энкодер; би-энкодер же предпочтителен для работы с большим объемом данных.


Список литературы

Статьи

Статьи из отрасли

Исследования случаев использования

Инструменты и фреймворки