esercitazione 2 ranking di pagine web ilaria bordino ilaria bordino e debora donato corso di ricerca...
TRANSCRIPT
Esercitazione 2 Ranking di pagine Web
Ilaria BordinoIlaria Bordino e Debora DonatoIlaria BordinoIlaria Bordino e Debora DonatoIlaria BordinoIlaria Bordino e Debora Donato
Corso di Ricerca dell'informazione nel Web - A.A. 2006/2007
• Raccolta delle pagine html;
• Costruzione del webgraph;
• Transformazione dei dati in un formato adeguato;
• Ranking delle pagine del webgraph:– Con Pagerank;– Con Hits.
Passi per il ranking delle pagine
Libreria Software per l'analisi di grafi di grandi dimensioni
• È un tool sviluppato presso il Dipartimento di Informatica e Sistemistica dell' Universita’ La Sapienza.
• Disponibile gratuitamente in http://www.dis.uniroma1.it/~cosin/html_pages/COSIN-Tools.htm
• Documentazione in: http://www.dis.uniroma1.it/~cosin/publications/deliverableD13.pdf
Libreria
• Obiettivo: offre una serie di routines in grado di:– Generare grafi in base alla maggior parte dei modelli
presenti in letteratura
– Calcolare alcune delle misure statistiche proprie del grafo del Web
• Distribuzione indegree outdegree
• Pagerank, hits
• SCCs, Clique
• Bowtie
Installazione della Libreria
• Implementata in C++ versione 2.9;
• Raccomandata almeno 256 MB di RAM;
• Installazione:
– Download e unzip la libreria;
– Type “cd dis_library” (cambia directory)
– Type “make” (compila i source)
Struttura della Libreria
• Per ogni programma viene creata una cartella. Ogni cartella contiene il codice (*.h, *.cpp, *.cc).
• Makefile: compila e crea gli eseguibili dei programma;
• Common: contiene le routine comuni ai diversi algoritmi (memoria secondaria, rappresentazione binaria, etc);
• bin: contiene gli eseguibili creati durante la esecuzione di Makefile;
Struttura della Libreria
• Generators:
• Measures:
• Search algorithms:
• Bow-tie discovering:
• File converters:
• Miscellaneous:
Programmi che saranno usati per l’ esercitazione di oggi
• Della categoria “file converters”:– text2ips.script: transforma un file testo nella
rappresentazione IPS;
• Della categoria “graph measurers”:– pagerank: esegue pagerank– hits: esegue hits
Grafo in Formato Testo
Grafo esempio Formato testo
Il Formato IPS
• Per ogni grafo sono presenti 3 tipi di multifile:– .info: contiene l’indegree, l’outdegree il
puntatore alla lista dei successori (memorizzata in .succ), il puntatore alla lista dei predecessori (memorizzata in .pred)
– .succ: lista dei successori– .pred: lista dei predecessori
Grafo in Formato IPS
Multifile
• I file .ips devono essere in grado di contenere le informazioni relative a milioni di nodi e miliardi di archi.
• Limite: filesystem
• Soluzione: ogni file viene spezzato in piu’ file la cui gestione e’ completamente trasparente all’utente (multiFileWriter, multiFileReader)
Implementazione di PageRank
• Il calcolo di pagerank e’ fatto in blocchi:– I blocchi hanno misura fissa che dipende dal numero di
float allocabili in memoria principale;• numMB = memoria / (1024*1024);• numFloat = numMB/sizeof(float);• Nblocchi = numNodi/numFloat• NnodiPerBlocco = numNodi/Nblocchi
– Ogni blocco e’ caricato in memoria. Il page rank del blocco viene calcolato ed il risultato viene scritto su file;
Inizializzazione
• Verifica la correttezza dei parametri
• Partiziona il file dei successori in blocchi.
• Inizializza tutti nodi a 1/N
• Esegue il ciclo principale
• Normalizza e calcola residual
• Stampa i file dei risultati
Multifile utilizzati
• fileSorgente: contiene i valori di PR calcolati alla fine del passo precedente. Viene inizializzato all’inizio di ogni ciclo con i valori di fileDestinatario
• fileTemporaneo: contiene i valori di PR alla fine del ciclo principale, prima del passo di normalizzazione.
• fileDestinatario: contiene i valori di PR dopo il passo di normalizzazione.
Partizionamento del grafo
• I file Grafo.succ e’ partizionato in Nblocchi file di misura prefissata;
• Funzione partizionaFileSuccessori()
– Calcola: numSucc, numInfo, numNodi e numNodiPerOgniBlocco;
– esegue partizione (pseudocode nella prossima slide);
Partizionamento del GrafoFor each structInfo
i = readInfo() /* fInfo.read() */For each successor node of i
s = readSuccess() /* fSucc.read() */insert(s,buffer) /* buffer = fTempo*/
if block_is_full writeToDisk();
}writeToDisk()
}• writeToDisk(): scrive sul file relativo al blocco corrente l’
ID del nodo, il numero totale di successori del nodo e la lista dei successori.
Inizializzazione del PageRank
• Inizializza il file destinatario con il valore di pagerank;
– bufferFloatPR [numNodiperOgniBlocco]
– For i from 1 to numNodiPerOgniBlocco bufferFloatPR[i] =
– scrive bufferFloatPR nel destFile numOfBlocchi volte;
N
1
N
1
Ciclo Principalewhile (stop==false){
for each blocco b from 1 to Nblocchi{
pr = 0; //azzera il buffer
for each node i del blocco b
prende pr(i);
identifica tutti i successori di I;
for each succ j from 1 to numsucc pr(j) += pr(i)/numsucc;
for each succ j from 1 to numsucc
pr(j)= c*pr(j)+ (1-c)*(1/N);
}
scrive su fileDestPR;
}
}1*
1*)1(*'*
NNcRankcMRankM
Terminazione
stop: l’algoritmo si ferma quando il numero di iterazioni e’ > che maxIter o il residuo e’ < residual
Passo di Normalizzazione
• Si prende la somma di tutti i valori di PR alla fine del ciclo principale: sommaPR
• Si dividono tutti I valori di PR memorizzati all’interno del fileTemporaneo per sommaPR.
• Il risultato viene memorizzato in fileDestinatario
Calcolo del residuo
• Il residuo e’ la radice quadrata della sommatoria dei quadrati delle differenze dei valori di PR calcolati in due iterazioni successive.– residual = 0;– residual += (fileSorgente-fileDestinatario)2
– residual= sqrt(residual)
Text2IPS.script
• INPUT: il nome del file contenente il grafo (ASCII)
• OUTPUT: i file testo in multifile format
– NameMultifile.%d.info
– NameMultifile.%d.pred
– NameMultifile.%d.succ
Text2IPS.script
• Uso: text2ips.script <ram> –savesource <InputFile> <NameMultifile.%d>
– ram: memoria disponibile in MB
– -savesource: non cancella il file originale
– %d: DA SPECIFICARE ogni volta che vogliamo un multifile.
Text2IPS.script• Creare una directory graphs/graph-
name/ nella directory che contiene dis_library;
• Mettere al’interno della cartella appena creata l’archivio graph-testo-name
• Posizionarsi in dis_library
• Creare il grafo IPS: bin/text2ips.script 300 –savesource graphs/graph-name/graph-testo-name graph-ips-name.%d
Uso di Page Rank
• INPUT: il grafo in formato IPS
• OUTPUT: ranking delle pagine secondo l’algoritmo pagerank
• Uso: pagerank <ram> <InputFile.%d> <prob> <residual> <maxIter> <outputFile.%d> columns > printFile
Uso Page Rank
– InputFile: base-name del file in formato IPS
– prob: probabilita’ di scegliere una pagina vicina (e non saltare a un' altra pagina)
– residual: pagerank si ferma se il residuo e’ piu piccolo di residual
– maxIter: numero massimo di iterazioni eseguite per pagerank;
Uso Page Rank– outputFile%d: nome del multifile di output in cui
vengono memorizzati i risultati del calcolo di PageRank
– columns: stampa vari tipi di informazione:
• N: colonna con l’id del nodo;
• I: colonna con l’indegree del nodo;
• O: colonna con l’outdegree del nodo;
• P: colonna con il rank del nodo;
– printFile: contiene l'output generato durante l'esecuzione della routine, ad es. Risultati parziali delle singole iterazioni
Eseguire Page Rank• bin/pagerank 300
graphs/graph-name/graph-ips-name.%d 0.85 0.001 50 outputFile.%d NIOP > print-file.txt
• File generati:
– outputFile.pr_distrib.txt: distribuizione dei risultati di pagerank
– outputFile.report.txt: risultati di pagerank
Visualizzazione dei risultati
• Per entrare nell' ambiente: gnuplot
• gnuplot> set logscale
• gnuplot> plot “outputFile.pr_distrib.txt” using 1:2 w p
Uso di HITS• INPUT: grafo in formato IPS
• OUTPUT: ranking delle pagine secondo l’algorithmo hits
• Uso: bin/hits
• Nota: questa routine e` fornita solo in versione interattiva. I parametri devono essere forniti da std input.
– InputFile: GraphName.%d
– maxResidual: hits si ferma se il residuo e’ piu piccolo di maxResidual
– maxIter: numero massimo di iterazioni
Eseguire Hits
• bin/hits
• Insert graph name : graphs/graph-name/graphIPSName.%d
• Insert maxResidual : 0.001
• Insert maxIteration : 50