15 janvier 2012

Apache Mahout : du machine learning pour développer des applications intelligentes

Premier article, première soirée avec les Duchess, premiers pas avec Apache Mahout ...

Les Duchess , c'est un JUG créé par des filles codeuses. Pleins d’événements, soirées pour échanger, apprendre, se tenir informer.
Apache Mahout est une librairie java openSource implémentant des algorithmes de machine learning.


Je reprends ici mon retour d'expérience publié sur le site des Duchess: http://jduchess.org/duchess-france/




Ma toute première marmite : Retour sur le Hands On autour de Apache Mahout.
J’avais prévenu tout le monde pour ma première, mari et collègues : ce soir, c’est soirée entre filles. On code.
Je vous raconte pas la surprise en trouvant au 8ème étage des locaux de So@t, une salle remplie de garçons.
“- Euh, les Duchess, c’est bien là ?”  
Oui, c’était bien là.23 garçons et 4 filles - quand même - tous réunis pour découvrir Apache Mahout (dire maoute), une librairie Open Source Java. Parce que les soirées code des Duchess, c’est ouvert à tout le monde et c’est très bien.  
Donc je m’installe au premier rang, pour prendre une des dernières places restanteset refais avec celui qui sera mon binôme de la soirée l’inventaire des tâches préparatoires (Inquiétude soudaine, n’ai-je rien oublié ? Faut dire que je suis un peu venue les mains dans les poches, sans meme préparer le sujet !)  
- juste Installer Play! Framework  et télécharger Git. 
Ouf, c’était bon, très facile d’ailleurs.
La soirée commence. Le principe : une présentation avant de passer au concret avec un petit exercice de codage à réaliser.
Mickaël Figuière et Jean-Baptiste Lemée nous font découvrir la librairie Apache Mahout.  
Quelle chance ! Je suis tombée sur un sujet passionnant : le Machine Learning. Pour rappel, ce sous-domaine de l’ Intelligence Artificielle,  étudie les machines capables “d’apprendre”, c’est-à-dire qui adaptent leur comportement en fonction des données reçues.  
La librairie Apache Mahout est donc un ensemble d’implémentations d’algorithmes permettant de rajouter des fonctionnalités intelligentes aux applications à partir des données issues du comportement des utilisateurs.  On rencontre déjà sur le web des applications utilisant des algorithmes de Machine Learning :
  • C’est Amazon qui recommande à un utilisateur des articles achetés par d’autres utilisateurs “similaires” (algo de Recommandation), ou 
  • un filtre de mails capable d’identifier les spams en entrée grâce à une classification déjà existante (algo de Classification automatique des documents), ou encore 
  • Google News qui regroupe les news similaires et peut même leur donner un tag (algo de Clustering).
Le machine Learning est un bon complément aux moteurs de Recherche puisqu’il peut être utilisé pour améliorer l’affichage des résultats d’une recherche utilisateur. (Tiens ça, déjà entendu parler dans un sujet connexe, le Web Sémantique, par Nuxeo.  Cette fonctionnalité de filtre de recherche est en effet intéressante pour un ECM.)  
Bref, Apache Mahout, propose justement de mettre en oeuvre ce type de fonctionnalités et ce de manière très aisée.

Alors, c’est parti pour la pratique! 
Nous devons réaliser un moteur de recherche de recettes de cuisine. Plus précisément, l’application propose des recette de cuisine proches des  goûts de l’utilisateur, si, si, ça marche !  
En quelques lignes de code (5 précisément), et un ajustement empirique du paramétrage, j’obtiens sur mon écran une suggestion de recettes (éclair au chocolat, fondant au chocolat, salade au fenouil...) rentrées dans la base par mon voisin (lui aussi aime le chocolat). Tout cela après avoir défini les recettes que j’aime...dont quelques unes  à base de chocolat.  
Alors, comment fonctionne le moteur de recommandations ? 
1) Vous spécifiez le datamodel (l’ensemble des données à prendre en compte en entrée) 
DataModel dataModel = 
2) vous définissez le type de “similarité” :  UserSimilarity userSimilarity = 
3) vous calculez le “voisinage”, un ensemble d’utilisateurs proches selon la règle de similarité définie au point 2) : UserNeighborhood userNeighborhood = 
4) Votre moteur est prêt, vous pouvez l’utiliser pour récupérer des items à recommander à l’utilisateur. 
Ici, c’est l’algorithme de Recommandation “User-based” qui a été mis en oeuvre. (Au lieu du critère des utilisateurs similaires, il est possible de retrouver les items qui ont des points en commun : c’est l’algo Item-based.). L’application ayant reconnu que j’avais des points communs avec mon binôme m’a proposé ses items. Tout un programme !  
Bien sûr, agilité et bonnes pratiques oblige, nous avons réalisé la fonctionnalité après avoir fait fonctionner le test unitaire! Vous voyez, c’était vraiment très simple et rapide, même en comptant les pauses pour déguster les sushis. (et boissons de toutes sortes, de quoi sustenter tous les amateurs de marmite à volonté. Bravo pour l’organisation. ) 
Bon, je vous cache pas, la méthode de choix des implémentations restait pifométrique à ce stade :  LogLikelihoodSimilarity et pourquoi pas TanimotoCoefficientSimilarity ? NearestNUserNeighborhood plutôt que ThresholdUserNeighborhood, etc... On peut encore s’améliorer
Voilà une soirée bien sympa et intéressante. Hâte d'être à la prochaine marmite avec les Duchess
Hé les filles, vous venez la prochaine fois ?  
http://mahout.apache.org/

Aucun commentaire:

Enregistrer un commentaire