430 likes | 508 Views
Információ Visszakeresés. A diák nagyban támaszkodnak a Stanford Egyetem „Information Retrieval and Web-mining” kurzusának anyagára: http://www-csli.stanford.edu/~schuetze/information-retrieval-book.html. Áttekintés. Mi az IR? Indexelés Egyszerű index Invertált index, Gamma-kódolás
E N D
Információ Visszakeresés A diák nagyban támaszkodnak a Stanford Egyetem „Information Retrieval and Web-mining” kurzusának anyagára: http://www-csli.stanford.edu/~schuetze/information-retrieval-book.html
Áttekintés • Mi az IR? • Indexelés • Egyszerű index • Invertált index, Gamma-kódolás • Rangsorolás • TF-IDF rangsor • PageRank • Google röviden • Architektúra • További rangsorolási szempontok (amiket nem veszünk részletesen)
Információ Visszakeresés • IR alapprobléma • Adott egy korpusz(dokumentumok halmaza, internet) • Felhasználó az információigényét leginkább kielégítő dokumentumokat keresi • Lekérdezést fogalmaz meg • Cél a lekérdezésnek megfelelő dokumentumok listája
Egy IR rendszer legfontosabb jellemzői • Indexelés sebessége (nem fontos) • Lekérdezés sebessége • Lekérdező nyelv kifejezőereje (mit kérdezhetünk meg és mit nem?) • Pontosság (a legfontosabb, de a mérése összetett feladat)
Indexelés vs. Adatbázis • Szövegek kollekciója feletti keresést támogat • De nem adatbázis! • Sok minden nem kell amit egy adatbázisszerver elvégez • Tranzakciók • Adatvesztés • A szöveget (az adatot) nem tároljuk, csak indexet • Optimalizálás szöveges lekérdezésre, nem pl. SQL-re
Egyszerű index • Szó-dokumentum mátrix (Di,j : i. szó szerepel-e a j-edik dokumentumban)
Egyszerű indexelés • Gyors • Az élet nem ilyen szép • Kivitelezhetetlen • 1 millió dokumentum, ~1000 token/dok, ~6byte/token • ~6GB korpusz • Legyen 500K különböző szóalak • 500K x 1M mátrix • ~60 GB index!
Invertált index • A szó-dokumentum mátrixban ~1 milliárd egyes van csak! (azaz rendkívül ritka) • Egyszerűbb, és jobb reprezentáció, ha csak az 1-esek pozícióit tároljuk • ekkor invertált indexről beszélünk
2 4 8 16 32 64 128 1 2 3 5 8 13 21 34 Invertált index • Minden T tokenre, tároljuk aT-t tartalmazó dokumentumok listáját. • Miben tároljuk? • tömb Brutus Calpurnia Caesar 13 16 Mi van akkor ha aCaesarszó bekerül a 14-es dokumentumba?
Brutus Calpurnia Caesar Szótár Napló Listás megvalósítás jobb • Dinamikus helyfoglalás (különböző gyakoriságú szavak!!!) • Könnyű beszúrás • Pointerek extra helyfoglalás 2 4 8 16 32 64 128 1 2 3 5 8 13 21 34 13 16 Dokumentum ID szerint rendezve!
Tokenizáló Friends Romans Countrymen Token stream Nyelvi modulok friend friend roman countryman Normalizált tokenek roman Indexelő 2 4 countryman 1 2 Invertált index 16 13 Invertált index létrehozása Dokumentumok Friends, Romans, countrymen.
Az index használata • Hogyan dolgozunk fel 1 lekérdezést? • Milyen jellegű lekérdezéseket kezelünk? • Mit indexelünk? • Mindent, vagy csak fontos szavakat? (Mi fontos?) • Stopword lista: a leggyakoribb szavak elhagyhatók az indexből (sok hely, kevés haszon) • pl., the, a, an, of, to … • Nyelvfüggő elem, minden nyelvre kell stopword lista.
Brutus Caesar 13 128 2 2 4 4 8 8 16 16 32 32 64 64 8 1 1 2 2 3 3 5 5 8 8 21 21 13 34 Lekérdezés (naplólisták egyesítése) • Párhuzamosan megyünk végig a két naplólistán, időigény így arányos a listák összhosszával 128 2 34 Ha a két lista hosszamésn, az összefésülés időigényeO(m+n) Fontos: a listák dokID szerint rendezve legyenek!!
Mit kapunk, milyen áron? • Logikai (igen/nem) keresésre • Csak pontos egyezést ad vissza • Nincs rangsorolás • Sokáig ez volt az uralkodó technológia • Becslés a méretre? Vegyük az előző példát: • 1M dokumentum, átl. 1000 token hossz, átl. 6 byte/szó, ~500K különböző token
Becslés az invertált index méretére • Két különálló tényező szabja meg a méretet • Szótár mérete • Naplók mérete • Különböző dolgok jönnek szóba a méret optimalizálásakor • Szótárnál: pl. szótövezés (magyarban különösen fontos!) • Naplónál: dokID-ket tárolunk, tömörítés!
Napló tárolása • Tároljuk rendezve a dokumentum ID listát! • Ekkor elegendő csak az ID-k különbségeit tárolni („lyukak”) • ezek várhatóan átlagosan sokkal kisebb számok • Brutus: 33, 47, 154, 159, 202, … • Brutus: 33, 14, 107, 5, 43, … • Használjunk változó kódhosszúságú kódolást! • Calpurnia szó átlag minden egymilliomodik dokumentumban fordul elő, akkor azt log2 1M = ~20 biten szeretnénk tárolni • az szó szinte minden dokumentumban benne van, ezt az infot jó lenne ~1 bit helyen tárolni
γ kódolás • K számot egy <hossz, eltolás> párral írjuk le • hossz érték unáris kódolású(a számot leíró kód (eltolás) hosszát adja meg) • az eltolás bináris kódolású(megadja magát a számot) • K kódja • bites unáris kód • bites bináris kód • ahol:
γ kódolás • Példák: • 9 = <1110,001> (7 bit) • 23 = <11110, 0111> (9 bit) • 1040 = <11111111110,0000010000> (21 bit) • A kód egy kettes szorzó mellett optimális! • Ennél számottevően jobb tömörítést csak úgy érhetünk el, ha rendelkezünk információval a számok eloszlásáról
Zipf törvénye • A k-adik leggyakoribb szó gyakorisága nagyságrendileg ~1/k
Becslés Zipf törvénye alapján • A leggyakoribb szó N dokumentumban fordul elő (minden lyuk 1-es) 2. leggyakoribb N/2 dokumentumban (lyukak átlagosan 2 nagyságúak) … k-adik leggyakoribb N/k dokumentumban (átlagos lyuk nagyság N/k), bit tárolásra • Összegezve k = 1 … 500 ezerig • Összegzést végezzük úgy, hogy k darab csoportot tekintünk: • az i-edik csoportra , elemű, egyenként max . • N = 1 millió, i = 1 … 19-re szummázva kb 340 millió bit, azaz ~45 MB az index Napló részének mérete.
Szótár mérete, első gondolat • Fix hosszú bejegyzések tömbje • 500K token; 28 byte/token = ~14MB. 20 bytes 4 bytes each
A fix méret pazarló! • Angolra: • Átlagos szóhossz írott szövegben: 4,5 byte • Átlagos hossza az angol szavaknak: 8 karakter • Ráadásul a fix méret amúgy is problémás lehet! • „megszentségteleníthetetlenségeskedéseitekért”
Szótár tömörítése • A szótár egyetlen karakterlánc • Pointer a szó kezdetére • Köv. pointer mutatja a szó végét ….systilesyzygeticsyzygialsyzygyszaibelyiteszczecinszomo…. Teljes hossz = 500KB x 8 = 4MB Pointerek 4M pozícióra log24M = 22bits = 3bytes Binary search these pointers
Index mérete • Napló • Kb 45 MB • Szótár • 4 byte gyakoriságra • 4 byte a Napló pointer • 3 byte aszó pointer • Átl. 8 byte szavanként a szóláncban • 500K token~9.5MB • Index • ~55 MB
Indexméret • Szótövezés / kis-nagybetűs alak • Tokenek számát ~40%-al • Pointerek számát 10-20%-al • Méretet ~30%-al • Stopwords • 30-as szabály: ~30 szó tesz ki ~30%-ot az írott szövegekben! • A leggyakoribb szavak kivágása ~25% helyspórolást hozhat
Pár szó a lekérdezés sebességéről • Napló-listák lineáris időben egyesíthetők • Optimalizálás: • Célszerű a rövid listákkal kezdeni a műveletek elvégzését • Ugrólisták használata (index mérete növekszik így)
128 31 17 2 4 8 16 32 64 1 2 3 5 8 21 Feldolgozás ugrólistákkal 128 16 31 8
Invertált index vége • Célszerű tárolni a dokumentumban a szóalak helyét • Kifejezés alapú lekérdezés támogatására • Ezzel az előbb nem törődtünk • Nagyobb index, de ezt használják a gyakorlatban • Alternatívája a bi- trigram alapú indexelés
Rangsorolás • Általában jó sok dokumentum illeszkedik 1-1 lekérdezésre • Több milliárdos korpuszból milliós nagyságrendű találat • Fontos, hogy a dokumentumokat rangsoroljuk, relevancia szerint!
tf-idf rangsorolás • Szavak súlya a tf, és idf szorzata: • Index készítésekor legyártható a súlyozás • „Ezt tároljuk el a szó-dokumentum mátrixban” • A lekérdezést is egy mini dokumentumra nézve a 2 vektor koszinusza adja a hasonlóságot:
PageRank • Ki a legbefolyásosabb ember? • Az Egyesült Államok elnöke • Az arab liga elnöke • A világbank elnöke • Ha én mind a hármat jól ismerem? • Egy adott ember fontossága függ az ismerősei befolyásától is! • Ez a web-gráfra is igaz • A jó lapokra sok (jó) lap mutat rá linkekkel!
Véletlen szörföző heurisztika • Egy robot véletlen bolyongást végez a weben • Linkek mentén lép tovább • Beragadást elkerülendő kis eséllyel (p) véletlen lapra lép tovább • Hosszú idő után az egyes lapok látogatottsága beáll egy stabil értékre, ami nagyon jól használható a lap fontosáságának mérésére
Bolyongás • A véletlen bolyongások Markov láncokkal modellezhetők • Az egyes állapotok közti átmenetek valószínűségeit sorsztochasztikus mátrixszal írhatjuk le
Az általunk leírt esetben • Minden állapotból mindegyikbe vezet él • Minden lépésben bármely állapotban >0 valószínűséggel lehetünk éppen • Irredúcibilis Markov lánc • A pontok hosszú távú látogatottsága egyértelműen definiált • Mindegy honnét indultunk
PageRank • Az oldalak rangja legyen a hosszú távú látogatottsági rátájuk! • Ez pontosan a web-gráfot leíró átmeneti mátrix sajátvektora lesz • Lekérdezésfüggetlen rangsor • Nehéz spammelni • A rangsorolást visszavezettük a sajátérték-sajátvektor problémára • Kiszámítható!
PageRank vektor számítása • Legyena= (a1, … an)a legnagyobb sajátértékhez tartozó sajátvektor (PageRank) • Ha az aktuális pozícióa, akkor a következő lépésben aPa helyzetünket leíró vektor • Haaaz egyensúlyi állapot,akkora=aP • Megoldva a mátrixegyenletet kapjuka-t • Tehátaa Pmátrix baloldali sajátvektora • (mely épp a legnagyobb sajátértékhez tartozik)
Hatványiteráció • Ismert algebrai módszer • Véletlen vektorból indulva minden iterációban a vektorunkat szorozzuk az átmeneti mátrixszal • Megállunk ha a vektor már alig változik (stabil) • Bárhonnan indulunk, a bolyongást leíró vektor a-hoz tart • Tehát induljunk egy egy weblapról (mondjukx=(10…0)). • Egy lépés után xPírja le az helyzetünket (valószínűségek) • Két lépés utánxP2 , utánaxP3… • Kellően nagy k-ra, xPk = a. • Algoritmus: szorozzukx-eta Pmátrixszal amíg a szorzat kellően nem stabilizálódik
PageRank értékelése • A lekérdezéstől független a lapok sorrendje • Nehéz spammelni • Nagyon sikeresnek bizonyult • Nem önmagában, hanem sok már heurisztikával karöltve használják
Adatbázisuk ~25-30 milliárd indexelt dokumentumot tartalmaz • A rendszert egyszerű PCk szolgálják ki • Tízezres nagyságrendű géppark • ~5PB RAM • Tárolják az indexelt dokumentumokat (offline feldolgozás) • Tömörítő (ZIP) algoritmus optimalizálása /sebesség-tömörítési ráta/ • Biztonság: szándékos redundancia (minden dokumentum 3-6 példányban) • Saját linux rendszer • Sikerük: • Testreszabott hardversturktúra • Nagyon jó rangsor
Google index • További, rangsorolásra használt elemek • Kiemelt helyen lévő előfordulás (pl. cím, hivatkozó szöveg /anchor-text/, …) • Query/Hit relevancia (milyen gyakran választják az adott találatot) • Hubs/authorities (hub – forrás; authority – szakértő)a gráfstruktúrát használja, de másképp mint a PageRank • Stb. • a kulcs a visszafejthetetlenség • a jó rangsor • optimalizálás
Hubs-Authorities Hub pontszám h(x) – Attól függ milyen jó szakértőket linkelek Authority pontszám a(x) – Attól függ mennyi, milyen jó forrás mutat rám Iteratív módszer
Anchor text elemzés • A hivatkozó szöveg a linkelt dologra nézve reprezentatív! Here is a great picture of a tiger Cool tiger webpage