320 likes | 465 Views
Ilaria Bordino e Debora Donato. Esercitazione 2 Ranking di pagine Web. Ilaria Bordino e Debora Donato. Ilaria Bordino e Debora Donato. Corso di Ricerca dell'informazione nel Web - A.A. 2006/2007. Passi per il ranking delle pagine. Raccolta delle pagine html; Costruzione del webgraph;
E N D
Ilaria Bordino e Debora Donato Esercitazione 2 Ranking di pagine Web Ilaria Bordino e Debora Donato Ilaria Bordino e Debora Donato Corso di Ricerca dell'informazione nel Web - A.A. 2006/2007
Passi per il ranking delle pagine • Raccolta delle pagine html; • Costruzione del webgraph; • Transformazione dei dati in un formato adeguato; • Ranking delle pagine del webgraph: • Con Pagerank; • Con Hits.
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
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 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){ foreach 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; foreach succ jfrom 1 to numsucc pr(j) += pr(i)/numsucc; foreach succ jfrom 1 to numsucc pr(j)= c*pr(j)+ (1-c)*(1/N); } scrive su fileDestPR; } }
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.00150 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