Мне нужно получить пользовательские рекомендации с помощью графика, и я не знаю, как это сделать. Насколько я могу судить, все, что я, по-видимому, получаю от neo4j-reco от графика, - это сходство предметов, как и у «людей, которые купили и купили b». Но меня интересуют пользовательские рекомендации, например «рекомендуемые для вас, на основе ваших предыдущих покупок». Любая идея, как это сделать?Как получить пользовательскую рекомендацию с помощью графика devo4j-reco
ответ
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 (не с открытым исходным кодом)
Мне любопытно, как вы видите, что такая система работает, если она не ссылается на то, что покупали другие, купившие то же самое, что у вас есть? Если единственная информация, на которую он ссылается, является вашим собственным, что она действительно может вам порекомендовать, кроме того, что вы купили ранее? – InverseFalcon
Я думаю, вы могли бы порекомендовать другие продукты от того же производителя или аналогичные продукты от других производителей. Это должно быть достаточно легко сделать с Neo4j в одиночку, хотя вам понадобится ваш график для отслеживания типов товаров, а также производителей. Тем не менее, это большой набор рекомендаций, поэтому информация, дополняющая это, полезна, например, предметы, приобретенные другими, которые сделали подобные покупки для вас. – InverseFalcon
hm, позвольте мне попытаться уточнить. README.md из neo4j-reco дает пример «FriendsComputingEngine», где я мог бы вычислять людей, которые, вероятно, знаю, потому что у нас есть общие друзья. Я задаюсь вопросом: если бы у нас было два объекта, пользователи и элементы, и каждый пользователь мог бы «понравиться» нескольким элементам, как бы получить рекомендации для конкретного пользователя, основываясь на тех элементах, которые ему уже «нравятся». –