【发布时间】:2017-03-14 14:52:32
【问题描述】:
我正在使用 neo4j 设置推荐系统。我有以下设置:
节点:
- 用户
- 电影
- 电影属性(例如流派)
关系
(m:Movie)-[w:WEIGHT {weight: 10}]->(a:Attribute)(u:User)-[r:RATED {rating: 5}]->(m:Movie)
这是它的外观图:
我现在正试图弄清楚如何应用协同过滤方案,其工作原理如下:
- 检查
user喜欢的属性(隐含喜欢电影) - 找到喜欢这些相似属性的相似
other users - 推荐顶级电影给
user,用户没看过,但类似other users看过。
条件显然是每个属性对每部电影都有一定的权重。例如。流派adventure 的权重可以是指环王的10,但泰坦尼克号的权重是5。
此外,系统需要考虑每部电影的收视率。例如。如果other user 已将指环王评为5,则他/她的范围之王属性将按5 而不是10 进行缩放。对隐含属性的评分也接近5 的user 应该会推荐这部电影,而不是另一个对相似属性评分更高的用户。
我只是简单地推荐其他用户评价过的其他电影,但我不知道如何考虑 RATING 和 WEIGHT 之间的关系。它也没有工作:
MATCH (user:User)-[:RATED]->(movie1)<-[:RATED]-(ouser:User),
(ouser)-[:RATED]->(movie2)<-[:RATED]-(oouser:User)
WHERE user.uid = "user4"
AND NOT (user)-[:RATED]->(movie2)
RETURN oouser
【问题讨论】:
-
您能否发布一些用例来阐明如何回答您的 3 个问题/业务逻辑?
-
电影分级?你到底是什么意思?
-
找到喜欢这些相似属性的其他相似用户:你的相似性标准是什么?如果用户喜欢具有“冒险”属性的电影,而其他用户喜欢具有相同属性的另一部电影,这些用户是否相似?这些相似性取决于属性的权重?
-
没错!所以我们确实需要一个相似性标准,基于用户喜欢的电影的属性权重和用户对该属性的评分权重。例如。评级 * attr.权重 = 用户属性的得分
-
但是根据这个标准,如果一个“用户 1”被评为 2 一个“电影 a”,属性冒险 = 10 (2x10=20),另一个“用户 2”被评为 10 个“电影 b" 属性冒险 = 2 (10x2=20) 这些用户被认为非常相似。有意义吗?
标签: neo4j cypher graph-databases collaborative-filtering