2016-11-27 12 views
0

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

+0

Мне любопытно, как вы видите, что такая система работает, если она не ссылается на то, что покупали другие, купившие то же самое, что у вас есть? Если единственная информация, на которую он ссылается, является вашим собственным, что она действительно может вам порекомендовать, кроме того, что вы купили ранее? – InverseFalcon

+0

Я думаю, вы могли бы порекомендовать другие продукты от того же производителя или аналогичные продукты от других производителей. Это должно быть достаточно легко сделать с Neo4j в одиночку, хотя вам понадобится ваш график для отслеживания типов товаров, а также производителей. Тем не менее, это большой набор рекомендаций, поэтому информация, дополняющая это, полезна, например, предметы, приобретенные другими, которые сделали подобные покупки для вас. – InverseFalcon

+0

hm, позвольте мне попытаться уточнить. README.md из neo4j-reco дает пример «FriendsComputingEngine», где я мог бы вычислять людей, которые, вероятно, знаю, потому что у нас есть общие друзья. Я задаюсь вопросом: если бы у нас было два объекта, пользователи и элементы, и каждый пользователь мог бы «понравиться» нескольким элементам, как бы получить рекомендации для конкретного пользователя, основываясь на тех элементах, которые ему уже «нравятся». –

ответ

3

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 

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

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 Реко будет автоматически объединить результаты от каждого двигателя в один.

Вы можете найти пример 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 для продвижения процесса вычисления подобия вне из neo4j jvm и запишите результаты/отношения к neo4j (не с открытым исходным кодом)