Moteurs de recommandation
avec Neo4j
Qui moi être ?
• Christophe Willemsen• Software Engineer | Certified Neo4j Expert @GraphAware• Bruges (Belgique)
Recommandations : Vue globale
• Des nouvelles que vous pourriez lire• Des livres que vous pourriez acheter• Des personnes que vous pourriez connaître• Des personnes que vous pourriez inviter• Personnes à qui vous pourriez présenter votre produit• …
Types principaux de recommandation
• Basé sur le contenu (features)• Filtrage collaboratif (relations utilisateur -‐> élément)
La bonne nouvelle
Les features tout comme les relationspeuvent être représentées naturellement
dans un graphe.
La bonne nouvelle
La logique de recommendation peut être représentée en traversée dans le graphe.
Exemple
Recommandation : Business Side
Identification des règles métier afin de fournir
de la recommandation
Exemple
Recommandation : Business Side
Recommander à Alice les films vus par les personnes qui ont noté les mêmes films qu’elle ET qu’elle n’a pas encore noté.
Votre première requête de reco
Recommandation : Business Side
Si le film fait partie d’un Genre qui intéresseAlice, augmenter le score de 1
Votre deuxième première requête de reco(la deuxième quoi)
La vraie vie c’est compliqué…
Les spécificités de moteur de recommandations dans le monde réel sont
beaucoup plus complexes.
La vraie vie c’est compliqué…
Imaginez que vous devez implémenter la fonctionnalité
“Personnes que vous pourriez connaître” sur LinkedIn
La vraie vie c’est compliqué…
Après une session de brainstorming, votre équipe a défini les différentes possibilités pour trouver des personnes que quelqu’un
pourrait connaître.
La vraie vie c’est compliqué…• Contacts en commun• Amis Facebook en commun• Contacts email/mobile en commun• Les contacts de tous vos contacts• A travaillé pour la même entreprise• A étudié à la même école• Partagent le même intérêt• Vivent dans la même ville
La vraie vie c’est compliqué…
Mais c’est seulement le début ! Revenons en arrière et regardons
cela de plus près!
La vraie vie c’est compliqué…
Plus de contacts en commun :
plus rélévant?
La vraie vie c’est compliqué…
Même ville ou école :
Est-‐ce que la taille compte ?
La vraie vie c’est compliqué…
Qu’est-‐ce qu’on fait avec les é-‐mails quine représentent pas une personne ?
On recommande [email protected] ?
La vraie vie c’est compliqué…
Et on fait quoi avec les contacts
qui sont en attente ?qui sont rejetés ?
qui sont ignorés tout le temps ?
La vraie vie c’est compliqué…
Etapes de base d’un moteur de reco
• Trouver • Qualifier• Supprimer les non rélévants•Mesurer la qualité
#GraphAwareRecoThe Open-‐Source Recommendation Engine Skeleton
GraphAwareReco
• Plugin pour Neo4j (utilise GraphAware Framework)• Vous pouvez utiliser Cypher ou n’importe quel langage JVM• Architecture opnionated• Ultra rapide• Ultra flexible• Se charge de toute la glue
GraphAwareReco
Votre premier moteur de reco.. yeahhh
Votre premier moteur de reco
Imaginons qu’on a un graphe de personnes.
Votre premier moteur de reco
Notre intention est de recommander des personnes que vous pourriez être ami avec :
• Plus d’amis en commun => meilleur score• Vivent dans la meme ville => plus de rélévance• Même sexe => meilleure chance• Pénaliser la différence d’âge• Ceux qui sont déjà amis ne doivent pas être recommandés
Votre premier moteur de reco
Notre intention est de recommander des personnes que vous pourriez être ami avec :
• Plus d’amis en commun => meilleur score• Vivent dans la meme ville => plus de rélévance• Même sexe => meilleure chance• Pénaliser la différence d’âge• Ceux qui sont déjà amis ne doivent pas être recommandés
Découverte!
Qualification (score) : même ville
Qualification (score) : même sexe
Qualification (score) : pénaliser différence âge
Blacklists et filtres
On pourrait créer une blacklist pour ne pas retourner les Personnes déjà connectées de la même manière que les PostProcessors, mais on va utiliser une fonctionalité toute
prête.
Et on colle tout ensemble
La suite ?
#GraphAidedSearchElasticSearch and Graphs.The best of both worlds
#GraphAidedSearchProcessus qui permet de trouver les résultats les plus rélévants d’une requête de recherche en combinant les scores de rélévance fournis par un moteur de recherche avec ceux produits par un moteur de recommandation.
GraphAidedSearch
GraphAidedSearch
Questions ?
#MerciTwitter : @ikwattro -‐ @graph_aware
http://graphaware.comhttps://github.com/graphaware