Track
Что делать, если нужно классифицировать текст в новую категорию, но у вас нет ни одного размеченного примера для обучения?
Традиционные классификаторы тут не подойдут. Им требуются размеченные примеры для каждой категории, которую вы хотите предсказывать. Это означает недели разметки до начала обучения. И как только появляется новая категория, приходится снова размечать.
Обратите внимание на классификацию без обучения (zero-shot). Она полностью пропускает этап разметки, позволяя модели присваивать метки, которых она никогда не видела на этапе обучения. На практике это значит, что вы можете распределять отзывы клиентов по категориям вроде "жалоба на биллинг" или "запрос на функцию" без подготовки ни одного обучающего примера.
В этой статье я объясню, как работает zero-shot классификация, как она сравнивается с традиционными и few-shot подходами и как применить её к реальным задачам NLP с помощью Hugging Face Transformers.
Что такое Hugging Face? Запишитесь на наш трек Hugging Face Fundamentals, чтобы создавать AI-агентов и дообучать LLM.
Что такое классификация без обучения?
Классификация без обучения — это подход машинного обучения, при котором модель присваивает метки данным, не будучи специально обученной на этих метках.
Ключевое здесь — "zero-shot". Это значит, что модель видит ноль обучающих примеров для категорий, которые вы хотите предсказывать. Вы даёте ей текст и список возможных меток, а она выбирает наилучшее соответствие на основе уже имеющихся знаний.
Все эти знания приходят из предобучения. Крупные модели формируют широкое понимание языка и понятий на огромных корпусах текстов, и именно на этом общем знании они основываются, когда вы просите их классифицировать что-то новое.
Как работает классификация без обучения
Рабочий процесс прост, если разбить его на шаги. Нужно всего четыре:
-
Передайте текст или данные: это то, что вы хотите классифицировать — отзыв клиента, тикет поддержки, новостной заголовок, фрагмент документации.
-
Укажите кандидаты-метки: вы даёте модели список возможных категорий. Это обычные слова или короткие фразы, например
"product question","refund request","technical issue"или"general inquiry". -
Модель оценивает связь между входом и метками: модель просматривает каждую метку и оценивает, насколько она подходит входу, исходя из предобученного понимания языка.
-
Выбирается наиболее вероятная метка: возвращается метка с наивысшей оценкой, часто вместе с уверенностью для каждого кандидата.
Смысл в том, что вы можете менять список кандидатов когда угодно без переобучения. Завтра захотите добавить новую категорию — просто внесите её в список. Это впечатляет, если вы работали только с обучением с учителем.
Zero-Shot против традиционной классификации
Оба подхода решают одну задачу (присваивание меток данным), но делают это по-разному.
Традиционная классификация
Традиционные классификаторы учатся на размеченных примерах. Вы собираете датасет, где каждый объект помечен правильной категорией, обучаете на нём модель, и модель усваивает закономерности, отличающие один класс от другого.
Это хорошо работало десятилетиями, но имеет два серьёзных ограничения:
- Нужны размеченные данные для обучения: зачастую в больших количествах. Сбор и разметка данных требуют времени и денег — самых ценных ограниченных ресурсов.
- Фиксированный набор меток: после обучения модель может предсказывать только те категории, которые видела. Добавление нового класса означает возврат к этапу обучения.
Классификация без обучения
Zero-shot работает наоборот. Нет вообще никакого обучения под конкретную задачу. Модель использует то, что выучила на предобучении, чтобы оценивать любые предложенные метки.
Это даёт два преимущества:
- Нет обучения под задачу: вы полностью пропускаете сбор данных, разметку и обучение.
- Гибкий набор меток: можно менять категории на ходу. Добавляйте новые, удаляйте старые, переименовывайте — модель справится без переобучения.
Компромиссы
Эта гибкость не бесплатна. Традиционный классификатор, обученный на качественных размеченных данных, обычно обгонит zero-shot модель на этой конкретной задаче. Он видел именно те примеры, которые вам важны, и подстроился под них.
Zero-shot модели — универсалы. Они хороши во многом, но редко лучшие в чём-то одном. Так что выбор зависит от ваших потребностей.
Если у вас есть разметка и нужна максимальная точность на фиксированном наборе категорий — обучайте традиционный классификатор. Если разметки нет или категории часто меняются — zero-shot быстрее приведёт к рабочему решению.
Роль базовых моделей и LLM
Классификация без обучения стала популярной, потому что крупные предобученные модели стали достаточно хороши для этого.
До появления базовых моделей вы не могли просто дать модели список невиданных меток и ожидать адекватных предсказаний. Модели не хватало языкового понимания, чтобы провести соответствие. Предобучение на огромных корпусах всё изменило. Модель, "прочитавшая" значительную часть интернета, уже встречала слова вроде "refund" или "complaint" в бесчисленных контекстах, так что сопоставление с новыми входами стало возможным.
Сегодня за большинством zero-shot процессов стоят несколько семейств моделей:
- BERT и его варианты: модели в стиле BERT учатся глубоким представлениям текста на предобучении. Варианты вроде RoBERTa и DeBERTa продвинули это дальше за счёт улучшенных методов обучения и более крупных датасетов.
- Модели на основе NLI: это модели, дообученные на задачах логического вывода на естественном языке. Они лежат в основе большинства готовых zero-shot конвейеров, и далее я объясню, почему.
- Современные LLM: большие языковые модели, такие как семейство GPT или Claude, могут выполнять zero-shot классификацию через промптинг. Вы описываете задачу простым языком, перечисляете категории — модель выбирает одну.
Общая черта — масштаб и универсальность. Модель, обученная на узкой задаче, умеет только её. Модель, обученная на широком корпусе, может быть перенаправлена на множество задач без размеченных примеров для них.
NLI и классификация без обучения
Большинство zero-shot классификаторов на практике построены на NLI-моделях. Это часто удивляет, поэтому стоит притормозить и разобраться.
Логический вывод на естественном языке (NLI) — это отдельная задача. Даны два предложения (посылка и гипотеза), модель определяет отношение между ними. Выход — одна из трёх меток:
- Следование (entailment): гипотеза вытекает из посылки.
- Противоречие: гипотеза противоречит посылке.
- Нейтрально: предложения не связаны или недостаточно информации, чтобы решить.
Например, если посылка — "The team finished the project two weeks early", а гипотеза — "The team delivered on time", NLI-модель должна предсказать следование. Если гипотеза — "The team missed the deadline", — противоречие.
Такой сетап отлично подходит для zero-shot классификации. Если считать ваш вход посылкой, каждую кандидатную метку можно превратить в гипотезу.
Допустим, вы хотите классифицировать предложение "My package never arrived" в одну из трёх категорий: проблема с доставкой, проблема с биллингом или вопрос по продукту. Модель не видит это как метки. Она видит гипотезы, обычно обёрнутые в простой шаблон вроде "This text is about {label}":
-
Посылка:
"My package never arrived"| Гипотеза:"This text is about a shipping issue" -
Посылка:
"My package never arrived"| Гипотеза:"This text is about a billing issue" -
Посылка:
"My package never arrived"| Гипотеза:"This text is about a product question"
NLI-модель оценивает каждую пару. Гипотеза с наибольшей оценкой следования побеждает, и соответствующая метка становится предсказанием.
Модели не нужно было учить, что означает "shipping issue" или "billing issue" как метки. Ей достаточно было знать, как в целом выглядит следование, — это она усвоила при дообучении на NLI.
Вот почему zero-shot на базе NLI так хорошо работает. Модель делает именно то, для чего обучалась (оценивает следование), а вы лишь оформляете задачу классификации как серию вопросов о следовании.
Zero-shot vs few-shot vs дообученные модели
Zero-shot — не единственный способ заставить модель решать задачу классификации без полноценного обучения. Сравню его с альтернативами.
Zero-shot
Zero-shot означает полное отсутствие примеров. Вы передаёте модели вход и список кандидатов-меток, и она делает предсказание, опираясь на знания, полученные на предобучении.
Модель никогда не видела размеченных данных для вашей конкретной задачи. Она работает исключительно с общими знаниями.
Few-shot
Few-shot даёт модели пару примеров — обычно прямо в промпте. Вы показываете 2, 5, может быть 10 примеров с правильными метками и просите классифицировать новый вход аналогично.
Здесь модель не переобучается. Она всё ещё использует предобученные веса. Примеры служат ориентиром — коротким «вот что я имею в виду под этими категориями» перед тем, как вы запросите предсказание.
Дообучение
Дообучение — это целевой процесс обучения. Вы берёте предобученную модель, подаёте ей размеченный датасет под вашу задачу и обновляете её веса, пока она не начнёт хорошо предсказывать ваши конкретные категории.
Это самый тяжёлый из трёх вариантов. Нужны размеченные данные, инфраструктура обучения и время. Взамен модель становится специализированной под вашу задачу.
Сравнение трёх подходов
Они отличаются по трём ключевым параметрам: точность, гибкость и стоимость.
| Точность | Гибкость | Стоимость | |
|---|---|---|---|
| Zero-shot | Самая низкая из трёх, но достаточная для общих случаев | Самая высокая: метки можно менять в любое время | Самая низкая: нет данных и обучения |
| Few-shot | Лучше, чем zero-shot, особенно с удачно подобранными примерами | Высокая: можно менять примеры и метки в промпте | Низкая: нужны лишь несколько примеров |
| Дообучение | Наивысшая на задаче, под которую обучалось | Самая низкая: для новых категорий требуется переобучение | Самая высокая: сбор данных, разметка и обучение |
Сравнение zero-shot обучения с альтернативами
Есть несколько моментов, на которые стоит обратить внимание в этой таблице.
Точность — не линейный рейтинг. Дообучение побеждает, когда у вас достаточно разметки и задача стабильна. Но для совершенно новой задачи без примеров дообучение даже невозможно, и zero-shot становится единственным реалистичным выбором.
Гибкость движется в обратном направлении. Zero-shot позволяет менять категории когда угодно. Дообученные модели зафиксированы на наборе меток, с которым обучались.
Стоимость — самый очевидный параметр. Zero-shot почти ничего не стоит в настройке. Few-shot добавляет небольшой этап разметки. Дообучение — это отдельный проект с выделенной инфраструктурой.
Типичный рабочий процесс команд: начать с zero-shot, чтобы понять, решаема ли задача. Если точности не хватает — перейти к few-shot. Если и этого мало, а задача важна — дообучать.
Классификация без обучения в NLP
Zero-shot классификация встречается во многих NLP-процессах, особенно там, где трудно получить разметку или категории постоянно меняются. Вот самые распространённые применения.
Анализ тональности
Анализ тональности — классическая отправная точка. Вы подаёте модели текст и просите выбрать из меток вроде "positive", "negative" и "neutral".
Интересно то, как просто выйти за пределы стандартной тройки. Традиционный классификатор тональности зафиксирован на том, чему его обучили. В zero-shot можно использовать более конкретные метки, такие как "frustrated", "satisfied", "confused" или "excited" — и модель справится без переобучения. Это отлично подходит для продуктовой обратной связи или мониторинга соцсетей, где важные эмоциональные категории зависят от контекста.
Классификация по темам
Классификация по темам распределяет документы по предметным областям. Новостные статьи — по "politics", "sports", "technology", "finance". Тикеты поддержки — по "billing", "shipping", "account access", "feature request".
Zero-shot делает это тривиальным в настройке. Вам не нужен размеченный датасет для каждой новой темы. Если в продукте появляется новая функция и вы хотите отслеживать тикеты по ней, просто добавьте "new feature feedback" в список кандидатов — и готово.
Определение намерений
Определение намерений выясняет, что пытается сделать пользователь. Это двигатель большинства чат-ботов и голосовых ассистентов. Когда кто-то пишет "I need to change my password", модель должна распознать намерение как "password reset", а не, скажем, "general security question".
Вот где zero-shot особенно силён. В реальных продуктах список пользовательских намерений со временем растёт, и переобучать классификатор каждый раз, когда команда выпускает фичу, — это много работы. Zero-shot позволяет держать список намерений актуальным без изменений в модели.
Модерация контента
Модерация помечает проблемный текст — такие вещи, как "hate speech", "spam", "harassment" или "misinformation". Платформам приходится регулярно обновлять правила, и категории меняются по мере появления новых типов злоупотреблений.
Zero-shot здесь отлично подходит. Команды модерации могут уточнять определения или добавлять новые категории по мере развития правил, не обращаясь к инженерам для цикла переобучения. Обычно его сочетают с традиционными классификаторами для высокочастотных случаев, а zero-shot закрывает длинный хвост категорий, для которых нет достаточной разметки.
Классификация без обучения с Hugging Face Transformers
Библиотека Hugging Face transformers — самый простой способ попробовать zero-shot классификацию в Python. API pipeline скрывает почти всю рутину по загрузке модели, так что вы переходите от нуля к предсказаниям в паре строк кода.
При первом запуске сниппета модель будет загружена — это займёт время.
Вот законченный пример, который можно запустить:
from transformers import pipeline
from pprint import pprint
# Load a zero-shot classification pipeline
classifier = pipeline(
"zero-shot-classification",
model="facebook/bart-large-mnli"
)
# The text you want to classify
text = "My package never arrived and customer support hasn't responded in three days."
# The labels you want the model to choose from
candidate_labels = [
"shipping issue",
"billing issue",
"product question",
"general inquiry"
]
# Run the classification
result = classifier(text, candidate_labels)
pprint(result)
Вывод — это словарь с тремя полями: исходный вход, кандидатные метки, отсортированные от наиболее к наименее вероятной, и оценка уверенности для каждой метки.

Вывод пайплайна
"shipping issue" побеждает с уверенностью 0.82. Модель никогда не видела размеченных примеров жалоб на доставку, но поняла это благодаря предобученной модели bart-large-mnli, дообученной на данных NLI, как было описано выше.
Есть несколько моментов, на которые стоит обратить внимание:
-
Используется NLI-модель:
bart-large-mnli— это BART, дообученная на датасете MultiNLI. Когда вы вызываете pipeline, он превращает ваши метки в гипотезы за кулисами и прогоняет их через модель. -
Метки можно менять в любой момент: с моделью ничего делать не нужно. Замените список
candidate_labels— и вы классифицируете по другим категориям. -
Мульти-лейбл — одним флагом: установите
multi_label=Trueпри вызове pipeline, и метки не будут конкурировать друг с другом. Каждая метка получит независимую вероятность, так что один вход может принадлежать нескольким категориям.
result = classifier(text, candidate_labels, multi_label=True)
pprint(result)

Вывод для мульти-лейбла
Вот и весь процесс. Загрузите pipeline, задайте метки, вызовите классификатор. Гораздо быстрее и проще, чем строить модель классификации с нуля.
Частые ошибки при zero-shot классификации
Zero-shot классификацию легко настроить — поэтому её легко и неправильно использовать. Вот ошибки, которые чаще всего встречаются в реальных проектах.
Выбор расплывчатых меток
Метки — это способ донести задачу до модели. Размытые метки приводят к размытым предсказаниям.
"good" и "bad" мало что скажут модели. "customer is happy with the product" и "customer is reporting a problem with the product" дают модели материал для сопоставления. Чем больше ваши метки похожи на осмысленные фразы, тем лучше модель будет их соотносить с входами.
Также избегайте пересекающихся меток. Если "complaint" и "negative feedback" обе есть в списке кандидатов, модель разделит между ними уверенность, и ни одна не станет явным победителем.
Ожидание точности на уровне дообучения
Это самая распространённая ошибка. Zero-shot хорош, но не волшебный.
Дообученная модель на нескольких тысячах размеченных примеров под вашу задачу почти всегда обгонит zero-shot на той же задаче. Если вы видите 85% точности в zero-shot и вам нужно 95% для продакшна, никакая настройка меток не закроет этот разрыв. В таком случае ответ — дообучение.
Используйте zero-shot, когда у вас нет разметки, когда категории часто меняются или когда "достаточно хорошо" действительно достаточно. Не выбирайте его только потому, что он быстрее настраивается, а затем не удивляйтесь недостаче точности в критичных задачах.
Оценка на слишком узких датасетах
Сценарий такой: вы строите zero-shot классификатор, тестируете его на 50 примерах, написанных вами же, и он угадывает все. Вы выкатываете решение — и в продакшне все жалуются на качество.
Ваши 50 примеров не представляют реальных пользователей. Они чище, очевиднее и ближе к тому, как вы сами мыслите о категориях. Оценивайте на данных, похожих на реальные — пользовательский текст с опечатками, сленгом и пограничными случаями. Если таких данных ещё нет, соберите несколько сотен реальных входов и разметьте их вручную, прежде чем доверять метрикам.
Игнорирование отраслевого языка
Универсальные zero-shot модели знают общий язык. Они не знают жаргон вашей индустрии.
Медицинская терминология, юридический язык, финансовые аббревиатуры, инженерные спецификации — всё это узкие словари, с которыми предобученные модели знакомы, но не в глубину. Если просить универсальную zero-shot модель классифицировать предложение, полное кодов ICD-10 или SQL-ошибок, ждите смешанных результатов.
У вас два варианта: либо переформулировать метки простым языком, который модель лучше понимает, либо перейти на модель, предобученную на текстах вашей доменной области. BioBERT для медицины, FinBERT для финансов и прочие доменные модели часто превосходят универсальные на специализированных задачах.
Почему zero-shot важен в современной ИИ-практике
Классификация без обучения — один из самых наглядных примеров того, как базовые модели изменили возможности ИИ.
Десять лет назад любая задача классификации начиналась с вопроса: есть ли у нас разметка, а если нет — как её получить? Проекты по аннотации занимали месяцы, требовали бюджет, работу с вендорами и контроль качества. Модель даже нельзя было строить, пока не появятся данные.
Теперь это предположение неверно.
Базовая модель, обученная на широком корпусе текстов, уже достаточно понимает язык, чтобы решать новую задачу классификации сразу, как только вы её опишете. Единственное, что нужно определить, — список меток.
Это важно по нескольким причинам, связанным с более широкими трендами в ИИ:
- Показывает, для чего нужны базовые модели: цель масштабного предобучения — создать достаточно общую модель, которую можно перенаправлять на множество задач без переобучения. Zero-shot — один из самых чистых примеров этой идеи в действии.
- Снижает зависимость от размеченных датасетов: размеченные данные по-прежнему полезны, но больше не обязательны для создания рабочего классификатора. Команды без бюджета на разметку всё равно могут внедрять ценные AI-функции.
- Ускоряет внедрение: фича классификации, на которую раньше уходил квартал, теперь может быть прототипирована за полдня. Это влияет на продуктовые решения: стоимость эксперимента почти нулевая.
Шире — мы движемся от задач-специфичных моделей к универсальным. Дообучение всё ещё нужно, как и обучение с нуля, когда этого требует задача. Но точка отсчёта сместилась: сначала берём предобученную модель и специализируем её только тогда, когда данные это оправдывают.
Заключение
Классификация без обучения напоминает, что теперь не каждой задаче машинного обучения требуется собственный цикл тренировки. Модель, уже понимающая язык, может быть перенаправлена на новую задачу простым изменением списка меток. Примеры и дообучение не нужны.
В этом и состоит гибкость. Категории, важные сегодня, могут не быть важными в следующем месяце — и zero-shot модели позволяют легко менять приоритеты.
Поэтому прежде чем начинать проект по разметке данных, запустите zero-shot базу. Уже к вечеру вы поймёте, решена ли задача, решена ли частично или потребуется более тяжёлый подход. Ничего сложного.
Если вы новичок в LLM, запишитесь на наш курс «Large Language Models (LLMs) Concepts». Он охватывает всё необходимое о приложениях LLM, методиках обучения и последних исследованиях.
FAQs
Объясните простыми словами: что такое классификация без обучения?
Классификация без обучения — это способ присваивать тексту метки без обучения модели на этих конкретных метках. Вы даёте модели вход и список возможных категорий, а она выбирает наилучшее соответствие на основе знаний, полученных на предобучении. «Ноль» относится к числу обучающих примеров, необходимых для каждой категории, — их нет.
Когда лучше использовать zero-shot классификацию вместо обучения собственной модели?
Используйте zero-shot, когда вы экспериментируете, у вас нет разметки, категории часто меняются или нужно быстро выпустить прототип. Это также правильный выбор для исследовательской работы, когда вы ещё определяете сами категории. Если набор меток стабилен и есть достаточно размеченных примеров, дообучение традиционного классификатора обычно даст лучшую точность.
Насколько точна классификация без обучения?
Точность зависит от используемой модели, качества формулировки меток и того, насколько задача опирается на общее языковое понимание. На хорошо определённых задачах zero-shot может показать уверенные, а иногда и продакшн-готовые результаты, но почти всегда уступит дообученной модели на достаточном объёме разметки. Воспринимайте zero-shot как сильную базу.
Чем zero-shot классификация отличается от NLI?
NLI — это задача, где модель определяет, следует ли одно предложение из другого, противоречит ему или нейтрально к нему. Zero-shot классификация использует NLI‑модели как «движок»: ваш вход становится посылкой, а каждая кандидатная метка превращается в гипотезу. Побеждает та метка, чья гипотеза получает наивысшую оценку следования.
Можно ли использовать zero-shot классификацию для неанглоязычного текста?
Да, но нужна мультиязычная модель. Такие модели, как xlm-roberta-large-xnli, обучены на мультиязычных NLI‑данных и способны выполнять zero-shot классификацию на десятках языков. Оставайтесь с bart-large-mnli и аналогичными англоязычными моделями для английского текста и переходите на мультиязычные варианты, когда входы не на английском.