ArangoDB - Система рекомендаций на основе графов
Я использую ArangoDB, и я пытаюсь создать систему рекомендаций на основе графов.
Модель данных содержит только пользователей, элементы и оценки (ребра).
Поэтому вы хотите рассчитать привязанность пользователя к фильму с помощью показателя Каца.
В конце концов я хочу сделать это:
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?
С точки зрения производительности может быть лучший выбор для рекомендательных систем на основе графа. Если у кого-то есть предложение (например, Item Rank или другие алгоритмы), было бы также неплохо получить некоторые идеи здесь.
Мне нравится эта тема, но иногда я добираюсь до своих границ.
1 ответ
Далее @start и @end - это параметры, представляющие две конечные точки; для простоты я предположил, что:
- максимальная допустимая длина пути 10000
- "ставки" - это название коллекции "ребер"
- "рейтинг" - это название свойства, придающее вес ребру
- коэффициент "демпфирования" соответствует требованиям
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