我应该使用哪种方法在Neo4j上实现协同过滤?

时间:2015-06-01 17:39:54

标签: neo4j recommendation-engine collaborative-filtering

我正在使用Neo4j(v1.9)作为基础数据存储区和Spring Data 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。由@johnymontana的the answer建议。我正在记录它。主要问题是我不知道它是否支持协作过滤。
  7. Graphaware Reco。 @ChristopheWillemsen在评论中提出建议。来自官方网站
  8.   

    是一个可扩展的高性能推荐引擎骨架   Neo4j,允许实时计算和服务   预先计算的建议。

    但是,如果它适用于旧版本的Neo4j(我目前无法升级Neo4j版本),我还无法理解。

    那么,你有什么建议?为什么?请随意提出上面未列出的其他有趣框架。

1 个答案:

答案 0 :(得分:2)

Cypher在局部遍历方面非常快,但未针对全局图操作进行优化。如果您想在所有用户对之间执行类似计算相似性度量的操作,那么使用图形处理框架(如Apache Spark GraphX)会更好。有一个名为Mazerunner的项目连接Neo4j和Spark,您可能需要查看它。

对于纯粹的Cypher方法,herehere是最近几篇博客文章,演示了Cypher对建议的查询。