счастливый мл
Фон
В этом посте я собираюсь обсудить создание системы рекомендаций книг с использованием 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 использует следующие параметры обучения.
userCol
– имя столбца для идентификаторов пользователей. Идентификаторы должны быть (или могут быть приведены) целыми числами.itemCol
- название столбца для оценок.ratingCol
- имя столбца для идентификаторов предметов. Идентификаторы должны быть (или могут быть приведены) целыми числами.maxIter
- максимальное количество итераций (›= 0).regParam
- параметр регуляризации в АЛС, по умолчанию 1.0 (›= 0).iterations
- количество итераций для запуска.coldStartStrategy
— когда выполняется прогнозирование, а модель не обучена для определенного пользователя/рейтинга или элементы не найдены для пользователя, тогда эти пользователи будут удалены, если в качестве значения параметра задано «отбрасывание».
Предсказать рекомендации
После создания модели ALS и ее обучения мы можем использовать ее для предоставления рекомендаций пользователям и элементам. Ниже приведены различные рекомендации, которые я дал пользователям и книгам.
Ссылка
- https://towardsdatascience.com/building-a-recommendation-system-with-spark-ml-and-elasticsearch-abbd0fb59454
- https://medium.com/@nihitextra/collaborative-filtering-recommendation-system-with-apache-spark-using-scala-9a68e02e814d
- https://towardsdatascience.com/creating-a-hybrid-content-collaborative-movie-recommender-using-deep-learning-cc8b431618af
- http://spark.apache.org/docs/latest/ml-collaborative-filtering.html
- https://www.codementor.io/@jadianes/building-a-recommender-with-apache-spark-python-example-app-part1-du1083qbw#loading-and-parsing-datasets
- https://edersoncorbari.github.io/tutorials/building-spark-ml-recommendation-system/
- https://www.kaggle.com/vchulski/tutorial-collaborative-filtering-with-pyspark
- https://projectsbasedlearning.com/apache-spark-machine-learning/machine-learning-project-creating-movies-recommendation-engine-using-apache-spark/
- https://www.section.io/engineering-education/sparksql-mllibspark-part-3/
- https://medium.com/analytics-vidhya/crafting-recommendation-engine-in-pyspark-a7ca242ad40a