Команда "MLные" в составе Даниила Хижнякова, Матвея Зылева и Михаила Кошелева заняла 3 место на Хакатоне "Цифровой прорыв – 2024: Сезон искусственного интеллекта" и выиграла 100 000 рублей. Решая задачу от компании GeekBrains, они разработали чат-бот "Второй пилот для куратора / специалиста поддержки".
Я, Хижняков Даниил, студент 4 курса МОАИС. Первый раз попробовал формат хакатона на 2 курсе, когда уже получил базовые знания в сфере AI. В настоящее время продолжаю принимать активное участие в подобных мероприятиях. Это отличный опыт и возможность за короткий промежуток времени получить большое количество теоретических и практических знаний.
Наша команда их трех человек была рада принять участие в очередном хакатоне "Цифровой прорыв" и занять почётное 3 место. Мы решали задачу от компании GeekBrains, разрабатывая чат-бот "Второй пилот для куратора / специалиста поддержки".
Одной из основных проблем, с которой мы столкнулись, было недостаточное количество примеров. Поэтому мы применили методы генерации вопросов с помощью LLM GigaChat и YandexGPT3, расширив изначальный набор из 70 до более чем 2000 вопросов. Но, так как сгенерированные вопросы характеризовали промпты с той же точки зрения, что и изначальная выборка, это не увеличило обобщающую способность модели. Поэтому мы сами придумали промпты, которые характеризуют разницу между классами, а потом размножили все сэмплы, получив 6000 примеров.
Далее мы приступили к классификации вопросов. В финальном решении мы использовали лемматизацию и векторизацию текста(TF+IDF), а затем применили ансамбль из catboost, logreg и SVM для определения категории вопроса. Почему ансамбль? Так получилось, что эти модели по-разному смотрят на задачу, поэтому их ансамбль позволил увеличить обобщающую способность модели ра категориях. Внутри каждой категории мы определили logreg, который хорошо запоминает признаки классов в своей категории. На приватной выборке решение показало f1 score 0.8.
В итоге, наше решение представляет собой асинхронного чат-бот для Telegram, который интегрирует все модели и имеющий бэкенд, упакованный в docker контейнер для быстрого развёртывания и стабильной работы бота. Вся нагрузка распределяется между процессами равномерно, что позволяет сервису принимать сразу большой объем пользователей. Для хранения истории вопросов студентов, сохранения контекста (это очень важно для дообучения) и прочей информации мы использовали асинхронные запросы в sqlite, она легко масштабируется до postgresql.
Новость подготовил Даниил Хижняков, студент 4 курса направления МОАИС, ШКН ТюмГУ