Projet utilisant Google pour apprendre un espace de représentation

Les termes associés à des concepts qui co-occurrent souvent dans les documents sur le web ont une plus grande probabilité d'être similaires dans un certain sens. Par exemple des noms de groupes de musique qui se retrouvent sur la même page web ont plus de chance d'être de groupes ayant un style musical similaire. Il faut aussi tenir compte de la fréquence absolue d'occurence des termes individuels. Par exemple 'Beatles' risque de se retrouver dans beaucoup plus de pages que 'Erik Satie'. Proprement normalisés, ces fréquences de co-occurence nous donnent donc de l'information sur la similarité entre concepts.

L'objectif de ce projet est de colliger une base de fréquences d'occurence et de co-occurence pour un certain nombres de concepts faisant partie d'un domaine proche (comme les noms de groupes de musique), pour ensuite développer une représentation continue qui associe à chaque concept un vecteur, de sorte que les concepts similaires se retrouvent avec des vecteurs voisins en distance euclidienne. L'évaluation des résultats de ce projet sera qualitative, par la présentation de projections de ces concepts sur le plan 2-d ou en 3-d, pour vérifier si nos intuitions sur la similarité entre ces concepts sont cohérentes avec ce qui a été appris.

Nous proposons d'utiliser la formule suivante pour former un score de similarité: log(#(AB))-log(#(A))-log(#(B)),

ou #(A) est la fréquence d'occurence (nombre de hits) de A dans Google, et #(AB) la fréquence d'occurence des termes de A et de B dans la même requête.

Le défi ici c'est qu'on ne pourra pas colliger des co-occurences pour toutes les paires, mais on veut pouvoir généraliser la notion de similarité à des paires pour laquelle on a pas l'information empirique, et on voudrait aussi pouvoir découvrir une représentation en faible dimension de ces concepts (c'est la dimension des vecteurs discutés ci-haut), soit pour simplement visualiser ou éventuellement comme intrant pour un autre apprentissage.

Google fournit une API qui permet de faire des requêtes, mais elle permet seulement 500 requêtes par jour, ce qui limitera grandement la taille de l'ensemble d'apprentissage. Il est conseillé de s'y prendre le plus tôt possible pour ce projet, et d'obtenir plusieurs licenses de l'API...

Plusieurs algorithmes d'apprentissage sont possible pour faire la réduction de dimensionalité. Nous suggérons les suivants:

MDS est très simple à implanter et devrait toujours être utilisé, comme point de comparaison.

Références

@Article{Tenenbaum2000-isomap,

author = {J. Tenenbaum and V. {de Silva} and J.C.L. Langford},

title = {A Global Geometric Framework for Nonlinear Dimensionality Reduction},

journal = {Science},

year = {2000},

volume = {290},

number = {5500},

pages = {2319--2323},

month = {Dec.},

}

@article{Bengio-eigen-NC2004,

author = {Y. Bengio and O. Delalleau and N. {Le Roux} and J.-F. Paiement and P. Vincent and M. Ouimet},

title = {Learning eigenfunctions links spectral embedding and kernel {PCA}},

journal = {Neural Computation},

volume = {16},

number = 10,

pages = {2197--2219},

year = 2004,

}

@article{Bengio-nnlm2003,

author = {Yoshua Bengio and R\'ejean Ducharme and Pascal Vincent and Christian Jauvin},

title = {A Neural Probabilistic Language Model},

journal = {Journal of Machine Learning Research},

volume = 3,

pages = {1137--1155},

year = 2003,

}