Здесь мы узнаем о некоторых ключевых концепциях рекомендательной системы.

Задавались вопросом, как Google придумывает фильмы, похожие на те, которые нравятся вам? Прочитав этот пост, вы будете иметь очень хорошее представление о том, как на самом деле работает система рекомендаций.

Существует четыре основных типа рекомендательных систем:

  • Система рекомендаций на основе популярности.
  • Система рекомендаций на основе содержания.
  • Система рекомендаций на основе совместной фильтрации.
  • Гибридная система рекомендаций. По сути, это комбинация системы рекомендаций на основе контента и совместной фильтрации.
    В этом посте мы сосредоточимся на фильтрации на основе контента.

Механизм рекомендаций на основе контента:

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

Теперь главный вопрос: как мы можем измерить сходство?

Сходство:

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

Как правило, сходство измеряется в диапазоне от 0 до 1. В мире машинного обучения этот показатель в диапазоне [0, 1] называется показателем сходства.

С математической точки зрения:
Сходство = 1, если X = Y, иначе 0.

Здесь X и Y — два объекта.
Здесь мы поговорим о некоторых наиболее популярных мерах расстояния подобия.

Косинусное сходство:

Метрика косинусного подобия находит нормализованное скалярное произведение двух атрибутов. Определив косинусное сходство, мы попытаемся найти косинус угла между двумя объектами.
Косинусное сходство особенно используется в положительном пространстве, где результат четко ограничен в [0,1]. Одна из причин популярности косинусного сходства заключается в том, что его очень эффективно оценивать, особенно для разреженных векторов.

Евклидово расстояние:

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

Евклидово расстояние между двумя точками — это длина соединяющего их пути. Теорема Пифагора дает это расстояние между двумя точками.

Манхэттенское расстояние:

Манхэттенское расстояние — это метрика, в которой расстояние между двумя точками рассчитывается как сумма абсолютных разностей их декартовых координат. Проще говоря, это общая сумма разницы между координатами x и координатами y.

Собрать данные:

Для этой задачи я решил использовать набор данных, содержащий почти 5000 фильмов с самым высоким рейтингом из TMDB. Существует два вида CSV-файлов. Один содержит информацию о бюджете, идентификатор жанра фильма, а другой содержит информацию о названии, актерском составе и съемочной группе фильма.

Теперь займемся кодированием. Давайте посмотрим, какие у нас наборы данных.

Во-первых, мы объединим эти два набора данных:

Здесь мы не будем работать со всеми особенностями этого комбинированного набора данных. Вместо этого мы выберем некоторые функции, которые мы считаем наиболее эффективными для этого проекта. Вот код для этого:

Теперь мы собираемся проверить недостающее значение наших данных:

Здесь мы собираемся отбросить эти отсутствующие значения, потому что в обзорном столбце есть только три отсутствующих значения.

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

Точно так же мы изменим другие столбцы. В колонке экипажа мы будем извлекать только имя директора. Также из столбца актеров мы берем только первые четыре имени. Далее мы создадим новый столбец, объединив «обзор», «ключевые слова», «актерский состав», «экипаж» и «жанры». И имя нового столбца — «тег». Теперь вот окончательная форма нашего набора данных:

Далее мы будем использовать пропаривание в столбце «тег», чтобы слова в столбце «тег» могли стать их корневой формой. Здесь мы будем использовать пакет nltk для стемминга.

Теперь мы готовы преобразовать столбец «тег» в числовое значение. Мы будем использовать функцию CountVectorizer из пакета sklearn.

Теперь мы будем определять расстояние между двумя фильмами, используя косинусное сходство через столбец movie_id.

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

Далее мы преобразуем его в веб-приложение с помощью потокового фреймворка. Для этого мы преобразуем наши данные и cos_distance в файл рассола, как показано ниже:

Затем мы получим постер фильма и рейтинги конкретного фильма через ключ API, который можно найти на https://www.themoviedb.org/.

Вот окончательный результат нашего проекта:

Для подробной реализации вы можете проверить мою ссылку GitHub: Здесь