Carla Guerrini 1 Page Rank e catene di Markov Una delle ragioni

Transcript

Carla Guerrini 1 Page Rank e catene di Markov Una delle ragioni
Carla Guerrini
1
Page Rank e catene di Markov
Una delle ragioni per cui Google é uno strumento cosı́ efficace nella ricerca risiede
nell’algoritmo sviluppato dai fondatori. Il termine Google deriva da ’googol’ termine che
indica 10100 , l’idea di google é stata introdotta nel 1995 da due studenti di informatica
dell’universitá di Stanford, Sergey Brin e Larry Page quando erano graduated student. Il
PageRank é interamente individuato dalla struttura del link del World Wide Web, tale
struttura nel 2005 veniva ricalcolata una volta al mese. Il page Rank non coinvolge alcun
contenuto delle singole pagine o il contenuto delle richieste (queries); per ogni particolare
query, Google trova le pagine sul Web che contengono quella query e fornisce una lista di
queste pagine nell’ordine del loro PageRank.
Immaginate di praticare il surf nel Web viaggiando da pagina a pagina scegliendo casualmente un link in uscita da una pagina per andare in un’altra. Ció potrebbe portare a
delle limitazioni per le pagine prive di link in uscita, o circolare con click di pagine interconnesse. In una certa frazione di tempo si sceglie semplicemente una pagina nel Web. Questo
cammino casuale teorico é conosciuto come catena di Markov o processo di Markov
La probabilitá restrittiva che un viaggiatore casuale infinitamente dedicato visiti una
qualsiasi pagina particolare é il suo PageRank. Una pagina ha un alto Rank se altre pagine
con Rank alto puntano ad essa. Sia W l’insieme delle pagine Web che possono essere
raggiunte seguendo una catena di hyperlinks a partire da qualche pagina root e sia n il
numero di pagine in W. Per Google attualmente l’insime W varia nel tempo (alla fine del
2002 n era maggiore di 3 miliardi). Sia G la matrice n×n di connettivitá di una porzione del
Web, cioé gi,j = 1 se c’e’ un hyperlink a pagina i da pagina j e zero altrimenti. La matrice
G puo’ essere enorme, ma molto sparsa. La sua j − esima colonna mostra i links presenti
nella j − esima pagina. il numero degli elementi diversi da zero in G é il numero totale di
Hyperlinks in W di una porzione del Web. Siano rj e cj le somme di riga e colonna di G:
X
X
ri =
gi,j , cj =
gi,j ,
j
i
le quantitá ri e cj formano l’in − degree e out − degree della j-esima pagina. Sia p la
probabilitá che il cammino casuale segua un link. Un valore tipico é p = 0.85. Allora 1 − p
é la probabilitá che una pagina arbitraria sia scelta. Sia A la matrice n × n i cui elementi
sono:
aij = pgij /cj + δ, dove δ = (1 − p)/n.
Si noti come la matrice A provenga dalla matrice di connettivitá scalata dalle sue sommecolonna. La j − esima colonna é la probailitá di saltare dalla j − esima pagina alle altre
pagine sul Web. La maggior parte degli elementi di A sono uguali a δ, cioé la probailitá
di saltare da una pagina all’altra senza seguire un link. Se n = 3 · 109 e p = 0.85, allora
δ = 5 · 10−11 .
La matrice A é la matrice di probabilitá di transizione della catena di Markov. I suoi elementi sono strettamente compresi tra zero e uno, e le sue somme-colonna sono uguali a 1. Un
risultato importante nella teoria matriciale é conosciuto come teorema di Perron-Frobenius
applicato a tale matrice. Esso conclude che una soluzione diversa da zero dell’equazione
x = Ax
esiste ed é unica a meno di un fattore di scala. Se il fattore di scala é scelto in modo che
X
xi = 1
i
allora x é il vettore di stato della catena di Markov ed é il Google Page Rank. Gli elementi
di x sono tutti positivi e minori di uno. Il vettore x é soluzione del sistema lineare omogeneo
e singolare:
(I − A)x = 0
Per valori modesti di n , un modo facile per calcolare x in Matlab é di iniziare con una
soluzione approssimata quale ad esempio il PageRank del mese precedente oppure di scegliere
x = ones(n, 1)/n
2011/03/29
2
e poi semplicemente si ripete l’istruzione di assegnamento x = Ax fino a quando i vettori
successivi non coincidano a meno di una certa tolleranza cioé si applica il metodo delle potenze
ed é in pratica l’unica possibiltá per valori molto grandi di n. Nella pratica le matrici A e G
non vengono mai costruite . Un passo del metodo delle potenze dovrebbe essere fatto da un
passo su un database delle pagine Web, aggiornando il numero di riferimenti pesati generati
dagli hyperlinks tra le pagine.
Il modo migliore di calcolare PageRank in Matlab é considerare la particolare struttura
della matrice di Markov. L’equazione
x = Ax risulta
x = (pGD + δeeT )x
ove e é il vettore a n componenti tutte uguali a 1 e D é la matrice diagonale formata dai
reciproci degli out − degree:
1
djj = .
cj
Vogliamo che eT x = 1 allora l’equazione diventa:
(I − pGD)x = δe
Poiché p é strettamente minore di uno, la matrice dei coefficienti I − pGD é non singolare
e queste equazioni possono essere risolte in x. Questo approccio preserva la sparsitá di G
ma fallisce quando p → 1 e δ → 0. Una volta generata la matrice, occorre scalarla con le
sue somme-colonna c = sum(G), si puó quindi far uso della fuction spdiags per creare una
matrice diagonale sparsa:
D = spdiags(1./c0 , 0, n, n)
cosı́ il prodotto matriciale G ∗ D sará calcolato in modo efficiente. Le istruzioni:
p = 0.85
delta = (1-p)/n
e = ones(n,1)
D=spdiags(1./c’,0,n,n)
I=speye(n,n)
x = (I-p*G*D)\(delta*e)
calcolano il PageRank risolvendo il sistema lineare sparso con l’eliminazione di Gauss.
E’ possibile usare anche un algoritmo chiamato iterazione inversa
A = p*G*D + delta
x = (I-A)\e
x = x/sum(x)
Ad una prima occhiata potrebbe sembrare un’idea pericolosa poiché (I − A) é in linea
teorica singolare, ma con gli errori di arrotondamento la matrice calcolata probabilmente non
é singolare. Anche se la matrice é singolare gli errori di arrotondamento che intervengono
nell’eliminazione di Gauss fanno si che gli elementi diagonali difficilmente risultino zeri esatti.
Sappiamo che l’eliminazione di Gauss con pivoting per colonne spesso produce una soluzione
con un residuo piccolo rispetto alla soluzione calcolata, anche se la matrice risulta mal
condizionata. Il vettore ottenuto con l’operazione
(I-A)\e
generalmente ha componenti grandi. Se viene riscalato con la somma, il residuo risulta
scalato del medesimo fattore e diventa molto piccolo. Di conseguenza, i due vettori x e Ax
per lo piú sono uguali a meno dell’errore di arrotondamento.
La figura mostra un esempio di grafo molto piccolo con n = 6 invece che n = 3 · 109 .
Le pagine sul Web sono identificate da stringhe conosciute come uniform resource locators
2011/03/29
3
delta
alpha
beta
gamma
sigma
rho
o URLs. La maggiorparte degli URLs iniziano con http poiché usano hypertext transfer
protocol. In Matlab possiamo memorizzare l’URLs come un array di stringhe in un cell
array.
L’esempio mostrato in figura coinvolge 6 × 1 cell-array
U = {’http://www.alpha.com’
’http://www.beta.com’
’http://www.gamma.com’
’http://www.delta.com’
’http://www.rho.com’
’http://www.sigma.com’}
Nei cell-array sono possibili due tipi di indirizzamento: le parentesi tonde indicano subarray,
incluse celle individuali e le parentesi graffe indicano i contenuti delle celle. Se k é uno
scalare , allora U (k) é un cell-array costituito dalla k − esima cella in U , mentre U {k}
indica il contenuto della k-esima cella. Quindi U {1} é la stringa ’http://www.alpha.com’.
Se pensate a una cassetta della posta con indirizzi su una strada di cittá allora B(502) é la
box al numero 502, mentre B{502} é la mail contenuta in quella box. Possiamo generare la
matrice di connettivitá specificando la coppia di indici (i, j) di elementi non zero. Poiché c’é
un link a beta.com da alpha.com l’elemento (2, 1) di G é non zero, procedendo allo stesso
modo con le altre connessioni possiamo individuare due vettori i e j da:
i = [2 3 4 4 5 6 1 6 1]
j = [1 2 2 3 3 3 4 5 6]
Una matrice sparsa é meorizzata in una struttura dati che richiede memoria solo per
elementi diversi da zero e per i loro indici. In questo caso la nostra matrice 6 × 6 ha 27
zeri e solo 9 elementi diversi da zero. L’uso di questa struttura dati diventa importante per
problemi grandi. L’istruzione
n = 6
G = sparse(i,j,1,n,n)
full(G)
genera una rappresentazione sparsa di una matrice n×n con uno nelle posizioni specificate
2011/03/29
4
dai vettori i e j e mostra la rappresentazione piena:
0
1
0
0
0
0
0
0
1
1
0
0
0
0
0
1
1
1
1
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
Poi occorre calcolare la matrice diagonale D
c = full(sum(G))
D = spdiags(1./c’,0,n,n)
x = (I -p*G*D)\(delta*e)
x=x/sum(x)
x =
0.2675
0.2524
0.1323
0.1697
0.0625
0.1156
Per questo esempio molto piccolo il piú piccolo elemento della matrice di transizione di
Markov é δ = .15/6 = 0.0250
A=p*G*D+delta
A =
0.0250
0.8750
0.0250
0.0250
0.0250
0.0250
0.0250
0.0250
0.4500
0.4500
0.0250
0.0250
0.0250
0.0250
0.0250
0.3083
0.3083
0.3083
0.8750
0.0250
0.0250
0.0250
0.0250
0.0250
0.0250
0.0250
0.0250
0.0250
0.0250
0.8750
0.8750
0.0250
0.0250
0.0250
0.0250
0.0250
Si noti che le somme delle colonne di A sono uguali a 1. Il calcolo del PageRank con
iterazione inversa
x=(I-A)\e Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 4.606395e-017.
x =
1.0e+016 *
-1.7870
-1.6859
-0.8835
-1.1338
-0.4173
-0.7720
% gli elementi sono dell’ordine di 10^(16), sono inoltre negativi
% comunque riscalando la soluzione
s=sum(x)
s =
-6.6797e+016
>> x=x/sum(x)
x =
0.2675
0.2524
2011/03/29
5
Page Rank
0.35
0.3
0.25
0.2
0.15
0.1
0.05
0
1
2
3
4
5
6
0.1323
0.1697
0.0625
0.1156
Il grafico a barre mostra che Se ordiniamo gli URLs nell’ordine del PageRank otteniamo la
seguente tabella
1
2
4
3
6
5
page-rank
0.2675
0.2524
0.1697
0.1323
0.1156
0.0625
in
2
1
2
1
2
1
out
1
2
1
3
1
1
url
http://www.alpha.com
http://www.beta.com
http://www.delta.com
http://www.gamma.com
http://www.sigma.com
http://www.rho.com
Vediamo che alpha ha il pagerank piú alto di delta o sigma benché abbiano il medesimo
numero di link e che beta é seconda poiché gode della gloria di alpha. Un viaggiatore casuale
visiterá alpha circa un 27% del tempo e rho appena il 6%.
Nella libreria di Matlab troverete la function surfer.m. Una istruzione del tipo
[U,G] = surfer(’http://www.xxx.zzz’,n)
permette a partire dallo specificato URL di viaggiare nel Web sino a quando n pagine
vengono visitate. Se conclude con successo restituisce un cell-array n × 1 degli URL e una
matrice n × n di connettivitá sparsa. La function usa urlread che utilizza Java per accedere
al Web. Navigando nel Web in modo automatico generalmente é una impresa pericolosa
e questa funzione deve essere usata con attenzione. Alcuni URL possono contenere errori
tipografici o caratteri illegali. Esiste una lista di URL da evitare che include i file .gif,
surfer potrebbe impantanarsi cercando di leggere una pagina da un sito che in apparenza
risponde, ma che non ha mai fornito l’intera pagina, quando ció accade occorre far terminare
il processo senza pietá e uscire da Matlab. Tenendo ben presente questo potete usare surfer
per generare i vostri esempi PageRank.