SlideShare une entreprise Scribd logo
1  sur  62
Télécharger pour lire hors ligne
GraphAware
TM
Christophe Willemsen
graphaware.com
@graph_aware
Recommandations
avec Neo4j
Construction d’un moteur de recommandation haute-performance
GraphAware
TM
Rapide introduction
Pourquoi les graphes ?
Challenges Business et Techniques
GraphAware Recommendation Engine
A propos
GraphAware
TM
Articles que vous pourriez lire
Livres que vous pourriez acheter
Personnes que vous pourriez connaitre
Personnes que vous pourriez rencontrer
Personnes auxquelles vous pourriez présenter

votre produit
…
Recommandation
GraphAware
TM
Approche contenu (caractéristiques)
Filtrage collaboratif (relations utilisateur <-> produit)
Recommandation
GraphAware
TM
Les caractéristiques tout comme les relations
peuvent être représentées naturellement dans un
graphe.
Bonnes nouvelles
GraphAware
TM
Exemple
IS_OF_GENRE
title:
“Love Actually”
Movie
name: “Bob”
User
name:
“Comedy”
Genre
RATED
rating: 5
name: “Alice”
User
name:
“Romance”
Genre
title:
“American Pie”
Movie
IS_OF_GENRE
IS_OF_GENRE
RATEDrating: 5
INTERESTED_IN
rating: 5
RATED
GraphAware
TM
Facile à comprendre
Modélisation naturelle
Flexible (schema-free)
Temps de requête ultra-rapides
Graphes (Neo4j)
GraphAware
TM
Bien pour un PoC rapide
Bien pour des petits jeux de données
Bien pour des logiques relativement simples
Cypher
GraphAware
TM
Cypher
MATCH
(u:User)-[:LIKED]->(m:Movie),
(m)<-[:LIKED]-(another:User),
(another)-[:LIKED]->(reco:Movie)
WHERE NOT
(u)-[:LIKED|DISLIKED]->(reco)
RETURN reco;
GraphAware
TM
Les spécificités d’un moteur de recommandation
pour le monde réel sont souvent beaucoup plus
complexes.
La réalité
GraphAware
TM
Imaginez que vous construisez la fonction
”personnes que vous pourriez connaître”
sur LinkedIn.
Exemple
GraphAware
TM
Après une session de brainstorming, votre équipe
définit de la façon suivante comment trouver des
personnes que vous pourriez connaître:
Exemple
GraphAware
TM
Contacts en commun
Amis Facebook en communs
Contacts email/mobile en commun
Tous les autres contacts email/mobile
Travaillé pour la même société
Etudié à la même école
Partage le même intérêt
Vit dans la même ville
Personnes que vous pourriez connaître
GraphAware
TM
Mais c’est seulement le début!
Retournons en arrière et améliorons tout cela.
GraphAware
TM
Plus de contacts en commun = meilleure chance?
Même ville / école / société = la taille compte?
Qu’en est-t-il des emails qui ne représentent pas
une personne ?
Et les personnes déjà connectées?
Et celles en attente…
Et celles rejetées…
Et celles ignorées répétivement…
Personnes que vous pourriez connaître
GraphAware
TM
Trouver des “choses” à recommander
Servir les recommandations les plus rélévantes
Mesurer la qualité des recommandations
Time to market / coût du développement
Challenges Business
GraphAware
TM
Performance (real-time!)
Challenges Techniques
GraphAware
TM
Mauvaise Recommandation
GraphAware
TM
Mauvaise Recommandation
GraphAware
TM
Performance (real-time!)
Simplicité
Flexibilité
Challenges Techniques
GraphAware
TM
Alors on a sorti une architecture de base open-
source d’un moteur de recommandation qui vous
aidera à résoudre tous ces challenges.
On l’a fait
GraphAware
TM
plugin Neo4j (utilise GraphAware Framework)
vous devez utiliser un langage JVM
architecture dogmatique
ultra rapide
ultra flexible
gère toute l’encapsulation
Moteur de recommandation
GraphAware
TM
Un moteur par “raison” de recommandation 

(core logic)
Le moteur effectuée une traversée dans le graphe
pour trouver des produits/personnes/..
Les moteurs sont assemblés ensemble dans un
moteur de haut-niveau
Décisions d’architecture
GraphAware
TM
Exemple
IS_OF_GENRE
title:
“Love Actually”
Movie
name: “Bob”
User
name:
“Comedy”
Genre
RATED
rating: 5
name: “Alice”
User
name:
“Romance”
Genre
title:
“American Pie”
Movie
IS_OF_GENRE
IS_OF_GENRE
RATEDrating: 5
INTERESTED_IN
rating: 5
RATED
GraphAware
TM
Un moteur par “raison” de recommandation 

(core logic)
Le moteur effectuée une traversée dans le graphe
pour trouver des produits/personnes/..
Les moteurs sont assemblés ensemble dans un
moteur de haut-niveau
Les produits trouvés plusieurs fois sont plus
rélévants
La rélévance dépend de la vitesse à laquelle un
produit a été trouvé
Décisions d’architecture
GraphAware
TM
Exemple
IS_OF_GENRE
title:
“Love Actually”
Movie
name: “Bob”
User
name:
“Comedy”
Genre
RATED
rating: 5
name: “Alice”
User
name:
“Romance”
Genre
title:
“American Pie”
Movie
IS_OF_GENRE
IS_OF_GENRE
RATEDrating: 5
INTERESTED_IN
rating: 5
RATED
GraphAware
TM
Un moteur par “raison” de recommandation 

(core logic)
Le moteur effectuée une traversée dans le graphe pour
trouver des produits/personnes/..
Les moteurs sont assemblés ensemble dans un moteur
de haut-niveau
Les produits trouvés plusieurs fois sont plus rélévants
La rélévance dépend de la vitesse à laquelle un produit a
été trouvé
Produits qui ne doivent pas être recommandés
Décisions d’architecture
GraphAware
TM
Example
IS_OF_GENRE
title:
“Love Actually”
Movie
name: “Bob”
User
name:
“Comedy”
Genre
RATED
rating: 5
name: “Alice”
User
name:
“Romance”
Genre
title:
“American Pie”
Movie
IS_OF_GENRE
IS_OF_GENRE
RATEDrating: 5
INTERESTED_IN
rating: 5
RATED
GraphAware
TM
Input -> Engine -> Recommandations
Scores et Score Transformers
Blacklists
Filters
Post-processors
Context (combien, en combien de temps,…?)
Loggers
Architecture
GraphAware
TM
En 5 minutes, on va construire un moteur de
recommandation qui vous proposera des personnes
avec qui vous pourriez vous connecter.
Let’s code
GraphAware
TM
0) Modèle
GraphAware
TM
1) Découverte
GraphAware
TM
public class FriendsInCommon extends SomethingInCommon {



@Override

public String name() {

return "friendsInCommon";

}



@Override

protected RelationshipType getType() {

return FRIEND_OF;

}



@Override

protected Direction getDirection() {

return BOTH;

}

}
GraphAware
TM
2) Score
GraphAware
TM
public class FriendsInCommon extends SomethingInCommon {

@Override

protected ScoreTransformer scoreTransformer() {

return new ParetoScoreTransformer(100, 10);

}



@Override

public String name() {

return "friendsInCommon";

}



@Override

protected RelationshipType getType() {

return FRIEND_OF;

}



@Override

protected Direction getDirection() {

return BOTH;

}

}
GraphAware
TM
3) Post-Process
GraphAware
TM
public class RewardSameLocation extends RewardSomethingShared {



@Override

protected RelationshipType type() {

return LIVES_IN;

}



@Override

protected Direction direction() {

return OUTGOING;

}



@Override

protected float scoreValue(Node reco, Node in, Node shared) {

return 10;

}



@Override

protected String scoreName() {

return "sameLocation";

}

}
GraphAware
TM
public class RewardSameLabels implements PostProcessor<Node, Node> {



@Override

public void postProcess(Recommendations<Node> out, Node in) {

Label[] inLabels = toArray(in.getLabels());



for (Recommendation<Node> reco : out.get()) {

if (Arrays.equals(inLabels, toArray(reco.getItem().getLabels()))) {

reco.add("sameGender", 10);

}

}

}

}
GraphAware
TM
4) Filter
GraphAware
TM
...



@Override

protected List<BlacklistBuilder<Node, Node>> blacklistBuilders() {

return asList(

new ExistingRelationshipBlacklistBuilder(FRIEND_OF, BOTH)

);

}



@Override

protected List<Filter<Node, Node>> filters() {

return asList(

new ExcludeSelf()

);

}

GraphAware
TM
5) Assemble
GraphAware
TM
public final class FriendsComputingEngine extends Neo4jTopLevelDelegatingEngine {



@Override

protected List<RecommendationEngine<Node, Node>> engines() {

return Arrays.<RecommendationEngine<Node, Node>>asList(

new FriendsInCommon(),

new RandomPeople()

);

}



@Override

protected List<PostProcessor<Node, Node>> postProcessors() {

return Arrays.asList(

new RewardSameLabels(),

new RewardSameLocation(),

new PenalizeAgeDifference()

);

}



@Override

protected List<BlacklistBuilder<Node, Node>> blacklistBuilders() {

return Arrays.asList(

new ExistingRelationshipBlacklistBuilder(FRIEND_OF, BOTH)

);

}



@Override

protected List<Filter<Node, Node>> filters() {

return Arrays.<Filter<Node, Node>>asList(

new ExcludeSelf()

);

}

}
GraphAware
TM
?) Precompute
GraphAware
TM
public final class FriendsComputingEngine extends Neo4jTopLevelDelegatingEngine {



public FriendsComputingEngine() {

super(new FriendsContextFactory());

}



@Override

protected List<RecommendationEngine<Node, Node>> engines() {

return asList(

new FriendsInCommon(),

new RandomPeople()

);

}



@Override

protected List<PostProcessor<Node, Node>> postProcessors() {

return asList(

new RewardSameLabels(),

new RewardSameLocation(),

new PenalizeAgeDifference()

);

}



@Override

public ParticipationPolicy<Node, Node> participationPolicy(Context<Node, Node> context) {

return ParticipationPolicy.IF_MORE_RESULTS_NEEDED;

}

}
GraphAware
TM
public final class FriendsRecommendationEngine extends Neo4jTopLevelDelegatingEngine {



@Override

protected List<RecommendationEngine<Node, Node>> engines() {

return Arrays.<RecommendationEngine<Node, Node>>asList(

new Neo4jPrecomputedEngine(),

new FriendsComputingEngine()

);

}



@Override

protected List<BlacklistBuilder<Node, Node>> blacklistBuilders() {

return Arrays.asList(

new ExistingRelationshipBlacklistBuilder(FRIEND_OF, BOTH)

);

}



@Override

protected List<Filter<Node, Node>> filters() {

return Arrays.<Filter<Node, Node>>asList(

new ExcludeSelf()

);

}

}

GraphAware
TM
6) Log
GraphAware
TM
public final class FriendsRecommendationEngine extends Neo4jTopLevelDelegatingEngine {



@Override

protected List<RecommendationEngine<Node, Node>> engines() {

return Arrays.<RecommendationEngine<Node, Node>>asList(

new Neo4jPrecomputedEngine(),

new FriendsComputingEngine()

);

}



@Override

protected List<BlacklistBuilder<Node, Node>> blacklistBuilders() {

return Arrays.asList(

new ExistingRelationshipBlacklistBuilder(FRIEND_OF, BOTH)

);

}



@Override

protected List<Filter<Node, Node>> filters() {

return Arrays.<Filter<Node, Node>>asList(

new ExcludeSelf()

);

}



@Override

protected List<Logger<Node, Node>> loggers() {

return Arrays.asList(

new Slf4jRecommendationLogger<Node, Node>(),

new Slf4jStatisticsLogger<Node, Node>()

);

}

}

GraphAware
TM
7) Test
GraphAware
TM
List<Recommendation<Node>> reco =

recommendationEngine.recommend(getPersonByName(“Adam"), 2);



String expected = 

"(Vince {total:19.338144," +

"ageDifference:-5.527864," +

"friendsInCommon:14.866008," +

"sameGender:10.0})," +



"(Luanne {total:11.553411," +

"ageDifference:-3.312597," +

"friendsInCommon:14.866008})";



assertEquals(expected, toString(reco));
GraphAware
TM
Trouver des “choses” à recommander
Servir les recommandations les plus rélévantes
Mesurer la qualité des recommandations
Time to market / coût du développement
Challenges Business
GraphAware
TM
Performance (real-time!)
Simplicité
Flexibilité
Challenges Techniques
GraphAware
TM
A vous !
<dependencies>
...
<dependency>

<groupId>com.graphaware.neo4j</groupId>

<artifactId>recommendation-engine</artifactId>
<version>2.2.0.30.6</version>

</dependency>
...
<dependencies>
GraphAware
TM
Habilité intégrée pour pré-computer les
recommandations
Autres classes intégrées
Time-based ParticipationPolicy
Raisons for Recommendation
Contribuez !
https://github.com/graphaware/neo4j-reco
Il y a encore plus !
GraphAware
TM
Algorithmes intégrés
Intégration avec des compute engines
Machine learning
Futur
GraphAware
TM
Le Framework GraphAware rend facile la
conception, le test et le déploiement de
fonctionnalités pour Neo4j, aussi bien génériques
que spécifiques à un domaine.
GraphAware Framework
GraphAware
TM
GraphUnit

& RestTest
RelCount WarmUp Schema (wip)
Recommendation
Engine
GraphAware Framework
ChangeFeed UUID TimeTree Algorithms NodeRank
GraphAware
TM
Open Source (GPL)
Actif
Production Ready
Github: github.com/graphaware
Web: graphaware.com
Maven Central
GraphAware Framework
GraphAware
TM
Essayez
Donnez-nous du feedback
Contribuez
Concevez vos propres modules
Contactez-nous pour du support/consultance
GraphAware Framework
Questions ?
Merci !
GraphAware
TM
Christophe Willemsen
Twitter: @ikwattro
Github: @ikwattro

Contenu connexe

En vedette

Introduction au cloud computing
Introduction au cloud computingIntroduction au cloud computing
Introduction au cloud computingStéphane Traumat
 
Search Engine Optimization
Search Engine Optimization Search Engine Optimization
Search Engine Optimization ch.ch
 
LNG FUEL & DUAL FUEL ENGINE
LNG FUEL & DUAL FUEL ENGINELNG FUEL & DUAL FUEL ENGINE
LNG FUEL & DUAL FUEL ENGINENguyen Tri
 
Network Meeting - Integration von Camunda mit Liferay
Network Meeting - Integration von Camunda mit LiferayNetwork Meeting - Integration von Camunda mit Liferay
Network Meeting - Integration von Camunda mit Liferaycamunda services GmbH
 
JUG Luzern: Open Source BPM mit BPMN 2.0 und Java
JUG Luzern: Open Source BPM mit BPMN 2.0 und JavaJUG Luzern: Open Source BPM mit BPMN 2.0 und Java
JUG Luzern: Open Source BPM mit BPMN 2.0 und Javacamunda services GmbH
 
Introduction to Oracle Grid Engine
Introduction to Oracle Grid Engine Introduction to Oracle Grid Engine
Introduction to Oracle Grid Engine Morteza Zakeri
 
Slidedeck Datenanalysen auf Speed - Oracle R Enterprise (ORE) Demo - DOAG Big...
Slidedeck Datenanalysen auf Speed - Oracle R Enterprise (ORE) Demo - DOAG Big...Slidedeck Datenanalysen auf Speed - Oracle R Enterprise (ORE) Demo - DOAG Big...
Slidedeck Datenanalysen auf Speed - Oracle R Enterprise (ORE) Demo - DOAG Big...Nadine Schoene
 
Testgetriebene Geschäftsprozessmodellierung
Testgetriebene GeschäftsprozessmodellierungTestgetriebene Geschäftsprozessmodellierung
Testgetriebene GeschäftsprozessmodellierungZambrovski Simon
 
WJAX 2012: Dreamteam "BPM + Java EE"
WJAX 2012: Dreamteam "BPM + Java EE"WJAX 2012: Dreamteam "BPM + Java EE"
WJAX 2012: Dreamteam "BPM + Java EE"camunda services GmbH
 
Ein Prozess lernt laufen: LEGO Mindstorms Steuerung mit BPMN
Ein Prozess lernt laufen: LEGO Mindstorms Steuerung mit BPMNEin Prozess lernt laufen: LEGO Mindstorms Steuerung mit BPMN
Ein Prozess lernt laufen: LEGO Mindstorms Steuerung mit BPMNComsysto Reply GmbH
 
7 Tipps für erfolgreiches SEA Autor Patrick Palz
7 Tipps für erfolgreiches SEA Autor Patrick Palz7 Tipps für erfolgreiches SEA Autor Patrick Palz
7 Tipps für erfolgreiches SEA Autor Patrick PalzPatrick Palz
 
Hadoop et son écosystème
Hadoop et son écosystèmeHadoop et son écosystème
Hadoop et son écosystèmeKhanh Maudoux
 

En vedette (12)

Introduction au cloud computing
Introduction au cloud computingIntroduction au cloud computing
Introduction au cloud computing
 
Search Engine Optimization
Search Engine Optimization Search Engine Optimization
Search Engine Optimization
 
LNG FUEL & DUAL FUEL ENGINE
LNG FUEL & DUAL FUEL ENGINELNG FUEL & DUAL FUEL ENGINE
LNG FUEL & DUAL FUEL ENGINE
 
Network Meeting - Integration von Camunda mit Liferay
Network Meeting - Integration von Camunda mit LiferayNetwork Meeting - Integration von Camunda mit Liferay
Network Meeting - Integration von Camunda mit Liferay
 
JUG Luzern: Open Source BPM mit BPMN 2.0 und Java
JUG Luzern: Open Source BPM mit BPMN 2.0 und JavaJUG Luzern: Open Source BPM mit BPMN 2.0 und Java
JUG Luzern: Open Source BPM mit BPMN 2.0 und Java
 
Introduction to Oracle Grid Engine
Introduction to Oracle Grid Engine Introduction to Oracle Grid Engine
Introduction to Oracle Grid Engine
 
Slidedeck Datenanalysen auf Speed - Oracle R Enterprise (ORE) Demo - DOAG Big...
Slidedeck Datenanalysen auf Speed - Oracle R Enterprise (ORE) Demo - DOAG Big...Slidedeck Datenanalysen auf Speed - Oracle R Enterprise (ORE) Demo - DOAG Big...
Slidedeck Datenanalysen auf Speed - Oracle R Enterprise (ORE) Demo - DOAG Big...
 
Testgetriebene Geschäftsprozessmodellierung
Testgetriebene GeschäftsprozessmodellierungTestgetriebene Geschäftsprozessmodellierung
Testgetriebene Geschäftsprozessmodellierung
 
WJAX 2012: Dreamteam "BPM + Java EE"
WJAX 2012: Dreamteam "BPM + Java EE"WJAX 2012: Dreamteam "BPM + Java EE"
WJAX 2012: Dreamteam "BPM + Java EE"
 
Ein Prozess lernt laufen: LEGO Mindstorms Steuerung mit BPMN
Ein Prozess lernt laufen: LEGO Mindstorms Steuerung mit BPMNEin Prozess lernt laufen: LEGO Mindstorms Steuerung mit BPMN
Ein Prozess lernt laufen: LEGO Mindstorms Steuerung mit BPMN
 
7 Tipps für erfolgreiches SEA Autor Patrick Palz
7 Tipps für erfolgreiches SEA Autor Patrick Palz7 Tipps für erfolgreiches SEA Autor Patrick Palz
7 Tipps für erfolgreiches SEA Autor Patrick Palz
 
Hadoop et son écosystème
Hadoop et son écosystèmeHadoop et son écosystème
Hadoop et son écosystème
 

Similaire à Recommandations avec Neo4j et le GraphAware Recommendation Engine

Grails from scratch to prod - MixIT 2010
Grails from scratch to prod - MixIT 2010Grails from scratch to prod - MixIT 2010
Grails from scratch to prod - MixIT 2010Aurélien Maury
 
Octo RefCard test front-end
Octo RefCard test front-endOcto RefCard test front-end
Octo RefCard test front-endClément Dubois
 
Octo Technology - Refcard Tests Web front-end
Octo Technology - Refcard Tests Web front-endOcto Technology - Refcard Tests Web front-end
Octo Technology - Refcard Tests Web front-endFrançois Petitit
 
Grails from scratch to prod - MixIT 2011
Grails from scratch to prod - MixIT 2011Grails from scratch to prod - MixIT 2011
Grails from scratch to prod - MixIT 2011Aurélien Maury
 
Java 5, un blian
Java 5, un blianJava 5, un blian
Java 5, un bliantareq
 
Java 5, un bilan
Java 5,  un bilanJava 5,  un bilan
Java 5, un bilanteejug
 
Développement avec Java Micro Edition
Développement avec Java Micro EditionDéveloppement avec Java Micro Edition
Développement avec Java Micro EditionSylvain Wallez
 
FME WT 2014: (FR) Validation et controle qualité des géodonnées
FME WT 2014: (FR) Validation et controle qualité des géodonnéesFME WT 2014: (FR) Validation et controle qualité des géodonnées
FME WT 2014: (FR) Validation et controle qualité des géodonnéesGIM_nv
 
Comment traduire ses bases de données sans douleur
Comment traduire ses bases de données sans douleurComment traduire ses bases de données sans douleur
Comment traduire ses bases de données sans douleurDavid Paccoud
 

Similaire à Recommandations avec Neo4j et le GraphAware Recommendation Engine (20)

Grails from scratch to prod - MixIT 2010
Grails from scratch to prod - MixIT 2010Grails from scratch to prod - MixIT 2010
Grails from scratch to prod - MixIT 2010
 
Dynamic Languages
Dynamic LanguagesDynamic Languages
Dynamic Languages
 
Documentation
DocumentationDocumentation
Documentation
 
Octo RefCard test front-end
Octo RefCard test front-endOcto RefCard test front-end
Octo RefCard test front-end
 
Octo Technology - Refcard Tests Web front-end
Octo Technology - Refcard Tests Web front-endOcto Technology - Refcard Tests Web front-end
Octo Technology - Refcard Tests Web front-end
 
Applets
AppletsApplets
Applets
 
Grails from scratch to prod - MixIT 2011
Grails from scratch to prod - MixIT 2011Grails from scratch to prod - MixIT 2011
Grails from scratch to prod - MixIT 2011
 
react-fr.pdf
react-fr.pdfreact-fr.pdf
react-fr.pdf
 
Presentation JPA
Presentation JPAPresentation JPA
Presentation JPA
 
Refcard GraphQL
Refcard GraphQLRefcard GraphQL
Refcard GraphQL
 
Java 5, un blian
Java 5, un blianJava 5, un blian
Java 5, un blian
 
Java 5, un bilan
Java 5,  un bilanJava 5,  un bilan
Java 5, un bilan
 
Développement avec Java Micro Edition
Développement avec Java Micro EditionDéveloppement avec Java Micro Edition
Développement avec Java Micro Edition
 
Dictionnaire duweb
Dictionnaire duwebDictionnaire duweb
Dictionnaire duweb
 
FME WT 2014: (FR) Validation et controle qualité des géodonnées
FME WT 2014: (FR) Validation et controle qualité des géodonnéesFME WT 2014: (FR) Validation et controle qualité des géodonnées
FME WT 2014: (FR) Validation et controle qualité des géodonnées
 
Comment traduire ses bases de données sans douleur
Comment traduire ses bases de données sans douleurComment traduire ses bases de données sans douleur
Comment traduire ses bases de données sans douleur
 
ORM
ORMORM
ORM
 
ORM
ORMORM
ORM
 
ORM
ORMORM
ORM
 
ORM
ORMORM
ORM
 

Plus de Christophe Willemsen

Knowledge graphs + Chatbots with Neo4j
Knowledge graphs + Chatbots with Neo4jKnowledge graphs + Chatbots with Neo4j
Knowledge graphs + Chatbots with Neo4jChristophe Willemsen
 
Chatbots and Voice Conversational Interfaces with Amazon Alexa, Neo4j and Gra...
Chatbots and Voice Conversational Interfaces with Amazon Alexa, Neo4j and Gra...Chatbots and Voice Conversational Interfaces with Amazon Alexa, Neo4j and Gra...
Chatbots and Voice Conversational Interfaces with Amazon Alexa, Neo4j and Gra...Christophe Willemsen
 
Management des issues Github avec Neo4j et NLP
Management des issues Github avec Neo4j et NLPManagement des issues Github avec Neo4j et NLP
Management des issues Github avec Neo4j et NLPChristophe Willemsen
 
Your own recommendation engine with neo4j and reco4php - DPC16
Your own recommendation engine with neo4j and reco4php - DPC16Your own recommendation engine with neo4j and reco4php - DPC16
Your own recommendation engine with neo4j and reco4php - DPC16Christophe Willemsen
 
Recommendation Engines with Neo4j, Symfony and Reco4PHP
Recommendation Engines with Neo4j, Symfony and Reco4PHPRecommendation Engines with Neo4j, Symfony and Reco4PHP
Recommendation Engines with Neo4j, Symfony and Reco4PHPChristophe Willemsen
 
Graph Database Prototyping made easy with Graphgen
Graph Database Prototyping made easy with GraphgenGraph Database Prototyping made easy with Graphgen
Graph Database Prototyping made easy with GraphgenChristophe Willemsen
 
Graphgen - le générateur de graphes
Graphgen - le générateur de graphesGraphgen - le générateur de graphes
Graphgen - le générateur de graphesChristophe Willemsen
 
Analysing Github events with Neo4j
Analysing Github events with Neo4jAnalysing Github events with Neo4j
Analysing Github events with Neo4jChristophe Willemsen
 

Plus de Christophe Willemsen (10)

Knowledge graphs + Chatbots with Neo4j
Knowledge graphs + Chatbots with Neo4jKnowledge graphs + Chatbots with Neo4j
Knowledge graphs + Chatbots with Neo4j
 
Chatbots and Voice Conversational Interfaces with Amazon Alexa, Neo4j and Gra...
Chatbots and Voice Conversational Interfaces with Amazon Alexa, Neo4j and Gra...Chatbots and Voice Conversational Interfaces with Amazon Alexa, Neo4j and Gra...
Chatbots and Voice Conversational Interfaces with Amazon Alexa, Neo4j and Gra...
 
Management des issues Github avec Neo4j et NLP
Management des issues Github avec Neo4j et NLPManagement des issues Github avec Neo4j et NLP
Management des issues Github avec Neo4j et NLP
 
Your own recommendation engine with neo4j and reco4php - DPC16
Your own recommendation engine with neo4j and reco4php - DPC16Your own recommendation engine with neo4j and reco4php - DPC16
Your own recommendation engine with neo4j and reco4php - DPC16
 
Recommendation Engines with Neo4j, Symfony and Reco4PHP
Recommendation Engines with Neo4j, Symfony and Reco4PHPRecommendation Engines with Neo4j, Symfony and Reco4PHP
Recommendation Engines with Neo4j, Symfony and Reco4PHP
 
Graph Database Prototyping made easy with Graphgen
Graph Database Prototyping made easy with GraphgenGraph Database Prototyping made easy with Graphgen
Graph Database Prototyping made easy with Graphgen
 
Graphgen - le générateur de graphes
Graphgen - le générateur de graphesGraphgen - le générateur de graphes
Graphgen - le générateur de graphes
 
Analysing Github events with Neo4j
Analysing Github events with Neo4jAnalysing Github events with Neo4j
Analysing Github events with Neo4j
 
Présentation symfony drupal
Présentation symfony drupalPrésentation symfony drupal
Présentation symfony drupal
 
GMDSS - Practice1
GMDSS - Practice1GMDSS - Practice1
GMDSS - Practice1
 

Recommandations avec Neo4j et le GraphAware Recommendation Engine