1

我正在使用ArangoDB我試圖建立一個基於圖形的推薦系統。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

從性能角度來看,基於圖的推薦系統可能會有更好的選擇。如果有人有建議(例如物品等級或其他算法),那麼在這裏得到一些想法也很好。

我喜歡這個主題,但有時我會到達我的邊界。

回答

0

以下,@start和@end是代表兩個端點的參數;爲簡單起見,我認爲:

  1. 最大允許路徑長度爲10000
  2. 「速度」是「邊緣」收集
  3. 「評級」是屬性的名稱給人的名字的權重的邊緣
  4. 了「阻尼」的因素是按要求
FOR v,e,p IN 0..10000 OUTBOUND @start rates 
    OPTIONS {uniqueVertices: "path"} 
    FILTER [email protected] 
    LET r = AVERAGE(p.edges[*].rating) * 0.7 
    COLLECT AGGREGATE avg = AVERAGE(r) 
    RETURN avg