счастливый мл

Фон

В этом посте я собираюсь обсудить создание системы рекомендаций книг с использованием Collaborative Filtering метода машинного обучения (в другом посте я обсуждал создание системы рекомендаций с помощью Content-based Filtering). Модель машинного обучения Collaborative Filtering, реализованная с помощью алгоритма Alternating Least Squares(ALS) с использованием Spark-ML и Scala. Исходники и набор данных, относящихся к этому посту, доступны на gitlab. Пожалуйста, клонируйте репо и продолжите пост.

Система рекомендаций

Системы рекомендаций, использующие алгоритмы машинного обучения, чтобы рекомендовать наиболее релевантные элементы конкретному пользователю или клиенту. Он работает по принципу поиска закономерностей в данных о поведении потребителей, которые могут быть собраны неявно или явно. Некоторые примеры рекомендательных систем в действии включают product recommendations on Amazon, Netflix suggestions for movies and TV shows in your feed, recommended videos on YouTube, music on Spotify, Facebook newsfeed и Google Ads. В машинном обучении в основном используются два основных метода предоставления рекомендаций: 1) Content-based Filtering, 2) Collaborative Filtering.

Контентная фильтрация

Content-based Filtering анализирует характер каждого элемента и стремится найти понимание данных для определения предпочтений пользователя. В основном рекомендатели контента полагаются на характеристики элемента, чтобы давать рекомендации. Примеры этого включают User generated tags on movies, Item color, Text description, User review of an item, Genre, Director, Description, Actors of a Movie и т. д. Общая идея этих рекомендательных систем заключается в том, что если человеку нравится конкретный предмет, ему или ей также понравится предмет, похожий на него. Другими словами, эти алгоритмы пытаются рекомендовать товары, похожие на те, что нравились пользователю в прошлом. Это можно увидеть в таких приложениях, как Netflix, Facebook Watch, которые рекомендуют следующий фильм или видео на основе Director, Hero и т. д.

Совместная фильтрация

Collaborative Filtering рекомендует товар, основываясь на прошлом опыте и поведении пользователей. В отличие от фильтрации на основе содержимого, она не требует никакой информации об элементах или самом пользователе. Ключевая идея совместной фильтрации заключается в том, что похожие пользователи имеют схожие интересы, люди со схожими интересами, как правило, любят похожие элементы. Эта система подбирает людей со схожими интересами и предоставляет рекомендации на основе этого соответствия. Основным примером этого является Google Ads. Существует две категории совместной фильтрации: 1) User-based 2) Item-based. Фильтрация на основе пользователей измеряет сходство между целевыми пользователями и другими пользователями (вычисляется сходство между пользователями). Фильтрация на основе элементов измеряет сходство между элементами, которые целевые пользователи оценивают, с другими элементами (сходство между элементами вычисляется). Одна из проблем с совместной фильтрацией заключается в том, что она не дает рекомендаций по новым элементам (например, продуктам, фильмам, песням и т. д.), которые не имеют оценок.

Рассмотрите следующий сценарий рекомендации книги. Пользователи A и B дали высокие оценки Книге 1 и Книге 2. Тогда можно предположить, что они должны иметь схожий вкус. Следовательно, существует более высокая вероятность того, что Пользователю Б понравится книга, с которой он/она не сталкивался, но которую пользователь А высоко оценил. , поэтому система рекомендаций рекомендует Книгу 3 пользователю Б. Дополнительные примеры использования системы рекомендаций на основе совместной фильтрации можно найти здесь.

Набор данных

Я использовал два набора данных CSV в системе рекомендаций книг. Один набор данных содержит информацию о книгах, а другой набор данных содержит пользовательские оценки книг. Ниже приведена структура файлов CSV. Полный набор данных можно найти в Kaggle.

Подготовить набор данных

Сначала я загрузил набор данных CSV в Spark DataFrames и выполнил некоторую подготовку данных. В основном я присоединился к набору данных книг и набору данных рейтингов.

Построить модель

Я использовал алгоритм совместной фильтрации Alternating Least Squares(ALS) для построения модели рекомендаций. ALS — очень популярный алгоритм выдачи рекомендаций. Реализация алгоритма ALS доступна в библиотеке Apache Spark-ML. Алгоритм ALS использует следующие параметры обучения.

  1. userCol – имя столбца для идентификаторов пользователей. Идентификаторы должны быть (или могут быть приведены) целыми числами.
  2. itemCol - название столбца для оценок.
  3. ratingCol - имя столбца для идентификаторов предметов. Идентификаторы должны быть (или могут быть приведены) целыми числами.
  4. maxIter - максимальное количество итераций (›= 0).
  5. regParam - параметр регуляризации в АЛС, по умолчанию 1.0 (›= 0).
  6. iterations - количество итераций для запуска.
  7. coldStartStrategy — когда выполняется прогнозирование, а модель не обучена для определенного пользователя/рейтинга или элементы не найдены для пользователя, тогда эти пользователи будут удалены, если в качестве значения параметра задано «отбрасывание».

Предсказать рекомендации

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

Ссылка

  1. https://towardsdatascience.com/building-a-recommendation-system-with-spark-ml-and-elasticsearch-abbd0fb59454
  2. https://medium.com/@nihitextra/collaborative-filtering-recommendation-system-with-apache-spark-using-scala-9a68e02e814d
  3. https://towardsdatascience.com/creating-a-hybrid-content-collaborative-movie-recommender-using-deep-learning-cc8b431618af
  4. http://spark.apache.org/docs/latest/ml-collaborative-filtering.html
  5. https://www.codementor.io/@jadianes/building-a-recommender-with-apache-spark-python-example-app-part1-du1083qbw#loading-and-parsing-datasets
  6. https://edersoncorbari.github.io/tutorials/building-spark-ml-recommendation-system/
  7. https://www.kaggle.com/vchulski/tutorial-collaborative-filtering-with-pyspark
  8. https://projectsbasedlearning.com/apache-spark-machine-learning/machine-learning-project-creating-movies-recommendation-engine-using-apache-spark/
  9. https://www.section.io/engineering-education/sparksql-mllibspark-part-3/
  10. https://medium.com/analytics-vidhya/crafting-recommendation-engine-in-pyspark-a7ca242ad40a