Esercitazione 2 Ranking di pagine Web Ilaria Bordino Ilaria 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 SIN-Tools.htm Documentazione in: liverableD13.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 esempioFormato testo
Il Formato IPS Per ogni grafo sono presenti 3 tipi di multifile: –.info: contiene lindegree, loutdegree 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 allutente ( 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 allinizio 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 Grafo For 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;
Ciclo Principale while (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; }
Terminazione stop: lalgoritmo 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 allinterno 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 –savesource –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 alinterno della cartella appena creata larchivio 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 lalgoritmo pagerank Uso: pagerank 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 lid del nodo; I: colonna con lindegree del nodo; O: colonna con loutdegree 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 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 lalgorithmo 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: Insert maxIteration: 50