Le principe de l`algorithme PageRank.
Transcription
Le principe de l`algorithme PageRank.
UPMC 2013-2014, P2 LM335 - Calcul numérique matriciel Projet TP - PageRank (à rendre avant le 30/04/2014) Ce travail peut être réalisé en binôme si vous le souhaitez. Vous aurez à présenter votre travail à l’oral, 10 minutes si vous êtes seul, 15 minutes par binôme. Un seul fichier Scilab (extension .sci ou .sce) doit être rendu, au plus tard le jour de la présentation. Tout fichier rendu doit être nommé NOMPrenom-Projet (par exemple: DOEJohn-PageRank.sci et si binôme DOEJohn-DUPUISJack-PageRank.sci), et doit porter en haut de page nom(s) et prénom(s) de (ou des) l’étudiant(s). Vôtre code doit être commenté. La qualité et la clarté de votre présentation entreront pour une part importante dans l’appréciation de votre travail. Google est le moteur de recherche sur le web le plus utilisé au monde. L’efficacité de ses recherches est, en partie, dû à l’utilisation d’un algorithme qui permet, à mots clefs fixés, de classer les pages web par ordre de pertinence. Cet algorithme, appelé PageRanking, a été introduit par le cofondateur de Google, Larry Page, en 1998. Nous allons voir que cette méthode nécessite le calcul des valeurs propres et vecteurs propres d’une énorme matrice. Le principe de l’algorithme PageRank. On peut considérer, pour simplifier, que le web est une collection de N ∈ N pages, avec N très grand. A titre illustratif, en juillet 2008, le web comptait un billion de pages, Google avouait n’en indexer que 40 milliards. La plupart de ces pages incluent des liens vers d’autres pages, on dit qu’elles pointent vers ces autres pages. L’idée de base utilisée pour classer les pages par ordre de pertinence consiste à considérer que plus une page est la cible de liens venant d’autres pages, c’est-à-dire plus il y a de pages qui pointent vers elle, plus elle a de chances d’être fiable et intéressante pour l’utilisateur. Il s’agit donc de quantifier cette idée, c’est-à-dire d’attribuer un score de pertinence à chaque page. Tout d’abord, pour schématiser, on se donne un ordre arbitraire de l’ensemble des pages que l’on numérote ainsi de i = 1, . . . , N . On représente alors le web sous la forme d’un graphe constitué de N points, dont certaines paires sont reliées par un “lien”. Dans ce travail, la page web i est donc représentée par le point i; et le lien de la page i vers la page j est représenté par une flèche partant du point i et pointant sur j. On peut ensuite représenter ce graphe par une matrice C de MN (R), qu’on appelle matrice d’adjacence, dont le coefficient de la i-ème ligne et j-ème colonne est donné par, 1 si la page j pointe sur la page i, Cij = (1) 0 sinon. On considère qu’une page ne peut pointer vers elle-même, d’où Cii = 0 pour i = 1, . . . , N . Pour illustrer ces premières notions, sur de petits cas où N = 10, on propose les trois exemples de graphe donnés par les Figures 1, 2 et 3. Question 1. Entrer sous Scilab les matrices d’adjacence C respectivement associées aux exemples 1, 2 et 3. 10 3 2 9 4 1 7 5 8 6 Figure 1: exemple 1 3 4 2 5 10 6 1 7 8 9 Figure 2: exemple 2 3 10 2 9 4 1 7 5 8 6 Figure 3: exemple 3 On introduit maintenant, Nj , le nombre total de liens ”sortant“ de la page j et qui est défini par, Nj = N X Ckj . k=1 On peut alors construire la matrice Q ∈ MN (R) dont le coefficient de la i-ème ligne et j-ème colonne est donné par, Cij si N > 0, j (2) Qij = N j 0 sinon. Question 2. En partant des matrices entrées à la question précédente, construire sous Scilab les matrices Q respectivement associées aux exemples 1, 2 et 3. A l’aide de Scilab, vérifier que la somme des coefficients de chaque colonne non nulle de ces trois nouvelles matrices vaut toujours 1. On peut maintenant construire le vecteur r ∈ RN , dont la i-ème composante chiffre la pertinence de la page i. Ce vecteur r vérifie, ri = N X Qij rj c’est à dire r = Qr, (3) j=1 où Q est la matrice donnée par (2). Le problème du classement des pages web se retrouve ainsi ramené à la recherche, pour une énorme matrice, d’un vecteur propre associé à sa valeur propre 1! Question 3. Vérifier en utilisant Scilab (à l’aide de spec par exemple) que les matrices Q associées aux exemples 1 et 3 admettent 1 comme valeur propre mais que ce n’est pas le cas de la matrice Q associée à l’exemple 2. Ainsi, il peut arriver que la matrice Q n’admette pas la valeur propre 1. Pour contourner ce problème, on va modifier Q notamment pour intervenir sur ses colonnes nulles. Pour ce faire on introduit la matrice P ∈ MN (R) définie par: 1 t P = Q + ed , (4) N où e ∈ RN est le vecteur unitaire, i.e. e = (1, · · · , 1)t , et d ∈ RN le vecteur dont la j-ème composante est donnée par, 1 si Nj = 0, dj = (5) 0 sinon. Question 4. En partant des matrices Q de la question 2, construire sous Scilab les matrices P respectivement associées aux exemples 1, 2 et 3. A l’aide de Scilab, vérifier que ces matrices admettent 1 comme valeur propre et donner la multiplicité. On remarque sur l’exemple 3 que la valeur propre 1 de P peut être multiple. Or pour que le problème mathématique de recherche de valeur/vecteur propre soit bien posé, il est souhaitable que 1 soit valeur propre simple. On va donc appliquer une dernière modification de la matrice et introduire, pour 0 < α < 1, le matrice Aα 1 Aα = αP + (1 − α) eet . (6) N Question 5. Construire sous Scilab les matrices Aα associées aux exemples 1, 2 et 3 pour α = 0.1 et α = 0.5. Toujours à l’aide de Scilab déterminer les modules des valeurs propres de ces matrices et classer les par ordre décroissant (on pourra utiliser la commande gsort de Scilab). Au final l’algorithme PageRanking revient à déterminer, pour 0 < α < 1, le vecteur rα ∈ RN (normalisé d’une façon où d’une autre), qui vérifie rα = Aα rα , (7) i.e. rα vecteur propre associé à la valeur propre 1 de la matrice Aα . Partie algorithmique. Cette section discute d’algorithmes pour approcher le vecteur propre rα associé à la valeur propre 1 qui satisfait 1 = ρ(Aα ), à α fixé. On rappelle ainsi succinctement la méthode de la puissance itérée : Entrée : Matrice carrée Aα Sorties : Vecteur propre rα le nombre d’itérations de la méthode Initialisation : vecteur intial r(0) ∈ (R+ )N \ 0N tel que kr(0) k1 = 1 Itérations : qα (k) (k) rα (k−1) = Aα rα (k) qα = pour k > 0 (k) kqα k1 Algorithme méthode de la puissance On a donc choisi ici de normaliser les vecteurs par la norme 1. Comme indiqué dans le polycopié de (k) (k−1) cours, Chapitre 6, un critère de convergence pour cet algorithme peut être krα − rα k inférieure à une tolérance donnée. En se référant à ce chapitre du cours, on rappelle qu’il existe une constante C > 0 telle que : krα(k) − rα k ≤ C|λN −1 |k , (8) où λN −1 est, en module, la seconde plus grande valeur propre de Aα . Question 6. Ecrire une fonction Scilab pour la méthode de la puissance décrite ci-dessus. Choisir alors entre l’une des deux valeurs de α utilisée précédemment, α = 0.1 ou α = 0.5, et appliquer cet algorithme aux exemples 1, 2 et 3. On remarque, sur nos trois exemples, que les matrices Aα sont des matrices pleines alors que la matrice initiale Q était creuse. Aussi, pour des raisons de coût, il est en pratique hors de question d’assembler cette matrice Aα . Or, en utilisant (4) et (6), on peut montrer que, si z ∈ RN , alors 1 Aα z = αQz + ( αhd, zi + (1 − α)he, zi ) e, (9) N où h . , . i désigne le produit scalaire Euclidien. Le calcul du produit matrice pleine-vecteur original s’est donc ramené à un produit matrice creuse-vecteur. Question 7. En adaptant les entrées, écrire une nouvelle fonction Scilab pour votre méthode de la puissance qui tient compte de la relation (9). Noter que pour prendre en compte le caractère ”creux“ de la matrice Q il est nécessaire d’utiliser la commande sparse de Scilab. Question 8. A l’aide de la commande timer de Scilab, comparer la vitesse de ces deux algorithmes sur les trois exemples pour le α de votre choix. Question Bonus. Pour comparer la vitesse de ces deux algorithmes de manière significative, un réseau de page web de grande taille serait mieux adapté, tel que N = 500 par exemple. Créer une matrice C (en référence à (1)) simulant un grand réseau quelconque, pour se faire vous pouvez vous aider de la commande rand de Scilab. Puis appliquer les étapes de l’algorithme PageRanking de manière à comparer les deux algorithmes sur au moins un exemple de grande taille. Référence: Ce travail est inspiré d’un enseignement en analyse numérique, niveau L3, réalisé par Raphaèle Herbin et Florence Hubert d’Aix-Marseille université.