Гайд · TNWS AI
Как разметить темы заявок без обучения через zero-shot-classification в Transformers
Candidate labels, hypothesis_template и multi_label: размечаем англоязычные обращения без обучения новой головы и проверяем ошибочные категории.
Задача и применимость
Запрос читателя: «как разметить темы заявок zero shot transformers без обучения». Ниже разобрана одна воспроизводимая задача на Python и Transformers 4.57.1. Действия относятся к checkpoint FacebookAI/roberta-large-mnli, а не ко всем нейросетям с похожим названием. Код не отправляет запросы к админ-панели и не меняет чужие данные. Для первого запуска требуется загрузить модель из Hugging Face Hub; модель может требовать памяти и иметь собственные лицензионные условия. Проверяйте карточку checkpoint до применения к пользовательскому контенту. Демонстрационные предсказания не выдаются здесь за фактически выполненный инференс: в доступной проверке сверены документация и синтаксис Python, но веса модели не запускались.
Факт из документации, на который опирается инструкция: ZeroShotClassificationPipeline использует NLI-модель и candidate_labels. hypothesis_template должен содержать {}. При multi_label=False кандидаты конкурируют, при multi_label=True несколько меток могут независимо подходить к одной записи. Выбранная MNLI-модель предназначена для английского языка. Если версия вашей библиотеки или конфигурация checkpoint отличается, повторите короткий тест перед массовым использованием. Код показывает механизм, а не результат промышленной оценки качества на вашем корпусе.
Порядок действий
- Определите взаимоисключающие либо совместимые темы до запуска модели.
- Напишите кандидатные метки на языке модели: delivery, payment, return.
- Составьте шаблон гипотезы с {}, понятный для предложения о поддержке.
- Выполните классификацию с явным multi_label и сохраните все scores вместе с порядком labels.
- Разберите неуверенные и двусмысленные записи вручную, затем исправьте словарь категорий.
Для установки в отдельном окружении используйте совместимую версию пакета и backend PyTorch: pip install "transformers==4.57.1" torch. Наличие команды не означает, что все веса доступны именно вашей системе или что GPU настроен. Секреты и персональные данные не помещайте в демонстрационные входы. Для быстрой диагностики перед первым большим прогоном проверьте import transformers; print(transformers.__version__).
Готовый шаблон Python
from transformers import pipeline
classifier = pipeline("zero-shot-classification",
model="FacebookAI/roberta-large-mnli")
ticket = "My parcel has not arrived and I want a refund."
out = classifier(ticket, candidate_labels=["delivery", "payment", "return"],
hypothesis_template="This support ticket is about {}.",
multi_label=True)
print(list(zip(out["labels"], out["scores"])))
Этот шаблон можно перенести в отдельный файл и заменить демонстрационные тексты на обезличенную выборку. Зафиксируйте checkpoint и входные строки, чтобы отличать ошибки подготовки от поведения модели. В серверном сценарии загрузку модели выполняйте один раз при старте службы, а не заново при каждом обращении. Если пример возвращает словарь, используйте проверку наличия ключа перед сохранением его в долговременное хранилище. Сначала воспроизведите малый тест, лишь затем подключайте массовый поток.
Пример входных данных и ожидаемой проверки
Вход: «My parcel has not arrived and I want a refund», категории delivery, payment, return. Ожидаемая структура — ранжированный список labels и соответствующих scores; сценарий допускает сразу delivery и return. Конкретные числа и порядок получаются при реальном запуске, не задавайте их как константу в правиле обработки.
Важно различать ожидаемую структуру ответа и непроверенное заранее содержимое нейросетевого предсказания. Если устройство или модель вернули иное значение, не «подгоняйте» скрипт под рассказ статьи. Сохраните фактический вывод, сопоставьте его с контрольным примером и запишите, какой слой дал отличие: вход, токенизация, checkpoint или постобработка. Так тест остается полезным после обновления окружения.
Как принимать решение по реальным данным
Формулировка категории — часть входных данных нейросети. Метки «delivery» и «shipment» частично дублируют друг друга, поэтому отчёт о распределении тем по клиентам станет неустойчивым. Сначала договоритесь о таксономии: отдельна ли тема задержки от потери посылки, можно ли пометить возврат вместе с доставкой, что делать с общим вопросом. Режим multi_label=True полезен для составных обращений, но scores тогда не требуется суммировать до единицы. Если заявка должна попасть ровно в один отдел, используйте соответствующую схему и предусмотрите ручной маршрут для неоднозначных случаев. Предложение в hypothesis_template также влияет на результат; тестируйте одно и то же предложение при разных формулировках и не выбирайте лучшую на единственном примере. Пустая или слишком широкая метка «other» редко заменяет настоящее правило обработки неизвестных тем.
Дополнительный тест перед внедрением
Соберите три контрольные группы: однозначная доставка, однозначная оплата и письмо, объединяющее возврат с доставкой. Зафиксируйте ручную разметку и проверьте, сколько обращений модель отправляет не туда. Затем выполните отрицательный тест: «Please change my account email» не должен автоматически становиться уверенной оплатой только потому, что альтернативы нет. Для русскоязычного потока не переводите строки втихую: либо документируйте качественный перевод и измеряйте каскад ошибок, либо выберите NLI-модель с подходящим языком и проверьте карточку. Это не обучение под ваш бизнес: классы вводятся при инференсе, но качество всё равно необходимо измерять. В журнале храните версию списка категорий и выбранный шаблон; изменение даже одного слова может изменить распределение заявок и сломать сравнимость отчётов.
Критерии готовности
- Каждая метка соответствует формулировке принятой таксономии.
- Составное письмо проверено в multi_label=True, а отрицательный контроль не уходит безусловно в отдел.
- Отчёт хранит сам список кандидатных меток и шаблон.
Записывайте тестовый результат вместе с ID входа и конфигурацией, но не публикуйте приватные запросы в открытых логах. Ручная разметка небольшой выборки нужна даже тогда, когда код возвращает ответ без ошибок: технически правильная форма не подтверждает полезность предсказания. После изменения модели или библиотеки прогоните тот же набор повторно. Если одно из условий не пройдено, сначала исправляйте причину, затем расширяйте применение.
Типичные ошибки и что не делать
- Не смешивать русский ввод с англоязычной моделью без языкового теста.
- Не интерпретировать scores из multi_label как доли одного пирога.
- Не запускать автоматическую маршрутизацию без контрольных обращений.
Не путайте демонстрационный вывод с обещанием точности и не подменяйте источники сведений ответом модели. Для автоматического действия с последствиями для человека добавляйте независимую проверку. Изменения языка, объёма текста и домена применения требуют новой оценки качества. В документации производителя описан интерфейс инструмента, но показатели вашей задачи можно узнать только на вашей контрольной выборке.
FAQ
Нужно ли дообучать голову под три темы?
Для zero-shot вызова — нет.
Для чего нужен {}?
В него подставляется очередная кандидатная метка.
Когда выбрать multi_label=True?
Когда одно обращение вправе относиться к нескольким темам.
Официальные источники
Частые вопросы
Нужно ли дообучать голову под три темы?
Для zero-shot вызова — нет.
Для чего нужен {}?
В него подставляется очередная кандидатная метка.
Когда выбрать multi_label=True?
Когда одно обращение вправе относиться к нескольким темам.
Читайте также
Как извлечь ответ из заданного текста через Transformers question-answering
Контекст, вопрос и контроль отсутствующего ответа: извлекаем span из документа, проверяем offsets и не принимаем догадку за факт.
Как не потерять конец текста при truncation и padding в Transformers
max_length, truncation и padding для пары сообщений: проверяем, что юридически важная оговорка не исчезает до вызова модели.
Как обработать большой поток отзывов пакетами в Transformers без переполнения памяти
batch_size, потоковый источник и честный замер производительности: сохраняем соответствие входов и выходов и тестируем OOM.
Комментарии
Пока тихо. Скажите первое слово