Машинное обучение, Программирование

Создайте свой собственный механизм рекомендаций - Netflix развенчивает мифы

Введение в рекомендательные системы с живой реализацией

Что мне посмотреть сегодня вечером?

Как часто после напряженного рабочего дня вы думаете, что мне посмотреть дальше? Как по мне - да, и не раз. От Netflix до Prime Video создание надежных систем рекомендаций по фильмам чрезвычайно важно, учитывая огромный спрос на персонализированный контент со стороны современных потребителей.

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

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

Набор данных включает ~ 10 тысяч фильмов на всех индийских языках, выпущенных с 1925 года. Окончательный движок размещен по адресу:



Позвольте мне объяснить основную логику системы рекомендаций, прежде чем создавать ее самостоятельно. Существует три основных алгоритма, на которых работает движок recco:

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

2. Совместная фильтрация на основе пользователей: она показывает, какие фильмы смотрят другие пользователи, и предполагает, что другие будут смотреть аналогичный контент. Он пытается создать персональный список / список для просмотра каждого пользователя перед рекомендациями фильмов. Основная проблема - это проблема с холодным запуском, когда на платформу приходит новый пользователь, и движок не может запускать правильные повторные попытки из-за отсутствия истории пользователей. Он также предполагает, что его пользователи логичны, а их выбор фильмов отражает их истинный вкус. Но возникает ситуация, когда все пользователи просматривают похожий контент на основе миниатюры, и, таким образом, похожий контент повторяется для каждого пользователя. Это порочный круг, в котором похожие фильмы повторяются в цикле, и, опять же, разнообразие контента никогда не проявляется заранее.

3. Фильтрация на основе элементов. Во-первых, она не требует никаких данных на уровне пользователя, а механизм рекомендаций может быть запущен даже на изолированном домашнем ПК (нет проблем с конфиденциальностью данных). Алгоритм основан на основном предположении о том, почему пользователь смотрит фильм: актер, режиссер, сцена войны, месть или роман? Это понимание потребительского мышления является наиболее важной частью в прогнозировании того, что пользователь будет смотреть дальше?

Netflix осознает силу метатегов и генерирует тысячи метатегов каждого контента, платя пользователям за просмотр контента в течение всего дня.



Ниже показано, как Netflix видит контент.

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

Теперь возникает вопрос: Если Netflix уже взломал это, зачем кому-то даже пробовать еще одну систему рекомендаций?

  1. У Netflix есть не все индийские фильмы, поэтому пользователь, скорее всего, будет вращать корзину Netflix из 300–400 фильмов.
  2. Netflix не позволяет пользователю фильтровать фильмы по актерам, режиссеру, рейтингу IMDB, году выпуска или метатегам.
  3. Netflix даже не позволяет пользователям просматривать его контент без членства.
  4. Он больше ориентирован на недавно выпущенные фильмы, и поклонник 80-х будет немного разочарован, увидев его рекомендации.

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

Как в итоге будет выглядеть наша интерактивная веб-демонстрация?

а. Возможность фильтрации по рейтингу IMDB, метатегам, актерам, жанру, языку, году выпуска и т. Д.

б. Отфильтрованные заголовки и их сюжетная линия с возможностью воспроизведения трейлера фильма на YouTube.

c. Выберите наши любимые фильмы в списке рекомендаций.

Данные кинофильмов

Давайте запачкаем руки и построим двигатель:

Этап 1: Сбор и очистка данных.

Это было самое болезненное упражнение из двух выпущенных до сих пор лаковых фильмов / сериалов / документальных фильмов. Особая благодарность IMDB за помощь с интерфейсом, где мы можем загружать данные о названиях, актерах и съемочной группе, году выпуска и жанре.



Мне нужны были ключевые слова, ссылка на трейлер YouTube, сюжет, язык и URL-адрес плаката даже после основных данных.

#Web Scraping Code
#Python Code for YouTube trailer:
from bs4 import BeautifulSoup as bs
import requests
import pandas as pd
a=pd.read_csv("database_Indian.csv")
base = "https://www.youtube.com/results?search_query="
url=[]
for t in range(1,9140):
    try:
        qstring = a['originalTitle'][t]+' trailer'
        r = requests.get(base+qstring)
        page = r.text
        soup=bs(page,'html.parser')
        vids = soup.findAll('a',attrs={'class':'yt-uix-tile-link'})
        videolist=[]
        for v in vids:
            tmp = 'https://www.youtube.com' + v['href']
            videolist.append(tmp)
        videolist[1]
        print(t)
        print(videolist[1])
        url.append(videolist[1])
        time.sleep(10)
    except: 
        print('error')
#For Keywords#
a4=db
c=NULL
for(i in 1:9140)
{tryCatch({
  url=paste0("https://www.imdb.com/title/",a4$tconst[i],"/keywords?ref_=tt_stry_kw")
  print(url)
  
  a1<-read_html(url)
  kw=as.character(html_nodes(a1,xpath='//*[@id="keywords_content"]/table'))
  
  b2=cbind(a4$tconst[i],as.character(kw))
  c=rbind(c,b2)
  print(i)
},
error=function(e){})
}

Этап 2: Алгоритм механизма рекомендаций:

Поскольку у меня достаточно функций / метатегов фильма, я использовал Косинусное сходство, т. Е. косинус угла между двумя векторами векторов элементов A и B. Чем ближе векторы, тем меньше будет быть углом и больше косинусом и, следовательно, выше в списке рекомендаций. Оказалось, что это матрица косинусного сходства 9000 * 9000, и мне пришлось использовать Google Cloud / Big Query для обработки данных.

Этап 3: Визуализация

Мне пришлось провести серьезное исследование между Apache Superset, Neo4j и Tableau в качестве конечной платформы для хостинга и предпочтительной таблицей из-за простоты обработки нетехнической аудиторией и бесплатных подключений к хостингу / базе данных (кому не нравятся бесплатные вещи!)

Не стесняйтесь спрашивать о любых сомнениях по поводу интеграции и размещать их на своем веб-сайте с должной благодарностью Арджуну Госвами или мне. Https://www.linkedin.com/in/arjunsg/

Источники: IMDB.com, YouTube.com

Идея для вдохновения: Prime Video, Hotstar и Netflix