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é.

Documents pareils