Зачем рекомендовать?

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

В нашем случае система ML — это продавец. Будь то компания электронной коммерции или компания, занимающаяся потоковой передачей музыки/книг/видео, высокоточная система рекомендаций имеет первостепенное значение для достижения высоких коэффициентов конверсии (от себя лично я считаю, что Spotify создает наиболее «персонализированные» плейлисты). для тебя).

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

Набор данных-

Набор данных был получен с https://www.kaggle.com/datasets/tmdb/tmdb-movie-metadata?select=tmdb_5000_movies.csv.

Файл csv «movies» содержит информацию исключительно о фильме — его языке, жанре, бюджете, сюжете и прочем.

Файл данных «Кредиты» содержит информацию об актерах и съемочной группе, задействованных в фильме.

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

Ниже приведены пояснения к атрибутам в файле фильмов:

Budget — бюджет фильма в долларах США.

жанры — жанры, к которым можно отнести фильм.

главная страница — официальный сайт фильма

id — id фильма на сайте TMDB

ключевые слова — примерно самые важные слова в описании фильма

original_language — язык фильма

original_title — название, под которым на самом деле вышел фильм (возможно, на каком-то другом языке)

обзор — описание фильма

популярность — оценка текущей популярности фильма. Подробнее: https://developers.themoviedb.org/3/getting-started/popularity

production_companies — кинокомпании, занимающиеся производством

production_countries — страна, в которой был произведен фильм

release_date — дата выхода фильма (для анализа как datetime)

доход — общий доход, полученный в долларах США.

runtime — продолжительность фильма в минутах

разговорные_языки — языки, на которых говорят в фильме

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

tagline — слоган фильма

title — название фильма

voice_average — средняя оценка фильма пользователями на сайте TMDB.

voice_count — количество пользователей, которые проголосовали.

Вот атрибуты файла кредитов:

movie_id — внешний ключ, ссылающийся на идентификатор таблицы фильмов

title — название фильма

состав — имена актеров вместе с сыгранным персонажем (и другие метаданные)

съемочная группа — имена других участников, задействованных в производстве (режиссеры, продюсеры, звукорежиссеры и т. д.)

Оба кадра данных объединены в столбце «заголовок».

Предварительная обработка данных-

Поскольку в объединенном фрейме данных 23 столбца, нам нужно вручную удалить некоторые функции. Ниже перечислены функции, которые мы хотели бы сохранить.

жанры — очень важно предсказать, понравится ли это пользователю

id — будет позже использоваться на сайте

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

title — это название фильма

актёры фильма

съемочная группа - люди, участвующие в производстве (режиссер и т. д.).

Числовые характеристики (например, дата_релиза, доход, популярность, среднее_голосование и т. д.) были удалены, поскольку они не связаны с «содержанием» фильма. Теги часто бывают странными и не предоставляют релевантной информации о содержании фильма. Удаление других функций не требует пояснений.

Примечание. Дата_релиза может быть решающим фактором при оценке содержания фильма.

После этого были проверены простое вменение отсутствующих значений (при «обзоре») и дубликаты.

Проблема с жанрами, ключевыми словами, актерским составом, колонками экипажа-

К сожалению, эти столбцы не имели названий в прямом виде, а представляли собой список словарей. Нам нужно предварительно обработать их.

def helper (lst, if_crew=False, if_top=False):
ans=list()
if (if_crew==True):
for dic in eval(lst):
if (dic['job']=='Director' or dict['job']=='Writer'): #for crew column only director, writer selected
ans.append(dic['name'])
return ans
else:
for dic in eval(lst): #eval() evaluates a string to the datatype contained inside it
ans.append(dic['name'])
if (if_top==False):
return ans
else:
return ans[0:10] #in case, we need to return top 10 actors

Что касается актерского состава, мы возвращаем только 10 лучших актеров. За съемочную группу мы возвращаем только сценаристов и режиссеров. Код немного сложен, так как он пытается обрабатывать все 4 столбца одновременно.

Кроме того, обзорная колонка была разделена на список.

Удаление пробела внутри слов-

«Сэм Уортингтон» сильно отличается от «Сэма Мендеса». Однако, если мы не удалим пробел внутри строк, обе они будут содержать слово «Сэм», что приведет к ошибочным рекомендациям. Таким образом, «Сэм Уортингтон» должен быть сопоставлен с «Сэм Уортингтон».

Пробелы удаляются с помощью регулярного выражения.

Создание столбцов «теги»

Столбец тегов создается путем объединения столбцов жанров, ключевых слов, обзора, актеров и съемочной группы. Они были объединены с двукратным весом, придаваемым жанру (были опробованы другие соотношения, но больший вес для «команды» приводил к рекомендациям фильмов ТОЛЬКО режиссера запроса).

Предварительная обработка текста в тегах-

Мы создаем новый фрейм данных только со столбцами id, title и tags. Текст предварительно обрабатывается, т.е. преобразуется в нижний регистр, удаляются стоп-слова, лемматизируются, удаляются специальные символы и т. д.

Моделирование и основные функции-

Корпус векторизован с использованием векторизатора Tf-idf с максимальным числом признаков 5000. После этого создается матрица сходства с использованием косинусного сходства.

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

Что ж, похоже, наша модель дает вполне приличные результаты :).

Поскольку я стремлюсь присоединиться к партнерской программе Medium, подписка с вашей стороны будет шагом к моей цели: https://debadri3.medium.com/

Это все с моей стороны. Модель была развернута с красивым веб-сайтом, созданным с помощью Streamlit:

https://имитация-netflix.herokuapp.com/

Заботиться!