Открыл приложение на минутку. Очнулся через час. Знакомо?
Это не магия и не чтение мыслей, рекомендательная система. Я такие строю уже 4 года, так что сегодня разберем как они устроены под капотом.
Вся задача — одна таблица с дырками 👀
Представь гигантскую таблицу. Строки это пользователи. Столбцы это видео, треки, товары. В ячейках оценки: лайк, дизлайк, покупка.
Проблема в том, что таблица почти пустая. Ты оценил сотню фильмов из каталога в миллион. Заполнено меньше 1% ячеек.
Вся рекомендательная система это ответ на один вопрос: что стоит в пустых ячейках? Предсказал, отсортировал по убыванию, показал топ выдачи. Всё.
Откуда система знает, что тебе зайдёт 🍜
Базовая идея старая и простая: похожим людям нравится похожее.
Ты и ещё тысяча человек лайкнули одни и те же пять сериалов. Они посмотрели шестой и в восторге. Угадай, что появится у тебя в ленте.
Причём явных оценок система почти не видит. Лайк ставит один из ста. Поэтому она смотрит на косвенное: досмотрел ли до конца, дочитал ли, купил ли. Этого добра в сто раз больше, но оно шумное. Клик по кликбейту не значит «понравилось». В видео с собачками залипают все, но это не значит, что тебе нужны собачки в ленте.
Кстати, явный фидбэк, т.е. хорошая оценка, называется explicit feedback, а неявная - допустим досмотрел кино до конца - implicit feedback
За прорыв в этой задаче Netflix когда-то заплатил миллион долларов. Две команды выдали одинаковое качество, и победителя определили по времени отправки решения. Разница — 20 минут.
Почему это сложнее, чем звучит ⌨️
Айтемов в каталоге сотни миллионов. Тяжёлая модель успевает оценить около сотни за те 200 мс, пока ты ждёшь ленту. Прогнать всё через неё нельзя физически.
Поэтому внутри не одна модель, а воронка:
- Быстрый отбор: из миллиарда айтемов дешёвыми методами достаём пару тысяч кандидатов. (Например ALS)
- Ранжирование: тяжёлая модель скорит кандидатов. Чаще всего это градиентный бустинг, а не гигантская нейронка.
- Реранкинг: следим за разнообразием. Если после двух лайков про дайвинг кормить тебя только дайвингом, ты заскучаешь и уйдёшь.
И главная ловушка - FeedBack Loop 😡
Система учится на данных, которые сама же и породила. Она показала, ты кликнул, она сделала вывод, показала ещё. Так надувается пузырь: лайкнул Супермена, и всё, ты навеки в супергероике.
Как с этим борются? Рандомом. В выдачу подмешивают случайные айтемы, около 1%. И тебя из пузыря вытаскивают, и модель получает честные данные, которые сама себе не подстроила.
Что забрать в голову 💙
Под капотом рекомендаций не искусственный сверхразум. Там таблица с дырками, похожести, бустинг и много инженерии. Каждый кусок можно понять, а значит можно и научиться его делать.
Рексис при этом одно из самых денежных направлений в ML: ленты и каталоги есть у каждого крупного сервиса, и везде эта система напрямую делает выручку.
Как-то так. Если тема заходит, могу разобрать отдельные части глубже: холодный старт, устройство воронки, метрики. Накидывайте в комментарии, что интереснее.
Учим тут: https://ml-mentor.ru/
Раскатываем ML кабины | MentorShip
