[Neo4j] Recommendation based on "likes"

Marko Rodriguez okrammarko at gmail.com
Sat Jul 24 15:35:14 CEST 2010


Hello,

I have a presentation on will be putting on Slideshare on Monday the 26th. I discuss, in depth, numerous recommendation algorithms, execution times, and techniques to modify/augment such algorithms. I will post the presentation URL to this list on Monday. 

For your current question, in short, in Gremlin, this is how I would do basic collaborative filtering over a graph:

(./outE[@label='likes']/inV)[g:assign('$x')]/inE[@label='likes']/outV[g:except($_)]/outE[@label='likes']/inV[g:except($x)]

In natural language, determine what I like, determine who else likes those things that are not me (those people that share more in common with me will have more traversers at their vertex). Finally, what do those people like that I don't already like (weighted by more similar people like that same things).

This is basic collaborative filtering and the presentation I will provide on Monday has numerous manipulations to this basic theme.

Take care,
Marko.

http://markorodriguez.com
http://tinkerpop.com

On Jul 24, 2010, at 7:14 AM, veggen wrote:

> 
> It's a fairly typical recommendation scenario: a user is looking at an item
> and gets suggestions for other items based on the number of users that like
> this item liking those other items also.
> 
> So, I'm trying to implement this using Neo4j. Obviously, the graph contains
> user nodes and item nodes connected by the "likes" relationship. Currently,
> I'm not aware of any direct way to count in Neo, so I was thinking of
> implementing this requirement as follows (in pseudo code):
> 
> *have a hashmap to store count per item (<itemId, count>)
> *start from the item the user is looking at
> *traverse "likes" relationships, in both directions, breath-first, 2 levels
> deep
> *for every item node encountered, increment the count for that node
> 
> It is vital for this algorithm to be as fast as possible, so I'm asking if
> there's any better way to implement it? Also, do you think it would work
> faster in Neo compared to a traditional RDbMS (with a user-table, item-table
> and an interconnecting table)?
> 
> Thanks for any advice :)
> -- 
> View this message in context: http://neo4j-user-list.438527.n3.nabble.com/Recommendation-based-on-likes-tp992069p992069.html
> Sent from the Neo4J User List mailing list archive at Nabble.com.
> _______________________________________________
> Neo4j mailing list
> User at lists.neo4j.org
> https://lists.neo4j.org/mailman/listinfo/user



More information about the User mailing list