ML в KION
МL (machine learning или машинное обучение) — методы искусственного интеллекта для создания самообучающихся систем. Например, те же нейросети. На конференции МТС True Tech Day Алексей Жиряков — руководитель направления в онлайн-кинотеатре KION — рассказал, как его команда использует МL. Делимся интересными моментами.
Всё как в обычном магазине
Первым делом давайте определимся, что такое витрины и полки в KION.
Мы запускаем онлайн-кинотеатр и попадаем на главную витрину.
Там есть вкладки «Фильмы», «Сериалы» — это тоже витрины.
Витрины состоят из полок.
Чтобы они были красивые, сочные и интересные, нужно несколько видов полок. Самая первая полка на главном экране — баннерная карусель. Есть обычные полки с видеоконтентом и суперполки, которые состоят из обложек. Обложки могут вести как на другую полку, так и на определённый тайтл (т. е. фильм/сериал/мультфильм).
Моя. Персональная. Быстрая
KION готовит для каждого пользователя персональную витрину.
За каждый запрос применяется 50+ бизнес-правил и всё это — быстрее, чем за 300 миллисекунд. К чему мы стремимся? К тому, чтобы KION смотрели больше, дольше и как можно чаще возвращались.
И МL даёт +5% к смотрению. Разработчики готовят модель, проводят пользовательские A/B-эксперименты и смотрят на результат. Если метрики устраивают, решение выкатывается в продакшн.
Как собрать витрину
Когда пользователь запускает KION или переключается между витринами, запрос приходит на back. В KION есть блендер, в который поступает запрос пользователя. Блендер компонует витрину, применяет 50+ бизнес-правил. Например, «вырезать просмотренные» или «вырезать тайтлы, которые нельзя показывать для этого устройства». И возвращает запрос.
Нужно понимать, что МL не генерирует полки, названия и тем более не снимает фильмы — он оперирует фактурой, которая уже есть. У KION больше тысячи полок. МL берёт готовые, расставляет их по вертикали и персонально ранжирует наполнение.
Недавно МL внедрили в баннерную полку. По итогам A/B-экспериментов здесь победил симбиоз человека и МL. Первые 5 мест на главной отдаются редакции, которая расставляет нужные новые тайтлы. А остальное уже заполняет МL.
При этом алгоритмы учитывают ручной бустинг, статистику смотрения и взаимодействия пользователей, новизну и тренды.
Такие разные полки
Редакторские полки — те, которую вручную заполняют сотрудники редакции. За ними приходилось постоянно следить, поэтому появились автополки.
Автополки. Редакция пишет правило, его реализуют и наполняют по нему нужные полки. Автополки могут быть простыми — по жанрам и другой метаинформации («Русские комедии») и сложными («Популярное сейчас»).
Для «Популярного сейчас» берётся статистика за 7 дней самого популярного и того, что чаще всего ищут. Эта полка — персональная, то есть для каждого своя.
Для полки «Смотреть также» берутся тайтлы, которые пользователи посмотрели. Из них нейронка генерирует векторы. Затем считается расстояние между вектором просмотренного и рандомного тайтла, который пользователь не смотрел. И берутся наиболее близкие к текущему тайтлы.
Наша цель
Мы хотим, чтобы витрина для пользователей была разной каждый день — даже если человек пришёл и ничего не посмотрел.
Это достигается за счёт рандомизации. Плюс каждые сутки у нас новая статистика, переобучение, учёт новизны тайтлов.
Но есть и сложности
С одного аккаунта могут смотреть мультики, фильмы и сериалы. То есть им могут пользоваться взрослые и дети, поэтому нужно уметь сочетать это на витрине.
Скорость изменений. Информационная повестка и интересы пользователей меняются постоянно. Если пользователь два дня смотрит комедии, нужно ли везде показывать ему одни комедии? Сейчас для machine learning мы используем глубину просмотра 180 дней.
Не все пользователи одинаково полезны. Некоторые заходят и смотрят только популярное, для них сложно построить логическую цепочку.
Иногда человек посмотрел тайтл, но не стал смотреть похожий, который мы ему рекомендовали. Например, он выбрал фильм про Древний Рим, но не будет смотреть более старую или картину с худшим рейтингом. Это не всегда прозрачно.
Правила никто не отменял
Помимо МL у нас есть бизнес-правила, которые применяются в работе.
1. Бустинг
Редакция может поставить флаг у тайтла, чтобы он бустилcя, и тогда он будет вставать на первое место в полке, которую показывает МL. Бустинг нужен, пока не набралась статистика. А ещё на бустинг можно поставить тайтл, у которого идёт промо по ТВ или в других источниках.
2. Расстановка полок на витрине
Карусель идёт на первом месте не просто так, а потому что мы её туда ставим. У редакции есть возможность для каждой из платформ расставить полки по-своему. Они делают это с помощью CMS.
3. Дедуплицирование
Бывает, что модель слишком настойчиво предлагает посмотреть какой-то тайтл. Он может располагаться сразу в нескольких полках в зоне видимости. Мы применяем дедуплицирование и оставляем тайтл только в верхней полке.
4. Удаление просмотренных
Мы удаляем просмотренные тайтлы, чтобы не выжигать показы и экономить место под другие. Например, вы начали смотреть тайтл и его больше нет в этой полке, но он появится в «Продолжить просмотр». Недавно мы перестали удалять просмотренные тайтлы для детей, потому что они любят смотреть одно и то же много раз подряд.
5. Разнос франшиз
Чтобы ликвидировать баннерную слепоту, мы начали разносить франшизы, которые часто имеют похожие баннеры. Редакция размечает франшизы специальными тегами, которые мы проверяем. Если они совпадают и тайтлы стоят рядом, мы их разносим.
Доверяй, но проверяй
Можно сделать много классных фич, каждая из которых будет работать в каком-то проценте случаев, а все вместе они сработают всего для 1% пользователей. А переобучение, например, может сломаться.
Нас это не устраивает. Поэтому мы это контролируем и постоянно проверяем новизну персональных витрин и полок, количество платного контента и бустинговых тайтлов.