Всем привет! 🖖
Давно не писал, решил немного рассказать, как дела)
Работаю над проектом, где с помощью ML помогаем техподдержке — и вот что неожиданно оказалось самым непростым:
Обучить модель — это ещё полбеды. Куда сложнее сделать так, чтобы она сама дообучалась без участия человека.
Подумав-подумав, выбрал такой стек:
- MinIO — храним датасеты и обученные модели.
- Airflow — управляет пайплайнами и следит за процессами.
- MLflow — метрики, версии моделей, история экспериментов.
- FastAPI — API для дообучения на GPU.
- Grafana — мониторим модели и инфраструктуру.
🔍 Как определяем лучшую модель?
Каждое обучение завершается валидацией на данных, которых модель не видела. Считаем метрики (точность, F1, recall), сохраняем их в MLflow.
Ночью скрипт проверяет все модели, выбирает лучшую по метрикам, забирает путь из MLflow и подтягивает её из MinIO. В проде всегда работает самая точная версия.
🤖 Что делает модель?
Она автоматически классифицирует обращения, а также помогает правильно маршрутизировать тикеты. Это снижает нагрузку на операторов и ускоряет ответы.
🗂 Откуда берутся данные?
Каждую ночь подтягиваются свежие тикеты, проходят предобработку и при необходимости попадают в дообучение. Так модель остаётся актуальной и не теряет качество.
Отдельно хочу выделить Airflow.
Откровенно говоря, Airflow в этом проекте раскрылся с новой стороны. Я знал, что он удобный, но не думал, что настолько мощный.
Можно настроить запуск пайплайна не просто по расписанию, а, например, когда создаётся новый датасет. То есть если данные изменились — это триггерит дообучение модели.
Если всё хорошо — новая модель уходит в прод. Логи пайплайнов и ошибок отправляются в Telegram, плюс часть мониторинга реализована через Grafana.
🧠 Какая модель используется?
В основе — кастомный классификатор на базе pretrained BERT. Перед этим модель была дообучена на задаче masked language modeling (MLM), чтобы лучше понимать специфичный язык и стиль обращений из нашей предметной области. Затем мы дообучаем её под категории тикетов и типичные формулировки пользователей, дообучаем под специфические категории и стиль обращений. Используем transfer learning, чтобы быстрее адаптироваться к новым данным.
🛡 Как не допустить плохую модель в прод?
Если метрики хотя бы на немного хуже — модель остаётся в тесте. Только стабильно лучшие проходят дальше. Дополнительно есть защита от случайного деплоя через ручную валидацию ключевых изменений.
Автоматизация оказалась не самой простой задачей, но теперь всё крутится почти само.
💬 Если среди подписчиков есть коллеги с ML-пайплайнами — поделитесь своим подходом. Будет интересно сравнить!
#machinelearning #mlops #airflow #mlflow #bert #techsupport #automation #fastapi #grafana #minio #deeplearning #mlpipeline
Post #199
256
AI на дровах 🪵 Почти всё последнее время варюсь в задаче мультиклассовой классификации тестовых данных. Хочу поделиться инсайтом (хотя, может, для кого-то это и очевидно). 🔑 Самое важное в любой ML-задаче — это данные. Чем лучше вы подготовите исходный датасет, тем лучше…

- 🔥 5