2015-06-01 3 views
2

Я работаю над проектом (социальной сетью), который использует Neo4j (v1.9) в качестве базового хранилища данных и данных Spring Neo4j. Я пытаюсь добавить систему тегов в проект, и я ищу способы эффективного применения рекомендации тегов с использованием стратегий совместной фильтрации. После многих исследований я пришел с такими опциями:Что я должен использовать для реализации совместной фильтрации поверх Neo4j?

  1. Cypher. Это язык встроенных запросов, используемый Neo4j. Никакой другой структуры не требуется, возможно, вычислительные времена лучше других. Возможно, я могу легко реализовать запросы, используя Spring Data Neo4j.
  2. Apache Mahout. Он предлагает алгоритмы машинного обучения, ориентированные в первую очередь в области совместной фильтрации, кластеризации и классификации. Однако он не предназначен для баз данных графов и может быть потенциально медленным.
  3. Apache Giraph. Открыть исходный код Google Pregel.
  4. Apache Spark. Это быстрый и общий механизм для крупномасштабной обработки данных.
  5. reco4j. Это лучшее подходящее решение до сих пор, но проект кажется мертвым.
  6. Apache Spark GraphX ​​+ Mazerunner. Предлагается по the answer @johnymontana. Я документирую это. Основная проблема заключается в том, что я не знаю, поддерживает ли она совместную фильтрацию.
  7. Graphareare Reco. Предложенная @ChristopheWillemsen в комментарии. С официального сайта

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

Тем не менее, я еще не понял, если он работает со старой версией Neo4j (я не могу обновить версию Neo4j на данный момент).

Итак, что вы предлагаете и почему? Не стесняйтесь предлагать другие интересные рамки, не перечисленные выше.

+1

Вы можете добавить в свой список EngineAware Engine. Github: https://github.com/graphaware/neo4j-reco и видео: https://vimeo.com/118837191 –

+0

@ ChristopheWillemsen Я смотрю видео прямо сейчас. Вы предлагаете это? Если да, то почему? – tigerjack89

+0

Я не могу рекомендовать вам «одну» вещь с таким меньшим количеством информации о том, какую проблему вы хотите точно решить и как, но для стиля k-соседей, плагин может немного облегчить вам жизнь с нео. Mazerunner, как указано ниже, является действительно хорошим проектом. –

ответ

2

Cypher работает очень быстро, когда дело доходит до локальных обходов, но не оптимизировано для операций глобального графика. Если вы хотите сделать что-то вроде метрики сходства вычислений между всеми парами пользователей, то использование структуры обработки графа (например, Apache Spark GraphX) будет лучше. Существует проект под названием Mazerunner, который соединяет Neo4j и Spark, которые вы можете посмотреть.

Для чистого подхода Cypher here и here представляют собой пару недавних сообщений в блогах, демонстрирующих запросы Cypher для рекомендаций.

+0

Большое спасибо за ваше предложение. Итак, Mazerunner ваш любимый выбор?Поддерживает ли Spark + Mazerunner совместную фильтрацию? – tigerjack89

+0

@ tigerjack89 Пока Mazerunner очень крут и позволяет использовать Spark (который [да будет поддерживать совместную фильтрацию] (https://spark.apache.org/docs/latest/mllib-collaborative-filtering.html)) , это добавляет много сложности в проект. Лично я попытался бы найти чистый подход Cypher и перейти оттуда. Но на самом деле все это во многом зависит от ваших конкретных требований. –

Смежные вопросы