Большинство существующих 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-метода под конкретный датасет. Сейчас это набор правил, но мы работаем над более общим механизмом.