2

我正在使用ArangoDB,我正在尝试用它构建一个基于图形的推荐系统。

数据模型只包含用户、项目和评级(边)。

因此想用katz 度量来计算用户对电影的亲和力。

最终我想这样做:

Get all (or a certain number of) paths between a user and a item
For all of these paths do the following:
  Multiply each edge's rating with a damping factor (e.g. 0.7)
  Sum up all calculated values within a path
Calculate the average of all calculated path values

结果是用户和项目之间的某种亲和力,使用中间评级加权并由定义的因素抑制。

我试图在 AQL 中实现类似的东西,但它要么是错误的,要么是太慢了。像这样的算法怎么会出现在AQL中?

从性能的角度来看,基于图的推荐系统可能会有更好的选择。如果有人有建议(例如项目排名或其他算法),也可以在这里获得一些想法。

我喜欢这个话题,但有时我会走到我的边界。

4

1 回答 1

1

下面,@start 和@end 是代表两个端点的参数;为简单起见,我假设:

  1. 最大允许路径长度为 10000
  2. “rates”是“edges”集合的名称
  3. “rating”是赋予边缘权重的属性的名称
  4. “阻尼”系数符合要求
FOR v,e,p IN 0..10000 OUTBOUND @start rates
    OPTIONS {uniqueVertices: "path"}
    FILTER v._id==@end
    LET r = AVERAGE(p.edges[*].rating) * 0.7
    COLLECT AGGREGATE avg = AVERAGE(r)
    RETURN  avg
于 2017-12-03T12:38:04.960 回答