как получить пользовательские рекомендации с помощью graphaware neo4j-reco

Мне нужно получить пользовательские рекомендации с помощью graphaware, и я не знаю, как это сделать. Насколько я понимаю, все, что я получаю от neo4j-reco от graphaware, — это сходство предметов, как в «люди, которые купили a, также купили b». Но что меня интересует, так это рекомендации пользователей, такие как «рекомендовано для вас на основе ваших предыдущих покупок». Любая идея, как это сделать?


person Bernd Hopp    schedule 27.11.2016    source источник
comment
Мне любопытно, как, по-вашему, работает такая система, если она не ссылается на то, что купили другие, купившие то же самое, что и вы? Если единственная информация, на которую он ссылается, является вашей собственной, что он действительно может вам порекомендовать, кроме того, что вы купили ранее?   -  person InverseFalcon    schedule 27.11.2016
comment
Я думаю, вы могли бы порекомендовать другие продукты того же производителя или аналогичные продукты других производителей. Это должно быть достаточно легко сделать только с Neo4j, хотя вам понадобится ваш график для отслеживания типов предметов, а также производителей. Тем не менее, это большой набор рекомендаций, поэтому полезно иметь информацию, дополняющую это, например, товары, которые купили другие, которые совершили покупки, аналогичные вашим.   -  person InverseFalcon    schedule 27.11.2016
comment
хм, попробую уточнить. В файле README.md neo4j-reco приводится пример «FriendsComputingEngine», с помощью которого я могу вычислять людей, которых я, вероятно, знаю, потому что у нас есть общие друзья. Мне вот что интересно: если бы у нас было две сущности, пользователи и элементы, и каждый пользователь мог бы «лайкнуть» несколько элементов, как бы я получил рекомендации для конкретного пользователя на основе элементов, которые ему уже «нравятся».   -  person Bernd Hopp    schedule 28.11.2016
comment
В основе FriendsComputingEngine лежит поиск общих друзей, причем чем больше общих друзей, тем сильнее совпадение. Подход людей, которые купили a, также купили b, аналогичен: они находят людей с похожими покупательскими привычками, которые купили или любят одни и те же товары (больше общего, вероятно, более сильная рекомендация), а затем находят другие вещи, которые им понравились или которые они купили. можно было бы вам порекомендовать. Ранее я упоминал о запросе других предметов от того же производителя или предметов того же типа. Если у вас есть надежная система тегов, это тоже может помочь.   -  person InverseFalcon    schedule 28.11.2016
comment
Я не понимаю, ищете ли вы идеи о том, какую логику использовать, или вы знаете логику и просто задаетесь вопросом, как ее реализовать с помощью GraphAware Reco. Итак, мой вопрос к вам: сможете ли вы выразить свою логику рекомендаций на основе пользователей с помощью запроса Cypher?   -  person Michal Bachman    schedule 28.11.2016


Ответы (1)


GraphAware-Reco — это в основном каркас, помогающий создавать механизмы рекомендаций корпоративного уровня на основе базы данных neo4j.

Это означает, что он предоставляет базовые классы и архитектуру, которые вам нужно расширять с помощью собственной логики.

Если вы возьмете свои требования, вот история покупок, очень наивный подход для начала, например, найти характеристики приобретенных продуктов.

Допустим, пользователь 1 купил iphone и ipad, которые могут иметь следующие характеристики:

iphone brand : apple, category: electronics
ipad brand: apple, category: electronics

Вы можете создать первый движок, который будет соответствовать потенциальным кандидатам на основе этих характеристик, этот движок будет расширять CypherEngine со следующим запросом:

MATCH (n:User {id: 111})-[:PURCHASED]->(product)
WITH distinct product
MATCH (product)-[:HAS_CHARACTERISTIC]->(c)<-[:HAS_CHARACTERISTIC]-(reco)
RETURN reco, count(*) AS score

Другой подход, который вы можете комбинировать с этим, заключается в том, чтобы найти людей, купивших те же товары, что и пользователь, и найти то, что они также купили. Затем вы создадите другой движок со следующим запросом:

MATCH (n:User {id: 111})-[:PURCHASED]->(product)
WITH distinct product, user
MATCH (product)<-[:PURCHASED]-(collab)
WHERE collab <> user
MATCH (collab)-[:PURCHASED]->(reco)
RETURN reco, count(*) AS score

При использовании этих двух движков GraphAware Reco автоматически объединяет оценки от каждого движка в один.

Вы можете найти пример CypherEngine в тестах: https://github.com/graphaware/neo4j-reco/blob/master/src/test/java/com/graphaware/reco/neo4j/engine/CypherEngineTest.java< /а>

Вы также можете добавить черный список, чтобы не рекомендовать товары, которые пользователь уже купил.

Как я уже сказал, это первый шаг, если у вас есть большой каталог с большим количеством покупок, вы можете рассмотреть возможность выполнения фоновых вычислений (например, для сходства между продуктами и соотнесения только лучших k-nn продуктов между ними и одинаковых для покупок и связанных с ними товаров). похожие пользователи между ними)

GraphAware-Reco предлагает средства для фоновых вычислений и GraphAware-Reco-Enterprise поставляется с предварительно определенными алгоритмами для вычисления подобия между элементами, а также интеграцией Apache Spark для переноса процесса вычисления сходства за пределы из neo4j jvm и записать результаты/взаимосвязи в neo4j (не с открытым исходным кодом)

person Christophe Willemsen    schedule 28.11.2016