Movix.ai

Рекомендации фильмов на основе Deep Learning. Find a perfect match to your mood.

Deep learning
Web
LSTM
TensorFlow

2017

Перейти на

Movix.ai

Читать на

Medium

«Какой фильм посмотреть сегодня вечером?» — приходилось ли вам хотя бы раз отвечать на этот вопрос, придя вечером с работы? Нам — да, и не раз. Здесь мы хотим рассказать о том, над чем мы работали последние полгода: интерактивной рекомендательной системой фильмов Movix.ai на основе Deep Learning, адаптирующейся к предпочтениям пользователей real-time. Мы, как заядлые киноманы, испытывали потребность в таком сервисе, и мы верим, что он будет полезен не только нам.

Идеология — от высокого к земному

Вот фраза, по моему, от J.Schmidhuber-а, которую не получается выкинуть из головы:

Гугл будущего вместе со всеми его сервисами — это одна гигантская LSTM.

Здесь имеется в виду то, что есть одна большая нейронная сеть, которая взаимодействует с пользователем и помогает ему решать различные насущные задачи.

Идея с виду слишком амбициозная, возможно утопическая. Мы постарались “приземлить” эту идею и все же найти ту предметную область, где одна большая нейронная сеть может решать все задачи пользователя. Так родилась мысль построить рекомендательный сервис фильмов, который будет интерактивно взаимодействовать с пользователем, при этом “под капотом” — “навороченная” нейронная сеть, обученная, как говориться, end to end.

Рис 1. Movix

Некоторые параллели и концепции

Сейчас огромный hype вокруг чат-ботов. Видимо, научному сообществу не терпится пройти тест Тьюринга, а большим компаниям (например, банкам) уволить персонал из тех. поддержки. Если говорить серьезно, то по нашему мнению, общаться с компьютером текстом, хоть и на естественном языке, удобно далеко не всегда. Во многих случаях с компьютером удобнее взаимодействовать на “языке кликов”.

С точки зрения рекомендательного сервиса, идеальный сценарий — система понимает пользователя с полуслова, а в нашем случае — с “полуклика”.

Многие рекомендательные системы построены по принципу similar items — то есть для каждого фильма есть заранее заданный набор похожих на него фильмов. При этом никак не учитываются предпочтения конкретного пользователя и то, что он, вполне возможно, все эти фильмы уже видел. Как следствие: пользователь вынужден рыться в куче статических подборок и выискивать что-то новое для себя, не имея возможности как-то повлиять на выдачу рекомендаций. Мы, в свою очередь, считаем, что интерактивность системы является одним из ключевых элементов.

Наша концепция такова: регистрации не требуется, пользователь заходит на сайт, делает несколько кликов по фильмам или тегам и получает рекомендации, отражающие его сегодняшнее настроение. В системе есть две сущности, которые прогнозирует система: фильмы и теги. Если поиск фильма под настроение — это конечная цель пользователя, то теги — это вспомогательный элемент, отражающий сегодняшние предпочтения пользователя, которые система пытается угадать.

Рис 2. Movix

Стек технологий и обучающие выборки

Нейронная сеть на основе LSTM построена при помощи фреймворка TensorFlow.

Для создания обучающей выборки мы использовали датасет MovieLens, откуда брали предпочтения пользователей по фильмам. А еще мы спарсили IMDB и подключили Movie DB API для получения базы данных тегов.

API взаимодействует с TensorFlow посредством ZeroMQ, а хранением и поиском информации о фильмах занимается Elastic Search. Фронтенд сделан на Vue.js и Element UI.

Возможности

Система позволяет выполнять следующие действия:

  • Лайкать и дислайкать как фильмы, так и теги
  • Перетаскивать выбранные фильмы по важности для системы (чем правее, тем важнее)
  • Фильтровать выдачу по рейтингу и дате выхода
  • Просматривать трейлер и кадры из фильма
  • Сохранять понравившиеся фильмы

Все это позволяет гибко выстраивать предпочтения, например, лайкнуть несколько стареньких любимых фильмов заданной тематики, а затем, выбрав в фильтре “2010s”, получить похожие, но более свежие фильмы.

Решение пока никак не адаптировано под мобильные устройства, лучше смотреть с компьютера или планшета.

Дальнейшая работа

Далее скажем несколько слов о доработках с точки зрения Deep Learning:

  • Negative feedback или кнопка dislike. Пока реализация — это маленький hack вне модели. Нужно, безусловно, эту ситуацию моделировать при обучении. Текущие попытки интегрировать dislike в процесс обучения не привели к сильному изменению поведения модели. Зачастую, если некоторый фильм занимает высокую позицию в выдаваемых рекомендациях, то dislike этого фильма сильно не понижает его результирующую позицию. Эта проблема должна решаться на уровне архитектуры нейронной сети или функции ошибки.
  • Более быстрая выдача релевантных фильмов. Сейчас иногда требуется ввести более одного фильма, чтобы получить список релевантных фильмов. Опять-таки это вопрос к тому, чего мы требуем от сети на этапе обучения, т.е. к функции ошибки. Сейчас модель пытается угадать следующий фильм, понравившийся пользователю. Если дан всего один лайкнутый фильм, то стратегия, состоящая в том, чтобы включить в результат рекомендаций популярные фильмы, не лишена смысла — так и поступает модель в ряде случаев.
  • Адаптировать ряд современных концепций, таких как: attention, beam search, bi-directional, и др.
  • (Здесь будут опять “мысли о высоком”). Хочется сделать действительно умную нейронную сеть в рамках очень узкой предметной области. Например, нейронная сеть могла бы задавать какие-либо вопросы пользователю, чтобы он быстрее нашел тот самый фильм. Мы можем зафиксировать список вопросов и учить сеть задавать эти вопросы на этапе обучения. Ведь умение задавать правильные вопросы — один из признаков интеллекта. Также важно, чтобы знание ответов на задаваемые вопросы действительно помогало. Примерами таких вопросов могли бы быть: “Вам интересны фильмы до года X или после?”, “Нравится ли вам актер/режиссер Y”, и т.д. Хорошая новость состоит в том, что в обучающих выборках достаточно данных, чтобы научить систему задавать такого рода вопросы и эффективно использовать ответы на них. Плохая — вопросы эти какие-то слишком тривиальные, хочется чего-то большего. Попробую сформулировать: хочется максимизировать “great user experience” и именно этому end-to-end учить нейронную сеть.
Следующий проект

Беспилотный автомобиль