REX 2011 @PilotSystems&Libération / rook.rst

Rook

Rook est une application web qui complete l'experience utilisateurs de twitter. Notamment à l'aide de mini-application qui rendent accessible des fonctions de twitter autrement difficille d'accès. Il s'agit d'une application developpé par Pilot Systems sur laquelle je suis intervenu en tant que consultant fonctionnel et technique. Je devais penser à de nouvelles fonctionnalité et proposer des moyens de les implementer.

La proposition est de reproduire le mur personnalisé de facebook et regrouper les tweets par thème comme le fait Google News.

La premiere étape a été de dressé un état de l'art dans le domaine de la recommandation de contenu. Je me suis rendu compte que le domaine de recherche à l'origine de ce type d'algorithme provenait le plus souvent de l'intelligence artificiel et plus particulierement le domaine des machines apprenantes ou algorithme d'aide à la decision. J'ai continuer mes lectures dans ce domaine. Les machines apprenantes utilisent différentes types d'algorithmes parfois basés sur des statistiques parfois sur des mathématiques discrêtes. Il y a une partie des algorithmes qui utilisent de l'information sémantique tiré d'un traitement automatique de la langue. La categorisation est aussi un problème qui peut-être resolu à l'aide d'une machine apprenante.

A partir de ses connaissances j'ai developpé un programme cible qui doit permettre d'implementer la recommandation de contenu en minimisant l'effet de demarrage à froid dans le cadre d'une implementation dans Rook. Ce sous projet est nommé noosphere je le presente dans les parties suivantes.

Ce chapitre est partagé en trois parties, dans un premier temps je decrit la base de connaissance et son support, ensuite les différentes methodes qui permettrait de faire de la recommandation sur cette base de donnée, pour finir par un bilan sur le travail fait.

Base de connaissances

Connaissances

Les messages sur twitter ne font que 140 caractère, difficille dans ce cas de realiser une analyse semantique ou même statistique à l'aide d'un algorithme tel que LDA [1].

Un système apprenant a besoin d'information, certains algorithme fonctionnent mieux avec un grand nombre de donnée [2] et les algorithmes pour résoudre des problèmes avec de très nombreuses données existent [3].

Nous desirons donc maximiser la quantité d'information que nous capturons de l'environnement social twitter de l'utilisateur ainsi que de son intéraction avec l'application.

En entrée du systeme, nous avons l'environnement social, les tweets (ainsi que les hashtag) et toutes les intéractions avec les tweet:

  • personnes suivits
  • personnes suivants
  • tweet dont hashtags
  • retweet(s) et les personne(s) qui retweete(nt)
  • réponse(s) et les personne(s) qui reponde(nt)
  • lu ou non
  • heure du tweet
  • mise en favoris

Ceci ne résoud pas le problème de l'analyse sémantique des tweets. En effet avoir un grand nombre de donnée est une chose pouvoir les corellers en est une autre. Pour nous aider dans se travail nous allons augmenter notre base de connaissance issue du web certaines ressources facilement exploitable tel que wikipedia à travers dbpedia autres ressources categoriser par de dmoz ou Yahoo. L'idée est de permettre d'enrichir le tweet avec des documents que l'on sait similaires à l'aide d'une recherche full-text [5].

Les données que nous allons devoir recuillir sont de natures différentes, elles necessiteront un grand nombre de table et de connexion, d'autre part en tant que projet de recherche il est agreable de savoir que l'ajout d'attribut et de nouvelle connexion est facile.

Bases

J'ai établit la matrice de comparaison des bases MySQL, PostgreSQL, Neo4j, OrientDB et MongoDB.

OrientDB remplit le plus de conditions à priori car je n'ai pas reussit à determiner le niveau ACID de Neo4j.

  MySQL, PostgreSQL Neo4j OrientDB MongoDB
Tuning et maintenance documenté oui      
Schema-less   oui oui oui
Nouvelles connexions facile à créer   oui oui  
ACID oui X oui
au niveau
document
License GPL AGPLv3 Apache AGPLv3

Système intelligent

Notre besoin est de regrouper par categorie les articles et de donner une note aux tweet entrant d'un utilisateur. C'est deux problèmes distincts mais qui peuvent se recouper dans le cardre de la mise en place d'un système apprenant.

Categorisation

Il existe different méthode pour faire de la catégorisation.

On peut utiliser des informations semantiques presentent des sites par regroupement thématique. Par exemple un blog qui a un lien depuis bitbucket a de forte chance d'être un blog technique. De plus un compte twitter qui est lié depuis un blog qui est lié depuis bitbucket a te forte chance d'avoir un contenu technique. De cette façon nous pouvons construire un système qui permettent de determiner une ou des categories pour chaque site en implementant un algorithme logique ou en utilisant une machine apprenante supervisé.

Une machine apprenante supvervisé est un algorithme apprenant qui prend en entrée un document et des catégories. Elle associe les documents aux catégories et permet de generer des descripteurs pour des documents nouveaux.

Une méthode non-supervisé peut être utilisé de deux façons d'une part sur les tweets étendu à l'aide de [5] ou alors en prenant comme document l'ensemble des poids sur les arretes qui lit un noeud au reste du graphe.

Le default des deux méthodes précédentes et qu'il est difficille de comprendre pourquoi ce resultat a été donnée.

Couplé à la méthode décrite dans [5] et en utilisant [6] il est possible d'implementer un algorithme de type PageRank [7] qui génére des catégories comme réponse. Cette algorithme à le benefice de pouvoir être d'expliquer.

Mur personnalisé

L'implentation du mur personnalisé peut se faire à l'aide des mêmes methodes que celle utilisé précédemment.

Le point qui a retenu mon attention est celui de l'implementation de la machine apprenante qui resoudrai ce problème. Un très grand nombre de données peuvent être soumis à l'algorithme rendant son calcul non praticable, c'est la malédiction dimentionnelle. L'optimisation présentit est la génération d'un graphe de descripteurs pour chaque documents déjà present dans la base à l'aide du resultat de la catégorisation. Un document pour cette machine apprenante est le vecteur des contributions de chaque categories à un tweet. On peut reduire la dimension de l'espace de projection en fonction des ressources.

Bilan

TODO

Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.