На основе содержания

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

Чтобы открыть систему рекомендаций фильмов, нажмите на ссылку:

https://nikmoviemaniac.herokuapp.com/

Сбор данных

Я использовал набор данных фильмов TMDB 5000, который можно найти на kaggle по этой ссылке:

https://www.kaggle.com/tmdb/tmdb-movie-metadata.

Этот набор данных содержит два файла csv:

  1. tmdb_5000_credits.csv
  2. tmdb_5000_movies.csv

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

Я предварительно обработаю набор данных в Jupyter-Notebook.

Прочитайте оба набора данных с помощью pandas:

Объедините оба CSV-файла в столбцах id и movie_id и назовите объединенный CSV-файл как df. После слияния будет большое количество столбцов.

Чтобы создать рекомендательную систему на основе контента, нам не нужно много столбцов, таких как бюджет, домашняя страница, популярность, время выполнения и т. д. Итак, я уберу эти столбцы, а последние столбцы останутся с нами как:

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

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

Проверьте, присутствует ли в наборе данных нулевое значение или нет, если да, то очистите набор данных. До сих пор имеется 4803 строки и 10 столбцов.

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

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

Столбцы обзор, слоган, ключевые слова набора данных содержат бесполезные элементы, такие как числа и стоп-слова, и чтобы решить эту проблему, я столкнулся с очень полезным и важным алгоритмом, который извлекает важные слова из текста, Алгоритм представляет собой быстрое автоматическое извлечение ключевых слов (RAKE).

Я собираюсь применить алгоритм RAKE к столбцам набора данных.

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

Теперь я удаляю все ненужные столбцы, оставляя только столбцы original_title и Combined_Features.

И набор данных будет выглядеть следующим образом:

Поскольку пользователь может искать фильм в любом формате, например, давайте рассмотрим фильм «Бэтмен против Супермена: На заре справедливости», пользователь может искать как «Бэтмен против Супермена», «Бэтмен-супермен», «Бэтмен на заре справедливости» и т.д. Итак, я уберу все ненужные символы и объединим все слова из столбца original_title, а также из ввода пользователя.

И, наконец, преобразуйте этот формат набора данных в новый файл csv.

Вы можете найти файл jupyter-notebook, содержащий все коды, нажав на эту ссылку, https://github.com/NIKsaurabh/Movie-Recommendation-Web-App/blob/master/tmdb.ipynb

Здесь я завершил этапы предварительной обработки данных и создал окончательный CSV-файл для дальнейшего использования.

Создание приложения Flask

В этом файле python я буду использовать созданный ранее файл csv.

Я использую метод NearestNeighbors, чтобы найти наиболее похожие фильмы на основе ввода пользователя.

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

CountVectorizer будет подсчитывать количество слов, присутствующих в тексте.

CountVectorizer работает следующим образом для каждого текста.

Теперь я создам матрицу оценки сходства, которая представляет собой квадратную матрицу и содержит значения от 0 до 1, потому что здесь я использую косинусное сходство, а значение cos лежит между 1 и 0.

Если два фильма тесно связаны между собой, то угол между ними близок к нулю, а показатель сходства близок к 1.

Теперь я буду получать информацию от пользователя, используя HTML-страницу, которую я создал, ссылка на весь код (html, css и т. д.) приведена в конце блога.

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

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

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

Код flask в файле python выглядит следующим образом:

Здесь main_page.html — это веб-страница, на которой пользователь вводит название фильма. movie_list.html — это веб-страница, на которой отображается список рекомендуемых фильмов.

Чтобы развернуть модель на Heroku, нам нужны еще два файла:

  1. Procfile
  2. требования.txt

Flask ищет файлы HTML в папке «templates» и файлы CSS в папке «static/styles», поэтому никогда не забывайте размещать файлы в правильном месте, иначе они не будут Работа.

Загрузите все файлы и папки на github.

Откройте Heroku и создайте учетную запись или войдите.

Нажмите «Новое/Создать новое приложение».

Введите имя приложения и нажмите «Создать приложение».

Нажмите GitHub и выполните поиск в репозитории.

Нажмите Подключить.

Затем нажмите «Развернуть ветку».

Если все пойдет хорошо, он начнет устанавливать пакеты, перечисленные в файле requirements.txt, и в конце выдаст URL-адрес, заканчивающийся на herokuapp.com .

Вы можете найти весь проект, нажав на ссылку, указанную ниже:



Спасибо ;)