
Хороших библиотек для практической реализации рекомендательных систем с открытым исходным кодом в настоящее время достаточно мало. Я задался целью найти библиотеку, которая обладала бы хорошей архитектурой c возможностью легкого расширения и написания своих алгоритмов, а также находилась бы в активной разработке. После длительного поиска подходящей библиотеки я сделал свой выбор - это Java-библиотека алгоритмов коллаборативной фильтрации Taste. Ранее это был самостоятельный проект, теперь же эта библиотека входит в состав проекта Apache Mahout.
Рекомендательные системы (recommender systems) — программы, которые пытаются предсказать, какие объекты (фильмы, музыка, книги, новости, веб-сайты) будут интересны пользователю, c учетом информации о персональных данных пользователя(профиль пользователя) или накопленных знаниях о его предпочтениях. Существуют две основные стратегии создания рекомендательных систем: фильтрация содержимого (Content-Based Recommender Systems) и коллаборативная фильтрация(Collaborative Filtering). Системы, основанные на фильтрации содержимого пытаются предсказать объекты, интересные пользователю, путем анализа профилей пользователей и объектов. При использовании коллаборативной фильтрации используется информация о поведении пользователей в прошлом. Также существуют гибридные системы, объединяющие два этих подхода.
Рекомендательные системы — удобная альтернатива общепринятым поисковым алгоритмам, так как они позволяют обнаружить объекты, которые не могут быть найдены традиционным способом.
В процессе работы рекомендательные системы собирают данные о пользователях, используя сочетание явных и неявных методов.При явном сборе данных от пользователя обычно требуется выставить некоторую оценку объекта. Например, понравился ли фильм или книга, по пятибальной шкале. Примером неявного сбора данных может послужить фиксация поведения пользователя на сайте для последующего определения предпочтений.
Apache Mahout представляет собой масштабируемую библиотеку алгоритмов машинного обучения, предназначенную для работы с большими объемами данных. Для обеспечения возможности распределенных вычислений Apache Mahout использует свободный Java фреймворк Apache Hadoop, который создан для реализации распределённых приложений со сложными вычислениями, работающих на больших кластерах. В Hadoop реализована вычислительная парадигма, известная как MapReduce. Алгоритмы коллаборативной фильтрации, реализованные в Apache Mahout, существуют в двух видах - для запуска на обычном настольном компьютере и в составе распределенного кластера с использованием Apache Hadoop.
Проект быстро развивается, о чем свидетельствуют постоянные обновления в репозитории исходного кода. Рекомендательная система, основанная на алгоритмах коллаборативной фильтрации, является важной частью проекта и, соответственно, тоже развивается весьма динамично. Так как мне нравится пользоваться самыми новейшим программным кодом, я собираю проект из свежих исходников самостоятельно. Проект достаточно хорошо покрыт юнит-тестами, поэтому качество находится на должном уровне. Цель данной статьи - краткое и четко изложить последовательность шагов, которые помогут быстро собрать данный проект.
Итак, рассмотрим шаги для сборки Apache Mahout. Собрать проект очень просто - достаточно скачать исходники, установить Apache Maven и запустить команду сборки.
Выкачиваем из репозитория последнюю версию исходников
Репозиторий проекта - в формате SVN. Навигация на сайте Apache Mahout не очень удобная, поэтому сразу приведу ссылку на основную ветку репозитория (trunk): http://svn.apache.org/repos/asf/mahout/trunkУстанавливаем сборщик Apache Maven
Для сборки проекта нужно установить Apache Maven - фреймворк для автоматизации сборки проектов, специфицированных на XML-языке POM (Project Object Model). Последнюю версию Maven можно скачать здесь.Если вы используете операционную систему Windows, необходимо прописать следующие переменные окружения:
- JAVA_HOME - путь к Java-машине.
- M2_HOME - путь к директории, куда вы распаковали Maven. У меня это "C:\maven"
- PATH - добавьте к переменной PATH значение %M2_HOME%/bin
Запускаем сборку проекта
Для сборки проекта достаточно перейти в директорию проекта и запустить команду mvn install. В данном случае соберутся все модули проекта в виде jar-файлов :ядро(mahout-core), примеры(mahout-examples), модуль общих математических операций(mahout-math) и утилиты(mahout-utils). При сборке запускаются все юнит тесты, поэтому процесс достаточно длительный. Если у вас не очень быстый компьютер, смело можете отправляться на кухню и пить чай.Если вы хотите ограничиться сборкой конкретного модуля системы, необходимо запустить ту же команду (mvn install) из папки модуля.
Реализуем простой рекоммендательный сервис
После успешной сборки проекта самое время проверить его в действии. Покажу на примере, как использовать возможности рекомендательного сервиса Apache Mahout.Я буду использовать набор данных MovieLens, которые можно скачать отсюда. Это очень популярный набор данных у исследователей в области рекомендательных систем и коллаборативной фильтрации. Код примера рекоммендует 10 наиболее интересных фильмов для пользователя с идентификатором "1" c помощью подхода, известного в зарубежной литературе как "User-Based Collaborative Filtering".
DataModel model = new FileDataModel(new File("u.data"));
UserSimilarity userSimilarity = new PearsonCorrelationSimilarity(model);
UserNeighborhood neighborhood = new NearestNUserNeighborhood(3, userSimilarity, model);
Recommender recommender = new GenericUserBasedRecommender(model, neighborhood, userSimilarity);
Recommender cachingRecommender = new CachingRecommender(recommender);
List recommendations = recommender.recommend(1, 10);
for (RecommendedItem recommendedItem : recommendations) {
System.out.println(recommendedItem);
}
Комментариев нет:
Отправить комментарий