推荐与Neo4j有关的事项

推荐与Neo4j有关的事项,neo4j,recommendation-engine,collaborative-filtering,Neo4j,Recommendation Engine,Collaborative Filtering,我正在用Java和Neo4j开发一个简单的社交网络 用户可以提交他们已经做过的事情,并用一些标签对它们进行标记。用户还可以添加一些兴趣(也就是标签)。 系统应该向用户推荐他尚未完成的事情。 我读过一些关于协同过滤的文章,其中计算用户之间的相似度。在找到相似的用户后,他们做过但登录用户还没有做过的一些事情将与推荐完美匹配 以下是数据模型: (me)-[:HAS_DONE]->(thing)-[:IS_TAGGED_WITH]->(tag)<-[:IS_TAGGED_WITH]-(

我正在用Java和Neo4j开发一个简单的社交网络

用户可以提交他们已经做过的事情,并用一些标签对它们进行标记。用户还可以添加一些兴趣(也就是标签)。 系统应该向用户推荐他尚未完成的事情。 我读过一些关于协同过滤的文章,其中计算用户之间的相似度。在找到相似的用户后,他们做过但登录用户还没有做过的一些事情将与推荐完美匹配

以下是数据模型:

(me)-[:HAS_DONE]->(thing)-[:IS_TAGGED_WITH]->(tag)<-[:IS_TAGGED_WITH]-(theirThing)<-[:HAS_DONE]-(people)

(me)-[:HAS_DONE]->(thing)-[:IS_TAGGED_WITH]->(tag)<-[:IS_INTERESTED_IN]-(people)

(me)-[:IS_INTERESTED_IN]->(tag)<-[:IS_TAGGED_WITH]-(theirThing)<-[:HAS_DONE]-(people)

(me)-[:IS_INTERESTED_IN]->(tag)<-[:IS_INTERESTED_IN]-(people)
UIsim(u_i,u_j)-两个用户兴趣的相似性。它的计算方法是将共同兴趣的数量除以最大兴趣数量,再加上一个用户

UTsim(u_i,u_j)-两个用户事物的相似性。它的计算方法是将事物的常用标记数除以由一个用户添加的最大标记数

两个用户之间的最终相似性为w1*UIsim(u_i,u_j)+w2*UTsim(u_i,u_j),其中w1+w2=1


有可能用Cypher实现这个公式吗?我的意思是有
max
功能吗?并且
UNION
是否适合将这四种情况分组?

是的,Cypher中有
max
功能,请参见此处:

但是,根据图形的大小,使用JavaAPI可能更有效

UNION
可用于返回所有结果

还有一个neo4j reco插件,它为过滤和推荐过程提供了高级可能性:

您可以在此处找到幻灯片:

周四有一个关于这个插件的网络研讨会:

U={u_1, u_2,..., u_n} - users

I={i_1, i_2,..., i_m} - interests

T={t_1, t_2,..., t_k} - things