Эта статья является адаптацией моей статьи, опубликованной в Towards AIIntroБольшие языковые модели показывают впечатляющую обобщающую способность, причём не тоЭта статья является адаптацией моей статьи, опубликованной в Towards AIIntroБольшие языковые модели показывают впечатляющую обобщающую способность, причём не то

Тихая эволюция zero-shot энкодеров. От UniNER до GLiNER 2

2026/03/13 23:17
8м. чтение
Для обратной связи или замечаний по поводу данного контента, свяжитесь с нами по адресу crypto.news@mexc.com

Intro

Большие языковые модели показывают впечатляющую обобщающую способность, причём не только в задачах генерации текста вроде QA-ассистентов, но и в классификации, распознавании именованных сущностей (Named Entity Recognition) и других NLP-задачах.

С одной стороны, мы на старте эпохи AI агентов, где приложения с тулами управляются
LLM, помогая решать сложные задачи. С другой — слож ные задачи со сложными решениями и прожорливыми LLM требуют железа уровня дата-центра или vendor lock-in-а с зависимостью от внешних API .
Оба варианта дорогие, а есть задачи вроде классификации текста, извлечения информации (тот же NER), где нам не нужен предвзятый и галлюцинирующий алгоритм, а нужна заточенная, детерминированная на выходе модель, обученная под задачу с возможностью zero-shot.

В этой статье мы разберём эволюцию, которую вы возможно пропустили, полагаясь на LLM-ки в таких простых задачах. Эта эволюция multitask-энкодеров называется GLiNER. Начав с open-domain zero-shot NER, последняя архитектура умеет решать кучу задач, фокусируясь на извлечении информации и классификации текста. Киллер-фича в том, что бэкбоны у GLiNER в основном на базе энкодеров: bert, deberta, modernbert. Вам не нужно больше решать multitask через медленные LLM-ки и думать про инфраструктуру в контексте трейдоффов пропускной способности и качества, никакого KV-кэша, никакого Time to first token и Token Generation Time. Это просто один forward через модель.

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

Теперь каждый может просто написать:

from gliner2 import GLiNER2 extractor = GLiNER2.from_pretrained("your-model-name") schema = (extractor.create_schema() .entities({ "person": "Names of people mentioned", "date": "Dates and time references" }) .structure("appointment") .field("patient", dtype="str") .field("doctor", dtype="str") .field("date") .field("time") .field("type", dtype="str", choices=["checkup", "followup", "consultation"]) ) text = """ Dr. Sarah Johnson confirmed the appointment with John Smith for March 15th at 2:30 PM. This will be a follow-up consultation regarding his previous visit on February 1st. """ results = extractor.extract(text, schema)

и решить 1, 2 или больше задач за один форвард

Так что давайте разберёмся и поймём историю за этим кодом, а я проведу вас через неё.

Universal NER

В 2023, до релиза GLiNER, Zhou et al. показали Universal NER — Open Domain NER, дистиллированный из ChatGPT и построенный поверх обучения других LLM: Vicuna 7B и 13B, превосходящий ChatGPT в большинстве случаев. Я не планирую фокусироваться на этой модели с точки зрения подробностей ее обучения или сбора датасетов, моя цель - собрать основные инсайты.

Основные инсайты

Knowledge Distillation

UniNER использует ChatGPT для разметки текстов следующим промптом:

Позже тот же промпт будет использован в статье GLiNER как отсылка к этой работе и подтверждение эффективности.

UniNER по факту использует hard label distillation, тот же подход использовался относительно недавно (целый год назад!? D) в работе DeepSeek. (Думаю, вы все слышали эту историю)

В итоге UniNER показывает следующие результаты:

7863b25b55c39520d15c9ed35974a38a.png

В общем:

Single vs Multi label

UniNER оценил 3 сценария с 3 разными моделями:

  • type — только одна сущность за форвард (например "PERSON")

  • all in one — несколько сущностей за один форвард (например "PERSON", "LOCATION", "ORGANIZATION")

  • definition — только описания, сгенерированные ChatGPT для сущностей

f94d3f6711a12356f310fc7c2b06cda7.png

Как видите, модель с одним лейблом на forward pass превосходит остальные в большинстве случаев. Запоминаем этот трейдофф:

Всё ещё авторегрессия

Хотя авторы UniNER написали и выложили пару моделей, они всё ещё не просто отвечают найденными сущностями в тексте. Они генерируют это на инференсе, так что мы по-прежнему застреваем не только с форвардом, а с целым декодинг-пайплайном текстовой генерации. Надо разбираться с KV-кэшем и прочими проблемами генерации текста. И тут вместо инсайта я задам вопрос:

И именно на этот вопрос отвечает следующая статья.

GLiNER

GLiNER: Generalist Model for Named Entity Recognition using Bidirectional Transformer. by Urchade Zaratiana et. all

Intro

Статья начинается со следующих проблем:

  1. Традиционные NER-модели ограничены заранее определённым набором сущностей. Новые сущности требуют новой разметки.

  2. Большие языковые модели (начиная со статьи "Large Language Models are Few-shot learners") показывают высокую обощающую способность со сравнимой точностью. При этом они состоят из миллиардов параметров и стоимость инференса или API высока.

GLiNER предлагает маленькую двунаправленную языковую модель (bert-like), где типы сущностей мэтчатся с текстовыми спанами в латентном пространстве. Это не просто bert for token classification, как из transformers. Это Span Categorizer, который работает не с токенами, а со спанами (текстовыми последовательностями — кусками всего входного предложения). Кстати если вам интересна тема NER с точки зрения токенов и спанов возможно вам зайдет эта статья.

Как это работает

460e40bb7131233f6a62bf0f7bf54bae.png

В модель подаются:

  1. Входной текст

  2. Типы сущностей как список лейблов

Оба подаются через BERT-модель, и из его выхода мы получаем представления в пространстве эмбеддингов. Эти представления разделены (обучены быть разделёнными) внутри сети:

  • сущности: через FFN-слой

  • оригинальное предложение разбивается на спаны окном до 12 токенов внутри спана

Финально GLiNER мэтчит представления спанов с заданными сущностями:

69a708691f394fb51bd2bee1cf6423ec.png

span (i,j) означает часть предложения, например: span (0,2) = "John Smith"

И как видите, мы можем использовать эти phi как вероятность, и вот как это выглядит во время инференса:

from gliner import GLiNER model = GLiNER.from_pretrained("urchade/gliner_multi-v2.1") text = """ Cristiano Ronaldo dos Santos Aveiro (Portuguese pronunciation: [kɾiʃˈtjɐnu ʁɔˈnaldu]; born 5 February 1985) ... """ labels = ["person", "award", "date", "competitions", "teams"] entities = model.predict_entities(text, labels) print(entities) # {'start': 1, # 'end': 36, # 'text': 'Cristiano Ronaldo dos Santos Aveiro', # 'label': 'person', # 'score': 0.9164333343505859}, # {'start': 92, # 'end': 107, # 'text': '5 February 1985', # 'label': 'date', # 'score': 0.9581286311149597}, # 'score': 0.9164333343505859},

Вот это и есть phi из формулы выше.

Основные инсайты

Дистилляция знаний

Как и в UniNER:

7467732e9052f3756868d075836f5b51.png

Это не просто работает в плане получения разметки. А работает всё ещё в плане получения SOTA результатов с моделью всего на 459M параметров с бэкбоном deberta-v3:

b0129132127610bd81296fc4a378b574.png

Insight #3: Insight #1 про hard label distillation по-прежнему работает с энкодерами

Backbones

Оригинальная статья GLiNER протестировала различные существующие на то время бэкбоны:

67979f7db8b08f26d1dbefd3f2710896.png

Как видим, Deberta-бэкбон лучший на момент выхода статьи. И эмпирически до сих пор лучший (или один из лучших) для всех моделей на gliner-like архитектуре.

Мэтчим спаны, а не генерим текст

Как мы знаем из части Как это работает — GLiNER просто делает мэтч спанов между текстом и списком лейблов. Вот и решение проблемы LLM: GLiNER просто сделал задачу генерации текста ненужной для open-domain NER, превосходя предыдущие SOTA модели с меньшим количеством параметров.

Зоопарк моделей

Архитектура GLiNER оказалась чем-то большим, чем просто NER-решение. Основная идея — мэтч текстовых спанов с эмбеддингами лейблов в латентном пространстве — была достаточно простой для адаптации к другим NLP-задачам. Комьюнити подхватило это быстро.

GliREL применил тот же подход к relation extraction. GLinker расширил до entity linking. GliClass адаптировал мэтч спанов для классификации текста, работая с полным текстом и списком лейблов. Каждая из этих работ по сути задавала один и тот же вопрос: «а что если заменить task‑specific голову, но оставить энкодерный бэкбон и идею zero‑shot мэтчинга?»

И это прекрасно работало.

Но это создало новую проблему: зоопарк single task моделей, каждая со своим инференс-пайплайном, своим рецептом файн-тюнинга, своим деплой-сетапом. Нужен GLiNER для NER, GliClass для классификации, GliREL для relation. Три модели, три форвард-пасса, три архитектуры которые надо поддерживать.

Именно эту проблему решает GLiNER 2.

GLiNER 2

GLiNER2: An Efficient Multi-Task Information Extraction System with Schema-Driven Interface, by Urchade Zaratiana et. all

GLiNER 2 — это не новая архитектура. Это унификация.

Zaratiana et al. взяли всё, что выросло из экосистемы GLiNER — NER, классификацию , также другие Information Extraction подходы - и объединили в единый фреймворк с одним форвардом. Зоопарк моделей становится одной моделью со schema-driven интерфейсом, который вы уже видели в начале статьи.

При этом бэкбон deberta-v3 по-прежнему остался, учитывая что ModernBERT уже вышел и ощущается быстрее. Одна из возможных причин, почему авторы остаются с deberta — Disentangled Attention, предложенный Pengcheng He et. all. Который даёт более сопоставимые результаты на задачах мэтчинга спанов и текста, особенно в NER-задачах.

Что изменилось

Много задач за один форвард Вместо запуска отдельных моделей для каждой задачи, GLiNER 2 обрабатывает их одновременно. Определяете схему, подаёте с текстом, получаете структурированный вывод.

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

Описания лейблов. Как вариант definition в UniNER, GLiNER 2 поддерживает развёрнутые описания лейблов, улучшая точность на неоднозначных или domain-specific типах лейблов.

98efd2464637f9dafc3e4495425d1d7e.png

Tradeoffs

Объединение задач в одну модель вносит свои трейдоффы:

4f4ba0adb9714c981484499f060c4e95.png

Gliner 2 — превосходит GliClass и deberta-v3, но проигрывает GPT-4o, в отличие от оригинального GLiNER.

В zero-shot NER качество тоже снизилось:

53dab18fc0dd18e194fd63e866d21d3d.png

Помните один из инсайтов UniNER?

Инсайт #2: Больше лейблов и обобщаемости ≈ ниже точность

Мы вернулись к этому, но уже для GLiNER 2:

Инсайт #5: Унификация на множестве задач стоит точности в отдельных задачах. Качество NER у GLiNER 2 ниже чем у GLiNER 1, классификация неплохая, но не бьёт GPT-4o.

9c8f1b755e8e43e74369d5859c289401.png

Скорость по сравнению с deberta-v3 и GPT-4o значительно лучше и деградирует медленнее, но деградирует, да.

GLiNER 2 заточен под деплой на CPU, но по факту, как мы знаем, для высоконагруженного инференса вам всё равно нужны видеокарты от Nvidia.

На этом конец, мы начали с LLM по типу ChatGPT, которые хорошо обобщаются на новые задачи, а закончили с энкодером в 205M параметров, делающим ту же работу не лучше, но сопоставимо по качеству, принимая это как инженерный трейдофф.

Ключевые выводы

Insight #1: Использовать SOTA LLM (типа ChatGPT) как разметчика и учиться на hard лейблах достаточно не только чтобы приблизиться к учителю, но и превзойти его.

Insight #2: Больше лейблов и обобщаемости ≈ ниже точность

Insight #3: Insight #1 про hard label distillation работает и с энкодерами

Insight #4: 459M GLiNER > UniNER 7B > ChatGPT (~100B+) превосходит SOTA, декодер с авторегрессией не нужен.

Insight #5: Унификация на множестве задач стоит точности в отдельных задачах. Качество NER у GLiNER 2 ниже чем у GLiNER 1, классификация неплохая, но не бьёт GPT-4o. (Привет, Инсайт 2)

Источник

Отказ от ответственности: Статьи, размещенные на этом веб-сайте, взяты из общедоступных источников и предоставляются исключительно в информационных целях. Они не обязательно отражают точку зрения MEXC. Все права принадлежат первоисточникам. Если вы считаете, что какой-либо контент нарушает права третьих лиц, пожалуйста, обратитесь по адресу crypto.news@mexc.com для его удаления. MEXC не дает никаких гарантий в отношении точности, полноты или своевременности контента и не несет ответственности за любые действия, предпринятые на основе предоставленной информации. Контент не является финансовой, юридической или иной профессиональной консультацией и не должен рассматриваться как рекомендация или одобрение со стороны MEXC.