Как найти хороший фильм для просмотра?

Периодически у многих из нас возникает желание посмотреть какой-нибудь хороший фильм. Кто-то ищет кино на торрент-трекерах, кто-то – на «Кинопоиске» или IMDB. Подобные ресурсы предлагают огромное количество картин, среди которых выбрать хорошую довольно сложно.

home cinema

По данным Американской ассоциации кинокомпаний (MPAA), ежегодно киноиндустрия выпускает свыше 7 тыс. фильмов. А ассортимент крупнейшего потокового сервиса Netflix включает 36 тыс. картин. Этого числа будет достаточно, чтобы непрерывно смотреть фильмы в течение шести с половиной лет. Как же среди этого обилия выбрать достойную картину?

♥ ПО ТЕМЕ: .

Случайный фильм на «Кинопоиске»

Случайный фильм на

При нажатии на иконку поиска на главной странице сервиса откроется страница «Случайный фильм» (ссылка выше). Здесь можно указать нужные параметры: год выпуска, жанр, страну производства. Далее алгоритм подберет и отобразит подходящие под критерии варианты с учетом их рейтинга – не ниже 6 баллов, ленты с оценками выше 7 баллов будут помечены зеленым цветом.

♥ ПО ТЕМЕ: 29 логотипов с шедеврально скрытым подтекстом.

Расширенный поиск «Кинопоиска»

Расширенный поиск

Пожалуй, этот способ является лучшим. Как нетрудно догадаться, расширенный поиск позволяет искать фильмы не только по году и жанру, но и по другим параметрам, например, по киностудии, авторам, тексту и ключевым словам.

Помимо этого инструмента, обязательно обратите внимание на ТОП-250 фильмов Кинопоиска.

♥ ПО ТЕМЕ: Обратная съемка на iPhone, или как снимать видео «задом наперед».

Списки фильмов по темам на Кинопоиске

Как найти лучшие фильмы про любовь, драконов или семейные комедии ? Нет ничего проще.

Разделы популярных фильмов на тематических русскоязычных сайтах и торрент-трекерах

Разделы популярных фильмов на тематических русскоязычных сайтах и торрент-трекерах

Рунет содержит множество крупных сайтов-библиотек с популярными фильмами. Яркий пример такого ресурса – rezka.ag.

Кроме того, практически на любом торрент-трекере есть страница с топовыми раздачами, которые чаще всего (но не всегда) включают в себя киноновинки. Правда, достойные фильмы могут соседствовать с откровенным «мусором».

♥ ПО ТЕМЕ: .

Лучшие англоязычные рекомендательные кино-сервисы

Топ-250 IMDB

Топ-250 IMDB

Данная страница содержит 250 кинолент, отсортированных в зависимости от рейтинга на IMDB. Это неплохая возможность подобрать действительно стоящий фильм.

♥ ПО ТЕМЕ: Почему птиц не бьет током на проводах.

A Good Movie to Watch

A Good Movie to Watch

A Good Movie to Watch – сайт, редакторы которого вручную подбирают киноленты на основе ряда критериев, в том числе зрительского рейтинга и оценок кинокритиков. Кроме того, основной акцент делается на не слишком популярные фильмы, поэтому вероятность того, что в подборке будут встречаться уже знакомые вам картины, сравнительно мала.

♥ ПО ТЕМЕ: Как появилось слово «Алло», и что говорят, принимая телефонный звонок в других странах.

Good Movies List

Good Movies List

Ассортимент Good Movies List формируется на основе рейтинга фильмов на Rotten Tomatoes, Metacritic и IMDB. Дизайн ресурса выглядит малопривлекательно, но вам и не потребуется проводить на нем много времени.

♥ ПО ТЕМЕ: Замедленное видео на Айфоне: как снимать и настраивать качество, какие iPhone поддерживаются.

WMSIWT

WMSIWT

WMSIWT (What Movies Should I Watch Tonight, в переводе «Что посмотреть сегодня вечером»). Как и в случае с A Good Movie to Watch, редакторы сайта подбирают фильмы вручную. При переходе на WMSIWT сразу начинается воспроизведение трейлера одной из кинолент.

♥ ПО ТЕМЕ: Самые кассовые фильмы в истории кино: топ-100.

Мы в DeepSystems.io занимаемся созданием решений и продуктов на основе машинного обучения и Deep Learning. Среди примеров задач: создание мозгов для беспилотного автомобиля и систем видеоаналитики состояния дорожного полотна и аэропортов. Не последнее место в наших задачах занимают рекомендательные системы. Навязчивая идея создания собственной системы рекомендаций давно не дает нам спокойно спать.

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

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

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

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

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

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

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

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

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

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

Зачем тут Deep Learning

Могут возникать резонные вопросы по типу: «Зачем городить большую нейросетевую модель, когда уже много лет существуют и хорошо работают методы на основе коллаборативной фильтрации?”

Отвечать будем постепенно. Говоря про коллаборативную фильтрацию, надо очень четко разделять два следующих вида задач: (1) rating prediction и (2) top N recommendations.

Задача rating prediction куда более популяризирована и, соответственно, по ней куда больше статей и open source библиотек, чем по задаче top N recommendations. Причина — Netflix Challenge (2006–2009 гг) с призовым фондом $1 млн, в рамках которого, требовалось спрогнозировать, какой рейтинг поставит пользователь u фильму i.

Однако в большинстве сценариев, интересных с точки зрения бизнес приложений, требуется выдавать именно top N recommendations. Сюда попадают случаи по типу: на основе исторических данных по конкретному пользователю показать 10 товаров, которые он, скорее всего, купит или, как в нашем случае, показать 10 фильмов, которые он скорее всего захочет посмотреть.

Конечно, задачу (2) можно наивным способом свести к задаче (1) следующим образом: берем пользователя, прогнозируем рейтинги для всех фильмов из нашего каталога, сортируем фильмы по убыванию прогнозов рейтингов, далее берем top 10 фильмов и показываем их. Звучит как хорошая идея, только вот есть одна проблема — это не работает (испытано на себе). Т.е. когда глазами смотришь на результат, то мягко говоря, не нравится (метрики также отражают внутренние ощущения)!

Больше про rating prediction здесь не говорим, возвращаемся к top N recommendations. Снова появляются два пути решения задачи: (a) разновидность Matrix Factorization, (b) разновидность k-nearest neighbours.

C Matrix Factorization методами есть следующая проблема — они не интерактивны, в том смысле, что если пользователь добавил рейтинги к какому-либо фильму, то чтобы обновить рекомендации для него, нужно заново проделать процедуру факторизации. Поскольку мы хотим пересчитывать рекомендации «налету”, для нас это неприемлемо.

Nearest neighbours интерактивны по своей сути. Pedro Domingos данную группу методов относит к классу «Lazy machine learning”, поскольку обучение для этих методов равно сохранению в БД, т.е. бесплатно по времени, а вся работа перекладывается на этап inference. Но тут вопрос выбора метрики будет стоять остро и, если потребуется добавить работу с другими сущностями по типу тегов, то вопрос по метрике встанет еще острее.

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

Задача Top N рекомендаций в терминах Deep Learning

Революция Deep Learning сначала пришла в область распознавания речи, потом в компьютерное зрение, далее — в обработку естественного языка (NLP). Многие задачи NLP сводятся к ответу на вопрос: каково распределение вероятностей для следующего слова, если нам известны N предыдущих слов? Или по простому — к прогнозированию следующего слова в предложении (в тексте).

В большинстве NLP задач большие рекуррентные нейронные сети (LSTM) доминируют над другими методами, т.е. нейронные сети неплохо могут предсказывать, какое слово будет следующим.

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

Рассмотрим очень простой пример:

100 200 123 /0 100 10 300 /0 1 2 3 4 5 /0

Отсюда видно, что

  • В нашей БД есть 3 пользователя
  • Одному нравятся фильмы с идентификаторами: 100 200 123
  • Другому: 100 10 300
  • Третьему: 1 2 3 4 5
  • «/0” — спец. символ для разделения пользователей между собой
  • Идентификаторы пользователя не важны, важны только идентификаторы фильмов

Далее, в теории, можно взять state of the art NLP модель и научить ее прогнозировать следующий идентификатор в строке, что на этапе эксплуатации и будет представлять собой фактическую рекомендацию.

Более года назад, взяв открытый датасет MovieLens и один из NLP проектов на torch7, мы проделали описанную выше процедуру и получили первый прототип, рекомендующий фильмы.

Но мы хотели большего, как в терминах качества рекомендаций, так и в Deep Learning аспектах.

Фильмы плюс теги, putting it all together

Гипотеза состоит в том, что позволив пользователю оперировать как фильмами, так и тегами, мы ускоряем его путь к списку фильмов, отражающих его сегодняшнее настроение.

Возникает задача построения архитектуры нейронной сети, способной работать с двумя упомянутыми сущностями. Укрупненная архитектура представлена на рисунке 1 ниже:

Архитектура нейронной сети на примере построения рекомендаций для пользователя, который выбрал (лайкнул) три фильма — Avatar, District 9, I’m Legend и два тега — Dystopia, Police. Блок Emb означает Embedding, Avg — Average, FC — Fully Connected.

С каждым фильмом, который лайкнул пользователь, связан фиксированный, заранее известный набор тегов. Идентификаторам лайкнутых фильмов ставятся в соответствие вектора (embedding), тоже самое происходит и с тегами. После embedding-га вектора тегов усредняются. Таким образом, для очередного «лайкнутого” фильма входом на LSTM является вектор, образованный соединением (concat) embedding-га этого фильма и усредненного embedding-га тегов, соответствующих этому фильму и следующему в последовательности фильму. Обработка тегов — наиболее непрозрачная часть, постараемся прояснить это чуть позже в тексте.

К выходу 2-х слойной LSTM (выходной вектор правой верхней LSTM ячейки) применяется два отдельных полносвязных слоя (FC). Далее softmax слои позволяют оценить вероятности лайка по каждому фильму и каждому тегу из имеющихся в базе. Пользователю показываются top N фильмов и тегов.

Еще несколько слов о работе с тегами. С точки зрения качества рекомендаций, теги могут быть полезны даже, если мы их непосредственно не прогнозируем. Они дают модели больше информации, что отдельные фильмы могут быть похожи друг на друга, например, когда фильмы вместе практически не встречаются, но имеют общие теги (на рисунке — это «tags associated with movies”). Другой сценарий — позволить пользователю вместе с фильмами лайкать и теги (на рисунке — «tags chosen by user”). Важно, что данный сценарий мы можем моделировать на этапе обучения. Изначально нейронная сеть прогнозирует следующий фильм, который понравится пользователю, исходя из предыдущих понравившихся фильмов, но мы ведь знаем теги следующего фильма в последовательности! Поэтому, значительную долю обучения, мы можем заставить модель решать следующую задачу: зная историю фильмов и некоторый набор тегов следующего фильма в последовательности, угадывать, какой именно это фильм (здесь удобной была бы запись в терминах условной вероятности, но в рамках данного поста решили обойтись без формул. При наличии интереса, напишем более технический пост). Также отметим, что в рассматриваемом сценарии может не быть лайкнутых фильмов — пользователь, например, выбрал группу разноплановых тегов и все-равно получает рекомендации.

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

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

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

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

Фронтенд сделан на Vue.js и Element UI.

Иногда после просмотра интересного фильма хочется посмотреть что-нибудь в таком же духе, с похожей атмосферой и темой. К сожалению, онлайн-кинотеатры не всегда угадывают наши предпочтения. К счастью, появился новый независимый сервис под названием Cinetrii, который имеет более сложный алгоритм работы, основанный на многочисленных обзорах фильмов. Он абсолютно бесплатный, простой в использовании и действительно эффективный! Прочтите нашу статью, чтобы узнать, как работает Cinetrii!

Что такое Cinetrii?

Cinetrii – киносервис, который предоставляет информацию о фильмах, похожих на Ваши любимые картины (то есть на те фильмы, которые Вы указываете в строке поиска).
Вы наверняка знакомы с тем, как работают Netflix или Amazon Prime: Вы посмотрели фильм, а потом Вам предлагают фильмы, похожие по жанру, главному герою или другим, иногда поверхностным, характеристикам. Cinetrii работает иначе. Его алгоритм делает более глубокую выборку, сканируя детали сюжета, ссылки на другие работы и даже учитывая возможное влияние одного режиссера на другого!

Как пользоваться Cinetrii?

Интерфейс Cimetrii очень простой и удобный. Чтобы найти похожие фильмы, Вам просто нужно ввести название, и после поиска и анализа сервис покажет Вам таблицу с фильмами, которые соответствуют введенному запросу.

Чтобы узнать больше о предлагаемых фильмах, нужно просто щелкнуть значок выбранного фильма или сериала и прочитать краткий обзор по нему (синопсис и отзывы). При желании Вы можете щелкнуть по предоставленной ссылке, чтобы прочитать более подробную рецензию на этот фильм и все отзывы.

В правом верхнем углу у Вас также есть возможность выбрать, хотите ли Вы видеть более старые, более новые или все доступные фильмы.

Это бесплатно?

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *