Implementacija PageRank algoritma metodom potencija u GNU Octaveu
Ključne riječi: internetski pretraživač, PageRank algoritam, metoda potencija, GNU Octave
Moderni život gotovo je nezamisliv bez interneta, koji omogućava nikada brži i jednostavniji pristup informacijama. Veliku ulogu u tome imaju internetski pretraživači (tražilice). Internetski pretraživač ili tražilica softverski je sustav koji je osmišljen za provođenje internetskog pretraživanja, tj. sustavnog pretraživanja World Wide Weba s ciljem pronalaska određenih podataka navedenih u tekstualnom upitu
Metoda potencija najjednostavnija je metoda za određivanje najveće (po apsolutnoj vrijednosti) svojstvene vrijednosti matrice i pripadnog svojstvenog vektora. Algoritam metode potencija je vrlo jednostavan i iterativan, ali ponekad sporo konvergira. U slučaju rijetko popunjene matrice A (matrica u kojoj većina elemenata ima vrijednost nula), metoda potencija je vrlo brza. Neka je matrica A matrica dijagonalizabilna i neka ima jedinstvenu po apsolutnoj vrijednosti najveću svojstvenu vrijednost. Tada su svojstvene vrijednosti matrice A\lambda_{1},\lambda_{2},…,\lambda_{n} i neka su poredane tako da vrijedi
Neka je x^{(0)} početni vektor. Tada se metoda potencija svodi na množenje matrice A vektorom x^{(k)} u svakoj iteraciji, tj.
Budući da elementi umnoška Ax^{(k)} mogu postati jako veliki ili jako mali brojevi, potrebno je normirati vektore x^{(k)}, k = 0, 1, .... Algoritam metode potencija možemo zapisati kao u Algoritmu
Kriterij konvergencije može biti zadani broj iteracija ili tolerancija na razliku između rješenja dvije susjedne iteracije.Nešto više o metodi i njenoj konvergenciji može se pronaći u
PageRank je algoritam koji koristi tvrtka Google u svom internetskom pretraživaču prilikom rangiranja internetskih stranica. PageRank algoritam dobio je ime po Larryu Pageu, jednom od osnivača Googlea. U ranim devedesetima prošlog stoljeća, kada su internetski pretraživači koristili samo tekstualne sustave rangiranja postojao je niz problema. Potraga za pojmom kao što je "Matematika" bila je problematična. Najviše rangirana stranica koju bi prikazivala jedna od ranijih internetskih pretraživača bila bi napisana na kineskom jeziku s ponavljanjima riječi "Matematika" i ne bi sadržavala nikakav drugi podatak. Također, kada bi se tražile informacije o riječi "matrica" očekivalo se da bi stranica "www.matrica.hr" bila najrelevantnije mjesto za takav upit. Međutim, mogu postojati milijuni stranica koje koriste riječ "matrica" u svojoj domeni, a stranica www.matrica.hr možda nije ona koja se najčešće koristi. Neka internetska stranicu sadrži riječ "matrica" milijun puta i ništa drugo. Zar bi tada imalo smisla da ta internet stranica bude prikazana prva u pretraživaču bez obzira što sadržaj stranice nije relevantan? Međutim, ako je broj ponavljanja tražene riječi na nekoj stranici osnovni kriterij rangiranja, onda se upravo to događalo. Navedeni problemi su motivirali nove i bolje pristupe rangiranju stranica. Jedno od tih novijih rješenja je i PageRank algoritam
PageRank algoritam za računanje važnosti i kvalitete internet stranica, ne uzima u obzir samo broj poveznica do neke stranice, nego i kvalitetu tih poveznica kako bi odredio grubu procjenu važnosti internetske stranice. Temeljna pretpostavka je da će važnije internetske stranice dobiti više poveznica s drugih internetskih stranica. To se najbolje može dočarati ako se internet interpretira kao veliki usmjereni graf, gdje vrhovi predstavljaju internetske stranice, a poveznice među stranicama su bridovi grafa. Ideja i funkcionalnost PageRank algoritma demonstrirat će se kroz nekoliko primjera. Pritom će se koristiti metoda potencija kako bi se izračunao prvi svojstveni vektor, koji predstavlja rang internetskih stranica. Radi jednostavnosti poveznice (bridovi) među stranicama (vrhovima grafa) neće imati težine. U nastavku će poveznice i bridovi te stranice i vrhovi imati jednako značenje.
Postoje internetske stranice koje nude izračunavanje ranga neke domene PageRank algoritmom besplatno, npr.
Projekt Opte
Ovakav pristup ima nekoliko problema, a za njihovo razumijevanje i rješavanje uvodimo pojam slučajnog šetača.
Za dublje razumijevanje PageRank algoritma potrebno je znanje osnova vjerojatnosti. Model slučajnog šetača pretpostavlja da je sljedeća stranica odabrana nasumično. Dakle, rješenje PageRank metode se može promatrati kao asimptotsku vjerojatnost da je slučajni šetač na određenoj stranici. Što je rang stranice veći, veća je vjerojatnost da će slučajni šetač doći do te stranice. Opisana metoda u prošlom odjeljku ima dva problema: „zaglavljen“ u stranici i „zaglavljen“ u podgrafu. Rješenja za te probleme su opisana u nastavku.
U grafu mogu postojati vrhovi koji nemaju izlaznih bridova (tzv. ponori), tj. postoje stranice koje ne pokazuju niti na jednu drugu stranicu. Tada slučajni šetač ne bi mogao otići niti u jednu drugu internet stranicu. U Primjeru
Tada za Primjer
Za graf G' kažemo da je podgraf grafa G, ako je skup vrhova grafa G' podskup skupa vrhova grafa G i skup bridova grafa G' podskup skupa bridova grafa G. U grafu mogu postojati podgrafovi koji su izolirani, tj. nemaju bridova prema niti jednom drugom vrhu grafa. To znači da imamo skup stranica koje mogu pokazivati jedna na drugu, ali nisu nikako povezane s drugim stranicama u mreži. U tom slučaju će šetač ostati zarobljen u takvom podgrafu. U Primjeru
Problem izoliranih podgrafova povezuje se s problemom reducibilnosti matrice. Matrica A\in \mathbb{C}^{n\times n}, n\geq 2 je reducibilna ako postoji matrica permutacije P i p\in \lbrace 1,2, ..., n-1\rbrace tako da vrijedi
Ako je n=1, onda je matrica A reducibilna ako je A = [0]. Matrica je ireducibilna, ako nije reducibilna.
Potrebno je definirati još nekoliko važnih pojmova vezanih uz grafove. Put u grafu od vrha v_{k} do vrha v_{l} je niz usmjerenih bridova v_{k}v_{i1}, v_{i1} v_{i2}, ..., v_{ij-1}v_{l}, pri čemu je j duljina puta. Nadalje, jako povezani graf je graf u kojemu su svaka dva njegova vrha povezana putem. Može se pokazati sljedeća tvrdnja
Neka matrica Q reprezentira mrežu na dosada opisani način. Ako graf koji reprezentira mrežu ima izolirani podgraf, tada matrica Q ne može biti ireducibilna, jer pripadni graf nije jako povezan. Problem zaglavljenosti u podgrafu rješava se omogućavanjem skoka iz bilo kojeg vrha u bilo koji vrh. Vjerojatnost tog skoka treba biti mala, ali različita od nule. Tome služi faktor prigušenja \alpha \in (0, 1), koji iznosi 0.85 u Googleovom pretraživaču. Kombinacijom rješenja problema zaglavljenosti u vrhu i podgrafu uz \alpha = 0.85 dobivamo novu matricu \tilde{Q}:
Odabirom faktora \alpha se smanjuju svojstvene vrijednosti matrice. To znači da će za mali \alpha doći do brže konvergencije ka konačnom rezultatu. Međutim, mali \alpha znači i da će konačni rezultat algoritma loše prezentirati stvarne vrijednosti, jer se dopušta da nasumični skokovi kojih inače nema uvelike utječu na rezultat. Kod velikog \alpha situacija je obrnuta – algoritam će sporije konvergirati, ali će rezultat biti točniji. Iz navedenih razloga kao dobar odabir za faktor prigušenja, uzima se vrijednost 0.85
Može se pokazati da matrica koja je redak-stohastička i ireducibilna ima najveću svojstvenu vrijednost 1 i da joj je pripadni svojstveni vektor stupac r jedinstven i nenegativan. Matrica susjedstva je modificirana kako bi riješila neke potencijalne probleme pa je potrebno metodu potencije primijeniti na matricu \tilde{Q}^{T}, tj. iteracije su
Gornja formula se koristi iterativno do konvergencije kako je opisano u Poglavlju
Iterativni postupak koristeći rijetko popunjenu matricu Q uvelike smanjuje vrijeme i memorijski prostor koji je potreban. Važan argument za korištenje metode potencija kako bi se riješio problem PageRanka je činjenica da je to najjednostavnija i vrlo efikasna metoda upravo za rijetko popunjene matrice, a kao rezultat se dobije svojstveni vektor koji pripada najvećoj svojstvenoj vrijednosti. Potrebno je naglasiti da metoda potencije ne mijenja početnu matricu tijekom izvršavanja. Nadalje, može se pokazati da je dovoljno koristiti sljedeći oblik iteracija za metodu potencija
Bitna prednost navedene formule proizlazi iz činjenice da nije potreban vektor d, tj. nije potrebno znati koje stranice nemaju poveznicu ni na jednu drugu stranicu.
Kombinacijom opisane metode potencija i (
# iter | r_{A} | r_{B} | r_{C} | r_{D} | rel(i) |
0 | 0.25 | 0.25 | 0.25 | 0.25 | - |
1 | 0.196875 | 0.090625 | 0.409375 | 0.303125 | 0.4292 |
2 | 0.1178515625 | 0.0793359375 | 0.3755078125 | 0.4273046875 | 0.2583 |
3 | 0.09626123047 | 0.06254345703 | 0.4594702148 | 0.3817250977 | 0.1634 |
... | ... | ... | |||
19 | 0.07664726482 | 0.05378754993 | 0.4432887926 | 0.4262763926 | 0.0115 |
20 | 0.0766472525 | 0.05378754377 | 0.4389821862 | 0.4305830175 | 0.0098 |
Tablica
Uz odabira eps = 10^{-2} dobivamo vektor (1.00000, 1.00000, 1.00834, 0.99150)^{T}, a za eps = 10^{-8} vektor (1, 1, 1,1)^{T}, zaokružimo li rezultate na 5 decimalnih mjesta, što je u skladu s dopuštenom pogreškom i pokazuje da je rješenje s manjom dopuštenom pogreškom točnije i u ovom segmentu.
# iter | r_{A} | r_{B} | r_{C} | r_{D} | rel(i) |
... | ... | ... | ... | ... | ... |
21 | 0.07664724726 | 0.05378754116 | 0.4426428121 | 0.4269223995 | 0.00832214 |
22 | 0.07664724503 | 0.05378754004 | 0.4395312846 | 0.4300339303 | 0.0070745 |
23 | 0.07664724409 | 0.05378753957 | 0.4421760849 | 0.4273891315 | 0.0060128 |
... | ... | ... | ... | ... | ... |
103 | 0.07664724339 | 0.05378753922 | 0.4409609099 | 0.4286043075 | 1.35710\cdot 10^{-8} |
104 | 0.07664724339 | 0.05378753922 | 0.4409609048 | 0.4286043126 | 1.1535\cdot 10^{-8} |
105 | 0.07664724339 | 0.05378753922 | 0.4409609091 | 0.4286043083 | {9.8051\cdot 10^{-9}} |
Postoje brojne baze matrica susjedstva za stvarne mreže, a koje su dostupne na internetu. Biblioteka Stanford Network Analysis Project (SNAP) razvija se od 2004. godine i nudi bazu podataka i alate za analizu velikih mreža. Na internetskoj stranici
Kao primjer velike matrice koristit će se Googleova matrica, koja je javno objavljena i korištena na natjecanju iz programiranja 2002. godine. Kao pobjednik tog natjecanja izašao je Daniel Egnor koji je za prvo mjesto osvojio nagradu od 10 000 američkih dolara s projektom „Geografsko pretraživanje“. Više o tom natjecanju možete pročitati u
R.br. | Indeks u matrici | Rang r | Broj izlaznih | Broj ulaznih |
poveznica | poveznica | |||
1. | 597622 | 0.00091458 | 22 | 5354 |
2. | 41910 | 0.000912013 | 10 | 4408 |
3. | 163076 | 0.000895056 | 36 | 4731 |
4. | 537040 | 0.000889934 | 27 | 6326 |
5. | 384667 | 0.000779103 | 20 | 4010 |
6. | 504141 | 0.000757542 | 19 | 5271 |
7. | 486981 | 0.000717764 | 6 | 3908 |
8. | 605857 | 0.000710848 | 22 | 4550 |
9. | 32164 | 0.000705518 | 32 | 5418 |
10. | 558792 | 0.000702166 | 22 | 4206 |
Kako bismo ubrzali izvršavanje skripti, možemo koristiti transponiranu matricu Q' kao ulaz u funkciju PageRankMP(), jer tada ne trebamo transponirati matricu Q u svakom koraku metode potencija, već koristimo ulaznu matricu direktno. Algoritam
Rad s rijetko popunjenim matricama pokazao se ključan u radu s matricama velikog reda. To nas je motiviralo da dublje istražimo rad s takvim tipom matrica. Jedan od način je generiranje slučajnih matrica susjedstva za željeni broj stranica u mreži. Implementirane su tri metode. Prva metoda, metoda A, koristi ugnježdene petlje i ne koristi funkcije za rad s rijetko popunjenim matricama. Druga metoda, metoda B, koristi funkciju sparse() za koju je potrebno pripremiti argumente ulaza. Treća metoda, metoda C, koristi funkcije sprand() i spones(). Metode koje koriste funkcije za rad s rijetko popunjenim matricama, osim što omogućavaju njihov zapis u slučaju jako velikih dimenzija, daju višestruko ubrzanje njihovog generiranja, a zatim i rada s njima.
Na računalu AIME Workstation A.I. T502 s procesorom Ryzen 9 5900X vrijeme potrebno za generiranje slučajne matrice reda 1000 na jednoj niti procesora metodom A je 63 -64 s, metodom B 0.3-0.4s, a metodom C 0.009 - 0.03 s. Slučajnu matricu istog reda i popunjenosti kao Googleova matrica u
PageRank algoritam daje bitan kriterij za rangiranje internetskih stranica u Googleovom internetskom pretraživaču. U radu su dane osnove teorije algoritma koje su potkrijepljene primjerima. U programskom paketu GNU Octave pojašnjena je implementacija algoritma PageRank pomoću metode potencija. Detalji su dani na primjeru male mreže stranica, a zatim je implementacija testirana na matrici visokog reda. Korištenjem funkcija za rad sa rijetko popunjenim matricama, dobiva se značajno ubrzanje izvršavanja algoritma. Točnost dobivenog rješenja za matricu velikog reda provjerena je pomoću Matlabove ugrađene funkcije centrality() i utvrđena je visoka relativna točnost rješenja. Demonstrirano je generiranje slučajnih matrica susjedstva mreže pomoću 3 metode. Dodatno su navedeni izvori gdje se mogu pronaći matrice velikog reda iz stvarnog svijeta. {20}
[1] | Andersson, E., Ekstrom, P. (2004): Investigating Google's PageRank algorithm. Uppsala: Uppsala University. |
[2] | Drmač, Z., Numerička analiza 1, PMF-MO, Zagreb, https://web.math.pmf.unizg.hr/ drmac/na001.pdf (pristupljeno 15.9.2020.) |
[3] | Thanuskodi, S. (2020): Use of Digital Resources Among Social Scien-tists: An Evaluative Study. Karaikudi: Alagappa University. |
[4] | Arbona, https://www.arbona.hr/blog/seo/najpopularnije-trazilice-i-navike-korisni... (pristupljeno 2.9.2020) |
[5] | Backlinko, https://backlinko.com/google-ranking-factors (pristupljeno 6.9.2020.) |
[6] | Cornell University, http://pi.math.cornell.edu/ mec/Winter2009/RalucaRemus/Lecture3/lecture... (pristupljeno 9.9.2020) |
[7] | Google PageRank Checker https://smallseotools.com/google-pagerank-checker/ |
[8] | Mooglemb, http://mooglemb.com/threads/googlecache/64.233.187.104/programming-conte... (pristupljeno 12.9.2020.) |
[9] | NetMartketShare: https://netmarketshare.com/ (pristupljeno 10.6.2021.) |
[10] | Opte projekt: https://www.opte.org/the-internet (pristupljeno 7.7.2021.) |
[11] | Ryte Wiki, https://en.ryte.com/wiki/Random_Surfer_Model (pristupljeno 2.9.2020.) |
[12] | SNAP http://snap.stanford.edu/about.html (pristupljeno 7.7.2021.) |
[13] | University of Florida: https://www.cise.ufl.edu/research/sparse/matrices/SNAP/web-Google.html (pristupljeno 6.7.2021.) |