AutoML для NLU без ручной настройки: представляем OpenAutoNLU

AutoML для NLU без ручной настройки: представляем OpenAutoNLU

Большинство существующих AutoML-библиотек либо не поддерживают обучение моделей для понимания естественного языка (NLU) «из коробки», либо не справляются с качественным детектированием OOD-запросов (out of scope), либо требуют глубокой экспертизы для настройки.

Почему AutoML в NLP всё ещё требует ручной настройки

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

Типичные проблемы AutoML в NLP:

  • Подбор гиперпараметров требует либо глубоких знаний, либо ресурсоёмкого перебора всех комбинаций.
  • Качество данных редко проверяется встроенно: ошибки, дубли, перекосы по классам влияют на модель, но их приходится чистить вручную.
  • OOD-запросы (вне домена) в реальной среде неизбежны, но большинство решений либо игнорируют их, либо требуют заранее размеченных примеров, что не всегда возможно.

Мы в MWS AI разработали OpenAutoNLU — опенсорсную библиотеку, которая решает эти проблемы и позволяет обучать NLU-модели с минимальным вмешательством разработчика.

Чем OpenAutoNLU отличается от других решений

OpenAutoNLU — это Python-библиотека с простым API для прототипирования и запуска NLU-моделей в продакшен.

Ключевая особенность — автоматический выбор режима обучения на основе распределения классов и количества примеров. Это позволяет избежать ручного принятия архитектурных решений.

Фреймворк поддерживает три режима обучения:

  • AncSetFit — few-shot подход с якорными примерами и contrastive learning, при очень малом количестве данных (2–5 примеров на класс).
  • SetFit — с использованием sentence-transformers и простого классификатора, при умеренном объёме данных.
  • Full fine-tuning — полная дообучение трансформера с опциональной оптимизацией гиперпараметров, при достаточном количестве примеров.

Встроена поддержка OOD-детекторов с тремя методами: Marginal Mahalanobis Distance, Centroid Mahalanobis Distance и MaxProb. Каждый метод эффективен в разных сценариях распределения данных.

Особенность OOD-пайплайна — генерация синтетических out-of-scope примеров для настройки порогов. Это позволяет обучать OOD-голову без учителя, хотя поддержка ручной разметки также доступна.

Также встроены LLM-функции:

  • Аугментация данных через генерацию дополнительных примеров.
  • Создание синтетических тестовых выборок на основе few-shot-примеров.

Синтетические тесты позволяют оценить качество классификатора с точностью до 95%. Модуль поддерживает любой OpenAI-совместимый API, включая локальные модели.

Архитектура фреймворка

OpenAutoNLU построен как многослойный пайплайн. Основной модуль auto_classes предоставляет четыре публичных класса для запуска обучения и инференса.

Каждый пайплайн наследуется от AbstractTrainingPipeline или AbstractInferencePipeline. В них фиксирована последовательность шагов: загрузка данных, диагностика, выбор метода, обучение, оценка, экспорт.

Методы обучения

Все алгоритмы собраны в модуле methods и реализованы как подклассы базового метода:

  • Finetuner / FinetunerWithOOD — полное дообучение трансформера с ранней остановкой и опциональной оптимизацией через Optuna.
  • SetFitMethod / SetFitOOD — contrastive learning с sentence-transformer и логистической регрессией.
  • AncSetFitMethod / AncSetFitOOD — SetFit с якорными метками для few-shot обучения.
  • TokenClassificationFinetuner — NER в формате BIO.

Выбор метода происходит автоматически внутри пайплайна, без изменения внешнего API.

Работа с данными и LLM

Модуль data отвечает за загрузку и подготовку данных. Для классификации используется SimpleDataProvider, для NER — SimpleNerDataProvider. Они нормализуют формат и готовят данные под задачу.

Встроена аугментация на базе Augmentex (символьный и словарный уровни) для балансировки. Модуль llm_pipelines добавляет генерацию данных, анализ домена и создание тестовых выборок.

Особенности NER-пайплайна

Поддерживаются два формата аннотаций: prodigy-like JSON и встроенный формат brackets. Оба приводятся к единой BIO-схеме. Прямое чтение BIO будет добавлено в следующем релизе.

Разделение на train/test выполняется на уровне сущностей, а не текстов. Метрики — precision, recall, F1, с учётом частичного совпадения (например, правильный тип, но ошибка в границах).

Экспорт и инференс

Модель экспортируется в ONNX и поставляется с токенизатором, маппингом меток и meta.json. Это позволяет сразу использовать её в продакшене.

Менеджер инференса автоматически определяет доступное окружение — CUDA, CoreML или CPU — и запускает модель в подходящем режиме. Размер батча подбирается динамически, чтобы избежать OOM-ошибок.

Пайплайн обучения классификации текстов

Диагностика качества данных

OpenAutoNLU может оценить корректность разметки и выявить примеры, требующие переразметки. Диагностика включает:

  • Retag — находит расхождения между предсказанием и разметкой.
  • Uncertainty — выявляет примеры с низкой уверенностью (softmax ниже порога).
  • V-Information — определяет, даёт ли пример обучающий сигнал или является шумом.
  • Dataset Cartography — классифицирует данные на легкообучаемые, пограничные и труднообучаемые.

Для NER используется агрегация меток по методу Dawid-Skene с Monte Carlo dropout. Это позволяет выявлять расхождения на уровне отдельных токенов.

Подготовка выборки

Пайплайн анализирует распределение классов и выбирает подходящий метод обучения. При малом количестве примеров — апсемплинг через Augmentex и, при необходимости, LLM.

Если для few-shot режима классы слишком велики, выборка ограничивается: до 80 примеров для SetFit, до 5 — для AncSetFit. Это предотвращает нестабильность из-за дисбаланса.

После апсемплинга пайплайн пересчитывает оптимальный режим обучения. Балансировка влияет не только на качество, но и на стратегию обучения.

Подбор параметров и обучение

При full fine-tuning целевой метрикой является macro-F1 на валидации. При включённой оптимизации используется Optuna (TPE-семплер) для подбора learning rate, batch size и weight decay. По умолчанию — 10 итераций с ранней остановкой при 5 шагах без улучшения.

В few-shot режимах гиперпараметры не подбираются — используются заранее оптимизированные настройки, включая число итераций и learning rate.

Генерация тестового набора на базе LLM

При отсутствии тестового датасета можно использовать LLM для генерации синтетических примеров. В экспериментах использовался GPT-4o-mini. На выборках до 80 примеров на класс разница между синтетическим и реальным тестом не превышала 5%.

Модуль не привязан к одной модели: поддерживается любой OpenAI-совместимый API.

Эксперименты и результаты

Тестирование проводилось на сервере с Intel Xeon Gold 6448H, NVIDIA H100 (80 ГБ VRAM) и 756 ГБ ОЗУ. Время измерялось в реальном времени (wall-clock time).

Оценивались четыре датасета: banking77, massive, hwu64, snips — для бинарных и многоклассовых сценариев. Прогоны выполнялись при малом (5–10 примеров), среднем (81–100) и полном объёме данных. Результаты усреднены по трём запускам.

Сравнение проводилось с AutoIntent, AutoGluon, LightAutoML и H2O. Метрики: F1-macro, F1-in-scope, F1-OOD. Где возможно, использовался bert-base-uncased; для E5-совместимых пайплайнов — intfloat/multilingual-e5-large-instruct.

На малых выборках OpenAutoNLU превосходит конкурентов. Благодаря автоматическому переключению между режимами он избегает нестабильности при раннем fine-tuning и потолка в few-shot.

На больших выборках результаты сопоставимы с сильными решениями — библиотека не теряет в качестве.

Особенно заметны преимущества в OOD-сценариях. Тестировались три режима:

  • OOD-aware — OOD-примеры есть в обучении.
  • OOD-in-test — OOD-примеры только в тесте.
  • OOD-unaware — только in-domain данные в обучении, OOD — только в тесте (ближе к реальной эксплуатации).

В сценарии OOD-unaware OpenAutoNLU показал лучшие или сопоставимые результаты на трёх из четырёх датасетов. Единственный конкурент — AutoGluon, но он требует больше ресурсов.

Итог: OpenAutoNLU не только конкурентен в стандартной классификации, но и превосходит аналоги на малых данных и в OOD-сценариях. Это особенно важно для сценариев, где ручная настройка начинается с первых шагов.

Для бизнеса это означает сокращение времени и стоимости вывода моделей в продакшен — в чат-ботах, колл-центрах, системах поддержки и внутренних сервисах — без потери точности и с встроенной диагностикой данных и OOD.

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

Читать оригинал