- Университет: ИТМО
- Авторы курса: крутые специалисты из МТС
- Разработка микросервиса с использованием тестов и линтеров
- Валидация и метрики в рекомендательных системах
- Бейзлайны (популярные айтемы)
- Модели, основанные на kNN
- Модели, основанные на матричной факторизации: ALS, LightFM
- Методы приближенного поиска соседей
- Факторизация матриц с помощью нейронных сетей
- Двухуровневые модели
- Обучение ранжированию
poetry run uvicorn src.app:app --port 5000
poetry run pytest ./tests -W ignore::DeprecationWarning
poetry run pylint src
poetry run flake8 src
poetry run black --check src
☑ Написать с нуля сервис с простой моделью
☑ Получить токен и зарегистрировать модель в телеграмм-боте
☑ Добавить аутентификацию и тесты на нее
☑ Предусмотреть, чтобы сервис возвращал 404 ошибку, если задано неверное имя модели и покрыть тестами
☑ Добавить описание возможных ответов в сваггер
☑ Писать чистый и эффективный код, соблюдая PEP8
☑ Разработать класс для расчёта метрик на основе кросс-валидации
☑ Разработать класс для визуального анализа рекомендаций
☑ Провести тестирование классов в чистом воспроизводимом ноутбуке с использованием:
- Модели: RandomModel(random_state=32), PopularModel из rectools
- Метрики: 2 ранжирующие, 2 классификационные, 2 beyond-accuracy для порогов 1, 5, 10. MAP обязательно
- Сплиттер: TimeRangeSplitter из rectools, 3 фолда для кросс-валидации по неделе, исключение холодных юзеров и айтемов и просмотренных айтемов
- Визуализация рекомендаций и историй просмотров для юзеров [666262, 672861, 955527]. Для айтемов обязательно отобразить названия, жанры и количество просмотров в датасете
☑ Рефакторинг модели с семинара
☑ Провести эксперименты с userKnn моделью в ноутбуке:
- придумать, что делать с холодными пользователями в тесте (3 балла)
- сделать кол-во рекомендаций равным N, а не меньше N (3 балла)
- реализовать тюнинг гиперпараметров и сделать выводы (3 балла)
☑ Обернуть модель в сервис (максимум 12 баллов)
- обучение модели в ноутбуке
- сохранение артефактов модели
- загрузка артефактов при старте приложения
- запрашивание рекомендаций "на лету" из более легкой версии модели
☑ Создать базовый класс для выдавания популярных рекомендаций холодным пользователям и фильтрации уже просмотренных айтемов у горячих пользователей
☑ Побить метрику на лидерборде map@10 = 0.075 (получено в итоге 0.088) с моделью из lightfm и с использованием ANN (5 баллов)
☑ Реализовать тюнинг гиперпараметров для моделей из implicit, lightfm с использованием Optuna (3 балла)
☑ Воспользоваться методом приближенного поиска соседей для выдачи рекомендаций: Flat и HNSW из библиотеки faiss (3 балла)
☑ Сделать рекомендации для пользователей на основе их фичей (3 балла)
☑ Обернуть модель в сервис и выдавать рекомендации "на лету" (12 баллов)
☑ DSSM Model:
- Использовать информацию о качестве взаимодействия юзеров с айтемами для более репрезентативного сэмплирования. (3 балла)
- Обернуть в сервис, который должен критериям читаемости и воспоизводимости. (5 балла)
☑ Autoencoder:
- Значимо изменить архитектуру модели (2 балла)
- Пробить скор бейзлайна разработанной моделью 0.075. (2 балла)
- Обернуть в сервис, который должен критериям читаемости и воспоизводимости. (5 балла)
☑ Frameworks:
- Проэкспериментриуйте с различными моделями из выбранного фреймворка(recbole или другие рассмотренные фреймворки), выбрать лучшую. (2 балла)
☑ Подготовить юпитер-ноутбук с обучением ранкера (6 баллов):
- Подготовка датасета с кандидатами от ваших прошлых моделей
- Обучение ранкера
- Сравнение метрик двухэтапной модели и моделей первого уровня на тестовой выборке
☑ Ранкер умеет работать с холодными пользователями (4 балла):
- На первом уровне есть модель для холодного старта
- Всего на первом уровне не менее двух моделей
- Среди признаков ранкера есть хотя бы один, определяющий холодность пользователя (длина истории просмотров, общее время смотрения или что-либо еще)
☑ Сравнить между собой разные библиотеки (XGBRanker и LGBMRanker) по времени и результатам обучения (2 балла)
☑ Сервис:
- Добавить в сервис двухэтапную модель (офлайн) (6 баллов)