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 - это параметры, представляющие две конечные точки; для простоты я предположил, что:

  1. максимальная допустимая длина пути 10000
  2. "ставки" - это название коллекции "ребер"
  3. "рейтинг" - это название свойства, придающее вес ребру
  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
Другие вопросы по тегам