From user preferences and location to time of day and weather, complex context representations have been the key to delivering personalised content. Graph databases excel at dealing with large amounts of complex data and therefore, they have been at the core of many modern real-time recommendation systems. In the near future, graph databases will play an equally important role in search personalisation.
In this talk, Michal will introduce real-world content personalization requirements and show how Neo4j has been used to implement them. He will show how much recommendation and search engines have in common and give an overview of the latest innovations in the field of search personalisation.
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Real-Time Recommendations and the Future of Search
1. and the Future of Search
GraphAware®
graphaware.com
@graph_aware
Real-Time
Recommendations
Michal Bachman
2. News you should read
Books you should buy
People you may know
People you should date
People you should market a product to
…
Recommendation Engines
GraphAware®
16. Cypher Query Example
MATCH
(u:User {id:1})-[:LIKED]->(m:Movie),
(m)<-[:LIKED]-(another:User),
(another)-[:LIKED]->(reco:Movie)
WHERE NOT
(u)-[:LIKED|DISLIKED]->(reco)
RETURN reco;
GraphAware®
19. After a brainstorming session, your team came up
with the following ways of finding people one may
know:
Example
GraphAware®
20. Common contacts
Facebook friends in common
Email / mobile contacts in common
Each others email / mobile contact
Worked for the same company
Studied at the same school
Share the same interest
Live in the same city
People You May Know
GraphAware®
21. But that’s just the beginning! Let’s go back and
re-visit.
Example
GraphAware®
22. More contacts in common = better chance?
Same city / school / company = does size matter?
What about emails that don’t represent a person?
What about people already connected?
And pending…
And rejected…
And repeatedly ignored…
People You May Know
GraphAware®
36. GraphAware Reco is an open-source recommendation
engine skeleton.
You Can Do It Too
GraphAware®
37. public class PeopleYouMayKnow extends Neo4jTopLevelDelegatingRecommendationEngine {
@Override
protected List<RecommendationEngine<Node, Node>> engines() {
return Arrays.<RecommendationEngine<Node, Node>>asList(
new SharedEmployment(),
new ConnectionsInCommon(),
new MobileContacts(),
new ReverseMobileContacts(),
new MobileContactsInCommon(),
new SharedStudies()
);
}
@Override
protected List<PostProcessor<Node, Node>> postProcessors() {
return Arrays.<PostProcessor<Node, Node>>asList(
new RewardSameCity(),
new RewardSameState(),
new PenalizeAlreadySeen()
);
}
@Override
protected List<BlacklistBuilder<Node, Node>> blacklistBuilders() {
return Arrays.asList(
new ExcludeSelf(),
new ExistingRelationshipBlacklistBuilder(CONNECTED, BOTH),
new ExistingRelationshipBlacklistBuilder(INVITED, OUTGOING),
new ExistingRelationshipBlacklistBuilder(REJECTED, BOTH)
);
}
@Override
protected List<Filter<Node, Node>> filters() {
return Arrays.<Filter<Node, Node>>asList(
new PrivacySettingTooHigh()
);
}
}
GraphAware®
38. plugin to Neo4j (uses GraphAware Framework)
you can use Cypher or a JVM-language
opinionated architecture
very fast
very flexible
handles all the plumbing
GraphAware Reco
GraphAware®
42. Closer users on top
Products likely to buy on top
…
Requirements
GraphAware®
=> Recommendation Engine
with a constrained set of possible recommendations
46. Process of finding the most relevant results of a
search query by combining the relevancy scores
produced by a search engine with those produced
by a graph-based recommendation engine.
Graph-Aided Search
GraphAware®