Статьи

Реализация рекомендательного движка с использованием Hadoop и Mahout

В продолжение с моим предыдущим блог, в этом блоге я расскажу о том, как реализовать  Рекомендатор двигатель с помощью Mahout и Hadoop.

  • Сначала краткое введение в MapReduce и то, как некоторые из вычислительных алгоритмов должны быть переписаны для использования преимуществ параллельной обработки.
  • Во-вторых, я расскажу о алгоритме Рекомендора, который будет выведен для работы в Mahout, чтобы воспользоваться преимуществами Hadoop.
  • В-третьих, я расскажу вам о том, как мы можем реализовать движок MapReduce Recommender с Hadoop и Mahout.

Один из фундаментальных принципов, в которых могут использоваться преимущества параллельных вычислений, — это когда каждый из компьютеров в кластере может обрабатывать одни и те же задачи независимо друг от друга, не разделяя никакие данные. Рассмотрим алгоритм сортировки, они не предназначены для работы таким образом, когда мы разбиваем большой набор данных на части и передаем его многим компьютерам, работающим параллельно, и как только данные возвращаются, большой набор данных возвращается обратно. Если нам нужно выполнить сортировку, нам нужно написать алгоритм, чтобы воспользоваться MapReduce. Алгоритм Terasort является одним из методов сортировки, который использует преимущества MapReduce.

Точно так же в контексте механизма рекомендации , если нам нужно воспользоваться MapReduce, мы должны написать его по-другому. Mahout поддерживает алгоритм рекомендаций, чтобы воспользоваться MapReduce. Компоненты двигателя Recommender являются

  • Рекомендация на основе пользователя / элемента
  • Сходства (понятие соседства)

Эквивалент «Hello World» за проблему с рекомендациями — рейтинг фильмов Netflix. Пример данных фильма доступен здесь . В этих тестовых данных у вас есть история пользователей, которые арендовали фильмы и оценили эти фильмы. Когда вы берете напрокат новый фильм, он будет предлагать вам рекомендации, основанные на вашей схеме аренды, а также на том, что арендуют другие пользователи с аналогичными профилями, эти данные хранятся в транзакционной базе данных, такой как MySQL. Мы можем написать пакетную программу для использования данных транзакции и переместить ее в файловую систему Hadoop. Когда вы запустите Mahout MapReduce, он вернет top ‘n’ рекомендаций. Если вы заметили данные, они разделены запятыми ID пользователя, ItemID, рейтинг. Предполагается, что вы ведете основные таблицы пользователей и элементов в транзакционной базе данных, и вы объедините эти 2, чтобы предоставить пользователю более информативную информацию.

Позвольте мне дать вам представление о том, как алгоритм рекомендаций на основе элементов работает с использованием MapReduce, подробнее об этом см. Mahout в действии Мэннинга, глава 6.

Рекомендательная система включает в себя

  • Первым шагом с использованием этих данных является построение матрицы совпадений элементов. В основном он отвечает на вопрос о том, сколько раз 2 элемента происходили одновременно, когда пользователи покупают его. Что в основном представляет собой квадратную матрицу порядка n, где n — все предметы, купленные пользователями
  • Следующим шагом является вычисление вектора пользователя на предметах, которые он покупает. Какая матрица из одного столбца
  • Последний шаг заключается в создании рекомендации путем умножения матрицы совмещения и вектора пользователя. Значение, которое рекомендуется пользователю, — это элемент с наибольшим из нулевого значения.

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

sqoop import --connect jdbc:mysql://localhost/reservation --username krishna --password pass123  --table useritem

Нам нужно запустить скрипт mahout, как показано ниже в Hadoop

hadoop jar mahout-core-0.6-job.jar org.apache.mahout.cf.taste.hadoop.item.RecommenderJob -Dmapred.input.dir=input/input.txt -Dmapred.output.dir=output --usersFile input/users.txt --booleanData --similarityClassname SIMILARITY_COOCCURRENCE

Наконец, нам нужно запустить скрипт sqoop, чтобы экспортировать окончательные аналитические данные обратно в mysql, как показано ниже:

sqoop export --connect jdbc:mysql://localhost/reservation --username krishna --password pass123 --table useritem --export-dir useritem/part-m-00000

Теперь в вашем приложении вы выполняете поиск данных в таблице useritem и возвращаете результаты Recommender пользователю.