ArticleRank игнорирует веса отношений

Я создаю свое первое приложение Neo4j (4.0.4) и пытаюсь упорядочить результаты на основе алгоритма взвешенного рейтинга статей. Пока все было интуитивно понятно, но я не могу понять, почему веса отношений не влияют на оценку ArticleRank.

Учитывая схему:

MERGE (paper0:Paper {name:'Paper 0'})
MERGE (paper1:Paper {name:'Paper 1'})
MERGE (paper2:Paper {name:'Paper 2'})
MERGE (paper3:Paper {name:'Paper 3'})
MERGE (paper4:Paper {name:'Paper 4'})
MERGE (paper5:Paper {name:'Paper 5'})
MERGE (paper6:Paper {name:'Paper 6'})

MERGE (paper1)-[:CITES {weight: 10.0}]->(paper0)

MERGE (paper2)-[:CITES {weight: 1.0}]->(paper0)
MERGE (paper2)-[:CITES {weight: 100.0}]->(paper1)

MERGE (paper3)-[:CITES {weight: 10.0}]->(paper0)
MERGE (paper3)-[:CITES {weight: 1.0}]->(paper1)
MERGE (paper3)-[:CITES {weight: 100.0}]->(paper2)

MERGE (paper4)-[:CITES {weight: 10.0}]->(paper0)
MERGE (paper4)-[:CITES {weight: 1.0}]->(paper1)
MERGE (paper4)-[:CITES {weight: 100.0}]->(paper2)
MERGE (paper4)-[:CITES {weight: 10.0}]->(paper3)

MERGE (paper5)-[:CITES {weight: 100.0}]->(paper1)
MERGE (paper5)-[:CITES {weight: 1.0}]->(paper4)

MERGE (paper6)-[:CITES {weight: 10.0}]->(paper1)
MERGE (paper6)-[:CITES {weight: 100.0}]->(paper4)

Когда я запускаю этот запрос:

CALL gds.alpha.articleRank.stream({
  nodeProjection: 'Paper',
  relationshipProjection: {
    CITES: {
      properties: 'weight'
    }
  },
  relationshipWeightProperty: 'weight'
})
YIELD nodeId, score
RETURN gds.util.asNode(nodeId).name AS page, score
ORDER BY score DESC

Я получаю тот же результат, что и при выполнении этого запроса:

CALL gds.alpha.articleRank.stream({
  nodeProjection: 'Paper',
  relationshipProjection: 'CITES'
})
YIELD nodeId, score
RETURN gds.util.asNode(nodeId).name AS page, score
ORDER BY score DESC

Результат:

╒═════════╤═══════════════════╕
│"page"   │"score"            │
╞═════════╪═══════════════════╡
│"Paper 0"│0.3462769146633946 │
├─────────┼───────────────────┤
│"Paper 1"│0.31950147982279303│
├─────────┼───────────────────┤
│"Paper 4"│0.21375000253319743│
├─────────┼───────────────────┤
│"Paper 2"│0.21092906260164457│
├─────────┼───────────────────┤
│"Paper 3"│0.18028125041164458│
├─────────┼───────────────────┤
│"Paper 5"│0.15000000000000002│
├─────────┼───────────────────┤
│"Paper 6"│0.15000000000000002│
└─────────┴───────────────────┘

Учитывая, что отношения имеют разные веса, как получается, что выполнение алгоритма ArticleRank с использованием весов приводит к таким же оценкам, как если бы веса не использовались?

1 ответ

Реализация ранга статей в GDS 1.2 не поддерживает веса.

В документации бесполезно перечисляется relationshipWeightPropertyсреди параметров конфигурации. Это технически правильно, потому что конфигурация алгоритма принимает этот параметр. Но алгоритм проигнорирует это. Причина, по которой это выглядит, заключается в том, что a) Article Rank разделяет API с Page Rank, который поддерживает веса, b) Article Rank - это алгоритм альфа-уровня, поэтому он не поддерживается продуктом и не прошел ничего вроде правильности, производительности и обзор удобства использования полностью поддерживаемых алгоритмов.

В документации под заголовком Graph type support, что алгоритм поддерживает:

  • направленный, невзвешенный
  • ненаправленный, невзвешенный

Это ТАК ответ, давайте продолжим разговор на Github.

Другие вопросы по тегам