Système de recommandation sur hébergeur mutualisé

Système de recommandation sur hébergeur mutualisé - Python - Programmation

Marsh Posté le 14-01-2018 à 16:17:57    

Bonjour,
 
J'ai une base de données mySQL classiques avec :
- une table Utilisateurs
- une table Articles
- une table Utilisateurs_Articles qui montre les articles que chaque utilisateur possède
 
J'aimerais offrir un système de recommandation basé sur ce que les autres utilisateurs possèdent.
Par exemple, si un utilisateur possède les articles A, B et C, et que je possède les articles A et B, j'aimerais me voir proposer l'article C.
 
Selon cet article, il s'agit donc de User-User Collaborative filtering.
 
J'ai vu au cours de mes premières recherches des articles sur Spark et sur LightFM.
J'ai toutefois comme contrainte d'être sur un hébergement mutualisé infomaniak qui n'a que ces librairies python installées : http://imu330.infomaniak.ch/pythonmodules.py
 
Connaissez-vous des systèmes de recommandation légers pouvant être utilisés chez des hébergeurs mutualisés ?
Je n'étais pas sûr de la catégorie où poster, ce n'a pas forcément à être en Python  :)  
 
Merci


Message édité par petite fraise le 14-01-2018 à 16:39:25
Reply

Marsh Posté le 14-01-2018 à 16:17:57   

Reply

Marsh Posté le 14-01-2018 à 16:44:56    

Sur du mutualisé, tu vas assez vite être confronté au pb de ressources/perfs (Mo en RAM, temps d'exécution du script, % utilisation CPU et surtout nb de requêtes faites dans la BD).
 
Spark n'est pas fait pour du mutualisé et en plus, largement surdimensionné dans ton cas de figure.
 
Une simple SVD en t'arrêtant au besoin à l'étape de calcul de la matrice des covariances suffira (en gros, tu zappes l'étape de calcul des valeurs et vecteurs propres). Ca te donnera le % de corrélation entre tes utilisateurs. Bien entendu, dans ta matrice de départ, en ligne, tu mets tes articles et en colonnes, tes utilisateurs. Je te recommande de faire une pondération par le TF-iDF ans l'étape où tu comptes le nb d'instances de chaque article.
Tu mets un seuil à 40% ou plus à partir duquel tu estimes que 2 utilisateurs sont suffisamment proches.
 
Pour avoir implémenté cet algo dans mon outil de help-desk ASTRES (dans un plugin, non dispo en GPL) pour détecter les tickets identiques, similaires ou corrélés, ça marche pas mal du tout ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 14-01-2018 à 21:11:35    

Merci beaucoup de ta réponse !
C'est vrai que la logique de base est assez simple à appréhender.
 
Développant assez peu en Python, et l'implémentation semblant assez importante pour éviter des ralentissements inutiles, j'essaye de trouver la meilleure base avec "numpy" mais sans "pandas". J'adapterai ensuite cette base à ma situation.
 
J'ai trouvé deux liens assez intéressants:  


N'hésitez pas si vous avez d'autres recommandations !

Reply

Marsh Posté le 14-01-2018 à 22:39:04    

Pour coder l'algo que je t'ai proposé (basé sur LSA / SVD), t'as pas besoin de  lib. Moi, je l'ai fait avec les fonctions de base de PHP :o
A lire :  
LSA : https://fr.wikipedia.org/wiki/Analy [...] ue_latente
ACP : https://fr.wikipedia.org/wiki/Analy [...] %A9lations
SVD : https://fr.wikipedia.org/wiki/D%C3% [...] naturelles
 
Je t'ai mis les ancres pour les parties les plus utiles, mais lis les articles en entier. Y'a quand même quelques concepts mathématiques à saisir. Mais si tu laisses de côté la SVD (calcul des valeurs propres / vecteurs propres), t'as qu'une bête matrice (en lignes, tes articles, en colonne, tes utilisateurs) qui compte pour chaque utilisateur le nb de chaque article qu'il possède (a priori, 0 ou 1 pour chaque article), puis tu va recentrer la matrice sur son centre de gravité, puis tu vas faire le tf-idf de cette matrice et enfin, calculer la matrice des covariances. En gros, t'as que les 4 opérations (+-/*) un peu de log10 pour le tf-idf, un calcul de transposée de matrice et un produit matriciel. Ca va, ça reste accessible, non ?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed