Tag :Mahout

Retour sur le Hands On autour de Apache Mahout

Ma toute première marmite.

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 ne 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 sont ouvertes à tout le monde et c’est tant mieux.

Donc je m’installe au premier rang, pour prendre une des dernières places restantes et 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é ? Il faut dire que je suis un peu venue les mains dans les poches, sans même préparer le sujet !) :

  • installer Play! Framework
  • 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.

Michaë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 :

  • sur Amazon, les recommandations des articles achetés par d’autres utilisateurs “similaires” (par un algorithme de Recommandation),
  • les filtres de mails capables d’identifier les spams en entrée grâce à une classification déjà existante (algorithme de classification automatique des documents),
  • ou encore Google News regroupant les news similaires et attribution de tags (algorithme 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, j’ai 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 (Enterprise Content Management).)

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 recettes 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 obligent, 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 ne 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.

Quelle soirée sympa et intéressante.

J’ai hâte d’être à la prochaine marmite avec les Duchess. Hé les filles, vous venez la prochaine fois ?

http://mahout.apache.org/

 

Hands-on Apache Mahout

Apache Mahout est à l’honneur au mois de novembre chez les Duchess ! Et comme on aime le code, le vrai, c’est naturellement lors d’une soirée main dans le code que nous vous invitons pour tester un peu cette librairie dont on entend de plus en plus parler le mardi 22 novembre avec Michael Figuière et Jean-Baptiste Lemée !

Les utilisations de Mahout sont diverses :

  • Recommander des amis, des produits,
  • Classifier du contenu en fonction de groupe prédéfini,
  • Trouver du contenu similaire basé sur des propriétés,
  • Trouver des associations dans des comportements,
  • Identifier les mots clés dans de large collection de texte,
  • Détecter des anomalies sur des output,
  • Classifier les recherches de résultats par exemple en fonction du profil,
  • Filtrer le spam,

Pour tous ses concepts, Apache Mahout met à notre disposition plusieurs algorithmes, facilitant leur intégration dans nos applications et se veut donc ‘ready-to-use’.

Après une brève présentation de Mahout, vous attaquerez votre propre système de recommandation lors de ce hands-on. Faisant parti de l’écosystème Mahout, Taste est un moteur rapide de filtrage collaboratif pour Java. Il permet par exemple de recommander à un client les livres qu’il pourrait aimer en fonction de son panier ou des dernières pages visitées. Vous apprendrez à construire un outil de recommandation basé sur Taste/Mahout et à le customiser.

Michaël Figuiere est consultant chez Xebia où il intervient notamment sur des sites Web à fort trafic. A son aise tant avec les environnements JEE qu’avec les technologies de plus bas niveau, il est spécialisé dans les architectures distribuées et les technologies innovantes telles que NoSQL, les moteurs de recherche, ou encore le data mining.

Jean-Baptiste Lemée est un consultant chez Lateral Thoughts spécialisé dans les technologies Java/JEE et innovantes (NoSQL , Mahout  …). Il est passionné par la création de logiciels dans leur globalité : organisation des équipes, méthodes de développement et usabilité du produit.

 

Venez nous rejoindre le mardi 22 novembre de 19h30 à 22h00 avec de préférence de quoi coder dans les locaux de So@t . La soirée sera suivi d’une 3eme mi-temps.

Et pour vous inscrire à partir du mardi 15 novembre 14h c’est par ici : http://mahout.eventbrite.com/

 

Mon Devoxx par Claude

Après un article commun pour éviter des redites sur les Wouah ! et les sessions auxquelles on a toutes assisté, un point de vue plus personnel.

Devoxx 2010, 5 jours hors du temps avec un programme très chargé et beaucoup de discussions que l’on mettra du temps à vraiment intégrer. Voici donc une première synthèse des choses que j’ai retenues une fois passées au crible de mon filtre personnel.

C’est une conférence Java, donc il fallait des annonces officielles d’Oracle. Peu de surprises sur Java EE 6 déjà présenté plusieurs fois. Peu de surprise sur Java SE 7. Les fonctions les plus attendues comme le projet Lambda (langage fonctionnel) ou le projet Jigsaw (modularité et gestion des dépendances) sont reportés à Java SE 8. Un discours rassurant d’Oracle. La vie reprend son cours. Les brouilles avec Apache trouvent une solution.  Pas de révolution mais un souci de simplification.
Dans le thème NoSql, beaucoup de produits avaient fait le déplacement (HBase, Cassandra, MongoDB, Infinitest). Des retours d’expérience aussi des grands sites qui en sont à l’origine ou les utilisent. J’ai déjà pas mal vu de présentations de produits dans le User Group NoSql et lors de la soirée NoSql du JUG. Les présentations que j’ai retenues sont sur des aspects plus fondamentaux.
elephant_hadoopTout d’abord Hadoop Fundamentals. La première que j’ai vu donc j’avais encore l’esprit assez clair. Le speaker n’était pas très bon, mais Hadoop c’est une plongée dans un monde à part quand on est habitué à Java EE. Un lien avec Java ? Et bien oui, HDFS et Hadoop sont écrits en Java.
Hadoop c’est tout d’abord HDFS, un File System distribué. Comment faire un immense espace de stockage sur un cluster d’espaces de stockage limités. Tout le propos d’Hadoop est de gérer des volumes éléphantesques : les stocker, retrouver les informations, transformer ces informations. Hadoop c’est ensuite un ensemble de modules pour réaliser efficacement des traitements sur de très gros volumes de données distribuées. Compte tenu des volumes, le point le plus important est d’éviter autant que possible de déplacer des données. L’idée est d’utiliser un procédé que les langages fonctionnels ont beaucoup mis en avant : le MapReduce. Pour manipuler l’ensemble de données, on va écrire deux fonctions :

  • une fonction qui réalise l’opération de Map et sera appliquée aux données localement. Elle applique des transformations ou des filtres isolément sur chaque enregistrement traité et renvoie une autre valeur en 1 pour 1.
  • une fonction qui réalise le Reduce sur le résultat des fonctions Map de chaque noeud de données. Cette opération agrège les résultats provenant des différents flux et réalise en général un comptage, un calcul statistique ou une classification.

Hadoop est aussi à la base de plusieurs bases de données NoSql comme HBase et Cassandra. Il y assure la couche de stockage. D’autres projets, liés à la manipulation de données à la SQL voient également le jour comme Hive et Pig qui ont été présentés également lors de cette session.

elephant_mahout Une autre session Intelligent Data Analysis – Apache Mahout a permis d’avoir un exemple d’application de Hadoop. Mahout est un outil d’apprentissage automatique et d’analyse de données. C’est le type d’outil qui est utilisé pour faire de la catégorisation de textes dans les moteurs de recherche par exemple ou pour les systèmes de recommandation des sites sociaux ou de commerce.

A noter ce projet Apache est co-dirigé par une femme, Isabel Drost.  Ainsi Devoxx a compté 2 speakers femme cette année, Isabel Drost pour Mahout et Linda DeMichiel pour Hibernate/JPA. Une présentation agréable, mais très difficile pour les gens qui n’ont pas de background statistique. J’y reviendrai plus en détail un de ces jours.

ehcache Une autre présentation intéressante The essence of caching sur un thème voisin de NoSql. Des constats sur nos problèmes de performance et des explications sur le fonctionnement du cache distribué Ehcache. Ehcache est un projet OpenSource que l’on retrouve en cache de second niveau dans Hibernate par exemple; C’est aussi une distribution commerciale Enterprise Ehcache réalisée par Terracotta.
Le speaker insiste sur l’importance de nos jours de pouvoir monter en puissance (scalabilité) plutôt que d’avoir des performances pures, car la charge varie beaucoup dans la journée (la courbe de l’éléphant, et oui on aime beaucoup les éléphants à Devoxx ;-) ) et au cours du temps. Le cache n’est pas la solution universelle. Il importe de savoir d’abord où se trouve le goulet d’étranglement et le cache est une solution possible pour masquer une opération nécessairement longue et qui sera répétée (rendering, recherche ou manipulation de données).

Le cache a des inconvénients de consommation de mémoire et de cohérence avec les données persistantes (le SOR, system of Record). Autre problème lié aux fréquences d’accès de chaque donnée. L’accès aux données de référence suit généralement une distribution de Pareto et certaines données de référence (les codes des grands pays par exemple) sont  utiles en cache alors que d’autres ne sont quasiment jamais redemandées. Le cache ne sert à rien si le taux de hit dans le cache est faible.

Pour ces raisons il faut souvent gérer plusieurs niveaux de cache plus ou moins efficaces, les plus rapide étant les plus limités en taille et vice versa. La localité, c’est à dire la proximité des données avec le programme qui les utilise joue aussi un grand rôle et les caches distribués sont utiles en permettant des disposer des données au plus près de l’endroit où elles seront utilisées.

androidBien sûr de l’Android cette année. Une très belle présentation de Romain Guy et Chet Haas Dive into Android.

De temps en temps, Devoxx c’est un peu comme chez le glacier. Trop de parfums et on ne sait plus choisir entre ceux qu’on aime bien et les inconnus qui ont l’air bien tentants aussi. Ce jour là j’hésitais entre 3 salles et je n’avais pas de critère bien défini à ce moment là. Après avoir vu des tas de présentations de niveau bien inégal, j’ai adopté le critère des vieux routards de Devoxx : il vaut mieux une présentation d’un bon speaker sur un sujet auquel on s’intéresse moyennement, qu’une mauvaise présentation sur un sujet auquel on s’intéresse … parce qu’on arrive pas au bout. Au pire dans le premier cas on aura passé un bon moment.

En l’occurrence je suis rentrée avec une vague connaissance du développement Android et la ferme certitude que développer des IHM ne m’intéresse pas, et après 3h à voir développer des superbes IHM Android j’en suis ressorti en cherchant une idée pour faire une application Android. C’est ça une présentation réussie. Une présentation qui donne envie d’aller plus loin, d’explorer le produit, qui nous a fait toucher du doigt l’environnement de développement et fait croire qu’on pouvait nous aussi faire une application Android en moins d’une heure, et nous fait rêver à chercher des idées d’applications.

Il y a eu quelques présentation très réussies, mais peu finalement. Beaucoup de speakers veulent faire passer trop de messages et on ressort sans arriver à faire le point. Beaucoup veulent nous donner trop de détails, nous passent en revue toute l’API slide après slide, verbe après verbe.  A l’heure d’Internet, on peut trouver ces informations en quelques clics, lorsque l’on en aura besoin et on pourra les lire confortablement sur son écran. Ce qui importe est de savoir que ça existe, à quoi ça sert, comment on démarre si on n’a jamais utilisé l’outil et les principes de fonctionnement. Lorsque l’on est intéressé pouvoir poser des questions aussi, ce qui est quand même la différence essentielle avec la lecture d’un article sur Internet. Alors le reste du temps, on s’accroche parce que le contenu est là et qu’on s’intéresse au sujet. Mais c’est un peu pénible.

Bon et la présentation Dive into Android ? On a appris à faire un layout custom avec du code en live, les explications sur les  layouts et l’utilisation des contrôles graphique ont été distillées au fur et à mesure, on a appris à faire un reflet en illustration de quelques fonctions de dessin. Un ping pong sympa entre les speakers, du code en live, un bon moment et des leçons retenues.

android

Pour finir une mention spéciale pour From Dev/Ops to DevOps. Amazing the difference one character can make.

DevOps est un mouvement émergeant qui vise à rapprocher les équipes de développement et les opérations (la production en français) pour mieux résoudre les problèmes de déploiement et de suivi de production. Le sujet avait aussi été abordé au CITCON en relation avec le Continuous Deployment (aussi présent à Devoxx mais on doit faire des choix vu le nombre de sujets et je ne l’ai pas vue). Une présentation à base de vampires et loup-garous assez amusante pour faire passer l’idée.

La communauté DevOps s’organise en France. Une première réunion a eu lieu à Lille la semaine dernière. La première réunion DevOps Paris aura lieu mercredi 1er décembre. Si cette initiative vous intéresse vous pouvez rejoindre le groupe devopsfr ou consulter devops.fr (site très minimaliste pour le moment). On en reparlera !

Voilà, mon tour d’horizon. J’ai vu des tas d’autres choses en 5 jours et que je ceux que n’ai pas cité me pardonnent ;-)

En continuant à utiliser le site, vous acceptez l’utilisation des cookies. Plus d’informations

Les paramètres des cookies sur ce site sont définis sur « accepter les cookies » pour vous offrir la meilleure expérience de navigation possible. Si vous continuez à utiliser ce site sans changer vos paramètres de cookies ou si vous cliquez sur "Accepter" ci-dessous, vous consentez à cela.

Fermer