Sei sulla pagina 1di 12

Facultatea de Automatica si Calculatoare

Raport de cercetare master an II

Student: Dumitrescu Bogdan

Algoritmul Single Pass In Memory Indexing pentru indexarea colectiilor


de text

Introducere:

Construirea eficient a unui index inversat este esenial pentru a putea face posibila
cutarea pe colecii mari de date de tip text. n cele ce urmeaza sunt prezentate abordrile
principale in construirea unui index inversat si sunt prezentate rezultate experimentale. De
asemenea se vor identifica neajunsurile abordrilor existente asupra constuirii unui index
inversat i se va propune o metod noua (engl. single-pass) care, spre deosebire de abordrile
anterioare, nu necesit stocarea in memorie a intregului vocabular si poate funciona n cadrul
unui sistem cu resurse limitate. Se va arata c performana acestei noi abordari unice poate fi
mbuntit prin construirea indexului inversat n segmente, ceea ce reducere numarul de
accesari ale discului atunci cand se construieste un index pentru volume mari de date.
Mrimea coleciilor de text i rata cu care aceastea continua sa creasca aduce noi
provocri pentru construcia indexului. Construirea unui index pentru o colecie mare de text
poate implica gestionarea a milioane de cuvinte distincte si a miliarde de aparitii distinct ale
cuvintelor in textul indexat. Cele mai multe abordri de construire ale unui astfel de index sunt
bine adaptate pentru a indexa o colecie de text de ordinul catorva megaocteti.
Pentru colecii mici, vocabularul i toate aparitiile cuvintelor in textul indexat pot fi acumulate
n memoria principala, ceea ce permite constructia rapida a indexului atata vreme cat statia de
lucru are suficienta capacitate. Cu toate acestea, pentru volume mari de text, doar cateva tehnici
sunt practice.
De cele mai multe ori se evita necesitatea unei memorii de mari dimensiuni prin stocarea
aparitiilor cuvintelor pe disc temporar, prin urmare, se stocheaza pe disc ceea ce nu incape in
memorie insa accesarea discului indusa de aceasta abordare atrage dupa sine o performanta
scazuta.
Abordri mai avansate presupun un compromis intre procentul din index care se
pastreaza in memorie si cel pastrat pe disc, insa si acestea necesit o abundenta de memorie
principal. Pe de alt parte, performana standard a staiilor de lucru a crescut n mod dramatic n
ultimele decenii. S-ar putea deduce din aceste mbuntiri ca indexarea ar putea fi eventual
efectuata n ntregime n memoria principal. Cu toate acestea, volumul de date care urmeaz s
fie indexate poate crete foarte mult odata cu capacitatea de a stoca. De exemplu, o colecie de

text bazata pe documente aduse de pe web ar putea conine 100 GB de date. O reprezentare
eficient a indexului ar putea fi de 20 GB, in timp ce doar termenii distincti ai indexului pot
solicita pana la 200-400 MB de memorie. Deoarece dimensiunea colectiilor de date se dezvolt
rapid, este rezonabil s presupunem c indexarea facuta n memorie nu este o solutie practica
pentru colecii mari in viitor, chiar dac performana staiilor de lucru standard continua sa
creasca. In continuare se propune construcia eficienta a indexului pentru colecii de text.
Cea mai rapida abordare de pana acum este cunoscuta sub numele de sort-based
inversion. Acesta parcurge datele de intrare o singura data, iar frecventele necomprimate de
aparitie ale cuvintelor sunt acumulate n memoria principal, sortate, comprimate, precum i
scrise pe disc n runde care sunt mai apoi imbinate pentru a obine forma finala a indexului. O
alternativ este o metod care parcurge de doua ori datele de intrare unde neajunsul spatiului
redus de memorie este inlaturat de algoritmi eficienti de compresie, insa datele de intrare trebuie
procesate de doua ori, ceea ce atrage dupa sine un cost ridicat. Ambele abordri sunt scalabile,
adica pot opera n limite de memorie fixe, dar ambele necesita stocarea intregului vocabular n
permanen n memoria principal, ceea ce poate s nu fie posibil n cazul n care resursele sunt
limitate, deoarece vocabularul unei colecii crete aproximativ liniar cu dimensiunea de
colectare.
In cele ce urmeaza este prezentata o abordare diferita care intruneste avatajele de mai sus
si anume: realizeaza doar o singur trecere peste datele de intrare, nu impune stocarea completa
a vocabularului n memoria principal; poate funciona n volume limitate de memorie i nu are
nevoie de cantiti mari de spaiu pe disc. Astfel se obtin timpi scazuti de raspuns dupa cum se
prezinta in cele ce urmeaza. Abordarea este n esen o combinaie de metode standard descrise
anterior: construcia n memorie de segmente ale indexului care mai apoi sunt salvate pe disc iar
in cele din urma combinate, iar acest design are inovatii majore si surclaseaza semnificativ
abordarile anterioare. Se va construi un index inversat pentru o colecie de 20 Gb de documente
Web pe un Pentium III cu 700 MHz care nu foloseste mai mult de 256 Mb de memorie principal
n aproximativ 155 minute, ceea ce inseamna aproximativ 8 minute per gigabyte de text.

Figura 1: Structura unui index inversat simplu.


Dictionarul menine pentru fiecare termen al indexului o referin la o list inversata stocata pe
disc. O list inversata conine ID-urile documentelor n ordine cresctoare.
2. Indexul inversat:
Un index inversat, de asemenea, cunoscut sub numele de posting list , sau pur i
simplu fiierul inversat, susine seturi de termeni distincti ale unei colecii de text ntr-un
dictionar. Dictionarul pstreaz pentru fiecare termen al indexului un pointer la o list de pe disc,
formata dintr-o list de postri care descriu toate apariiile n colecie.
Pentru marea majoritate a aplicatiilor, un index inversat la nivel de document ofer cel
mai bun compromis ntre evaluarea eficienei i mrimea indicelui. ntr-un index inversat,
lista pentru fiecare termen T este formata din inregistrari de forma (d, f d,t) unde d este id-ul
documentului iar f d,t este frecventa de aparitie a cuvantului in document, adica de cate ori
cuvantul este continut in document. Listele sunt de obicei ordonate dupa ID-ul documentelor.
Prin urmare, o list inversata pentru un termen T este de forma :

f t ; ( d 1 , f d 1,t ) ,(d 2 , f d 2,t )

( d f , f , d )>
t

ft

cu di < dj for 1 _ i < j _ ft, unde ft este numrul de documente care il conin pe t. Figura 1 ofer
o imagine de ansamblu a structurii unui index inversat la nivel de document.
Un index inversat include suplimentar, pe langa fiecare aparitie a cuvntului si poziia sa
ntr-un document, n ordine cresctoare pentru a facilita interogarile ulterioare. Prin urmare,
forma unei liste de adiacenta pentru un cuvant T este:
f t ; ( d 1 , f d 1,t ,l t ,d , 1 , l t , d ,t , f
1

d1 ,t

( d f , f , d , lt , d ,1 , lt ,d , t , f )>
t

ft

ft

d f ,t
t

unde lt;d;I sunt poziiile ordinale sugerate de t n documentul d i lt;d;i < lt;d;j pentru 1 i j
fd,t. Listele inversate sunt de obicei stocate pe hard in mod continuu ntr-un format comprimat, cu
fiecare list accesibila individual. Compresia reduce spatiul de stocare necesar pentru un fiier
inversat i poate, de asemenea, sa reduca si timpul necesar pentru a evalua o interogare. Pentru a
obtine o compresie eficient a listelor inversate trebuie ca numerele documentelor i
poziionarea cuvintelor in listele inversate sa fie in ordine crescatoare.
Tabelul 1: Lista simbolurilor utilizate in analiza performantei unui index inversat.
Parametru

Simbol

Main memory size(Mb)

Valoare
256

Average disk seek time (sec)


Disk transfer time (sec/byte)
Time to parse one term (sec)
Time to compress a byte (sec)
Time to lookup a term in the
lexicon (sec)
Time to compare and swap
two 12 byte records (sec)

ts
tt
tp
tc

9x10-3
5x10-8
8x10-7
5x10-7

tl

6x10-7

tw

1x10-7

Pentru a scade dimensiunea indexului, este necesara stocarea numai a diferenelor ntre numerele
documentelor, dect numerele n sine, lucru care se poate reprezentana eficient folosind
coduri Elias sau coduri Golomb. n practic,o rata buna de compresie a indexului inversat se
realizeaz prin reprezentarea numerelor de documente (ID-uri) folosind coduri Golomb, i a
frecvenele cuvintelor din documente (f d, t ) impreuna cu pozitia cuvintelor in documente
folosind coduri Elias. n lucrrile recente s-a demonstrat c schemele de codare la nivel de bit
conduc la pierderi in eficiena compresiei, dar, in acelasi timp, reduc foarte mult timpul de
decodare.
Exist mai multe abordri propuse pentru construirea indexului inversat. Un studiu recent
privind aceste abordari arat c doar dou dintre ele sunt scalabile: una, cu constructia indexului
in doua faze si stocarea acestuia in memorie,care a fost ulterior mbuntit i cealalt, cu o
singur etapa de construire bazat pe abordarea propus de Moffat & Bell (1995). Aceste
abordri sunt aplicabile coleciilor de text de orice dimensiune i functioneaza n cadrul limitat
al volumelor de memorie principal i spaiu pe disc temporar. n seciunea urmtoare, sunt
prezentate cele dou sisteme n detaliu i s sunt revizuite abordrile simple pe scurt, care sunt
aplicabile numai pentru colecttile mici i mijlocii datorita cerinelor mari de resurse. Cu toate
acestea, nainte este prezentat modelul computational de baza pentru constructia unui index
inversat.
Modelul computational:
Pentru a estima timpul de constuctie a unui index, se va folosi modelul de calcul
prezentat n tabelul 1. Modelul descrie costurile de calcul ale operaiunilor efectuate n timpul
construciei indexului pe o singur staie de lucru cu un singur disc local.
Valorile parametrilor se bazeaz pe performana unui Pentium III 700 MHz cu 512 Mb de
memorie ce ruleaz pe sistemul de operare Linux. Se masoara pe aceast main, de exemplu,
timpul de rulare efectiv pentru a parsa o colecie si a obtine termenii componenti asociind o
estimare a costului tp. Se determina de asemenea tl - costul mediu pentru a cuta un termen ntrun dictionar care este implementat ca un tabel hash standard, cu 220 sloturi . Costurile de timp
pentru tc si tw sunt estimate ntr-un mod similar. Parametrii specifici discului sunt preluati din
specificatiile producatorului referitoare la un hard-disk standard de 40 de GB cu un buffer de
2MB si 7200 rotatii pe minut.

Tabelul 2: Statistica a trei colectii de text de referin. Dimensiunile indexului inversat de


se bazeaz pe un algoritm de compresie ce foloseste codarea Golomb.

Size (Mb)

Simbo
l
S

Distinct terms

Term occurrences (x106)

Documents

Postings(d, fd,t) (x106)

0.6

140.6

Avg. number of term occurrences per


document

Cavg

26

348

Avg. number of index terms per document

Wavg

21

151

Percentage of words that occur once only

33

45

0.64

180

697

1.27

672

2,605

Size of compressed document-level


inverted file (Mb)
Size of compressed word-level inverted
file (Mb)

Iw

Biblia

Web V

Web XX

4,4
13,56
9
0.8
31,10
1

5,120

20,480
6,837,589

2,964,428
323.9
928,113

1,261.5
3,560,951
543.2
354
153
44

Scopul modelului computational este acela de a obine formule de cost pentru abordri de
constuire a indexului inversat i de a calcula timpul lor de funcionare pe colecii de referin.
Cu toate acestea, modelul nu este suficient de precis pentru a calcula timpii exacti de
funcionare, datorita efectelor de caching, costurilor pentru alocarea si eliberarea de memorie
i a altor sarcini efectuate de ctre sistemul de operare. Cu toate acestea, aceste estimri de
performan permit compararea abordrilor de inversiune.
Se folosesc trei colecii de referin cu statisticile prezentate n tabelul 2 pentru a
determina necesarul de resurse pentru o abordare sau alta. Prima colectie, de 4,4 Mb, este
versiunea King James a Bibliei, unde fiecare verset este luat ca un document in timp ce numere
de capitole i numerele de verset nu sunt luate in calcul.Aceast colecie a fost aleasa deoarece
este uor disponibila i poate fi mprita ntr-un numr clar de documente. Celelalte dou
colecii de referin sunt extrase din proiectul TREC (Harman 1995), i sunt tipice motoarelor
de cutare actuale. Colectia cea mica, Web V este de 5 Gb i cea mare Web XX este de 20 Gb,
ambele sunt colecii de documente web n mai multe limbi. Coleciile web au vocabulare mari,
formate din aproape trei milioane i respectiv apte milioane de cuvinte distincte. Aceste
colecii sunt dotate cu distribuia neuniform a termenilor, care este tipica pentru limba vorbita.
De exemplu, Web V are in jur de 324 milioane de aparitii ale termenilor , din care doar n jur de
3 milioane sunt termeni distincti. Termenii cei mai frecventi n colecie sunt and, the si of.

Cuvantul the apare la fiecare 27 de cuvinte , aproape de doua ori mai des decat urmatorul cel
mai frecvent cuvant. Pe de alta parte, aproximativ 45% din termenii distincti apar o singura data.
Aceste statistici au fost obtinute prin parsarea coleciilor n termeni fr a aplica tehnici
de similiratitate a cuvintelor (engl. stemming) sau conversie lower-upper case.Ca termen a fost
considerata fiecare secven de caractere, pn la un maxim de 64, care continea nu mai mult de
dou cifre i nu ncepea cu o cifr. Aceste restricii au fost impuse pentru a preveni includerea n
index a numerelor de pagin sau a altor tipuri de enumerari. Cu toate acestea astfel de numere
pot fi indexate cu succes in sistemele reale. De asemenea au fost excluse n timpul parsarii orice
tag-uri HTML, XML sau caractere speciale, i semne de punctuaie.

Abordari existente asupra construirii indexului inversat:


Inversarea simpla realizata integral in memorie
Se considera un inversat pentru o colecie de text. Ideea principal din spatele acestei
abordari de construire a indexului este vizualizarea acestuia nu ca o colecie de liste de adiacenta
inversate, ci ca o matrice de inversiune. Fiecare coloan din matrice reprezint un document i
fiecare rnd o list inversata. Intrrile matricei reprezint listele de adiacenta (engl. postings).
Prin urmare, o celul a matricei la poziia (m, n) este formata din frecvena fm.n a termenului al
n-lea din colectie n documentul m. Matricea inversata este construit prin dou treceri peste text.
n prima trecere, setul de termeni ai indexului i numrul de documente din colecie sunt
determinate. Apoi, o matrice goala este alocat in care un rnd exista pentru fiecare termen
distinct i o coloan pentru fiecare document. n a doua treceret peste text, documentele sunt
prelucrate fiecare la rndul su, i matricea este completata coloana cu coloana. Pentru fiecare
termen de analizat din documentul curent d, rndul corespunztor r este gsit i counterul pentru
frecvena acestuia in document este incrementat n celula matricei la poziia (d, R). Dupa ce
toate documente au fost procesate, matricea este traversata n ordine invers. Rnd pe rnd, se
obtine o list inversata prin comprimarea intrrilor la nivel de rnd i prin scrierea listei inversate
corespunztoare fiecarui termen pe disc.
Dac se aloca doar 2 octei pentru a stoca o frecven a unui cuvant intr-un document
(ceea ce este suficient pentru mica colectie de text din Biblie unde nici un cuvant nu apare de mai
mult decat 216 -1 ori) atunci matricea de inversiune pentru colecia de text din Biblie ar ocupa
mai mult de 800 Mb din memoria principal. Colectiile Web mai mari au nevoie de 4 octei
pentru o frecven a unui cuvant intr-un document, deci mai mult de 10 TB de memorie
principal ar fi necesari pentru stocarea matricei inversate a colectiei Web V i aproape 89 Tb
pentru colectia Web XX. Cu toate acestea, rndurile matricii sunt doar slab populate in
medie. De exemplu, un document din colectia Web V conine, n medie, 151 termeni distincti,
reprezentnd mai puin de 1% din dimensiunea de vocabular. Economia de spaiu poate fi
realizat prin stocarea unui rand din matrice ca o list care creste dinamic. Pentru o asemenea
abordare, fiecare nod din list contine perechea f (d, fd, t) si are nevoie sa fie reprezentat pe 12
octeti, deoarece, n afar de cei 8 octeti ai nodului, un pointer de 4 octeti care refer nodul

urmator din lista este, de asemenea, necesar. Cu reprezentarea unui rnd din matrice ca o lista,
mai putin de 8 Mb sunt necesari pentru indexul colectiei Biblia. Cu toate acestea, n jurul valorii
de 1.6 Gb sunt necesari pentru colectia Web V, i n jurul valorii de 6 GB pentru colectia Web
XX. n realitate, pozitiile cuvintelor in colectie sunt eseniale, i, astfel, i mai mult spaiu ar fi
necesar. Avand in vedere ca meninerea listelor necesit mai mult memorie dect este
disponibil, o varianta o reprezinta bazarea pe memorie virtual urmand ca sistemul de operare
sa mapeze listele pe disc. Accesul la liste, respectiv rnduri, este cu toate acestea, n ordine
aleatorie. Astfel, n cazul fericit n care numai oricare al zecelea acces al listelor necesit
accesul la disc care dureaza n jurul valorii de 9 milisecunde, mai mult de 35 de ore ar fi necesare
pentru construirea indexului colectiei Web V, de exemplu. Se presupune c datele de intrare ale
t , d , f d ,t :l 1 ..l f )
diferitelor abordri de inversiune sunt de forma (t,d,fd,t) sau (
in cazul in
d ,t

care pozitia cuvintelor este luata in calcul. Aceste nregistrri sunt livrate de ctre un proces care
parseaza colectia document cu document n termeni ai indexului. Pentru fiecare document,
termenii constituenti ai sai, pozitia si frecventa sunt colectate.
Inversarea bazata pe acces la disc
Ideea principal a abordrii bazata pe o singur trecere peste colectia de text este de a
acumula toate listele inversate pe disc, i nu n memoria principal. Listele care aparin aceluiai
termen sunt legate ntre ele ntr-un fisier, care const din mai multe astfel de liste, cate una
pentru fiecare termen. Dup ce toate listele au fost acumulate, un fiier nou este alocat pe disc
pentru a stoca indexul final i listele sunt procesate n ordine lexicografic. Fiecare list este
parsata, apoi toate inregistrarile ei sunt comprimate i scrise pe disc ca o list inversata
comprimata. Din motive de eficien, este necesar s se menin, pentru fiecare termen din index
adresa de pe hard disk a aparitiei anterioare iar acest lucru se realizeaza in memoria principala.
Pentru fiecare aparitie (t, d, fd, t ) din datele de intrare dictionarul este interogat pentru a se
verifica daca termenul t exista. Adresa p de pe hard disk a aparitiei precedente a lui t este
obtinuta si un nou nod este adaugat in lista de adiacenta a lui t: (t, d, fd, t ,p). Cu toate acestea,
nregistrrile pentru un termen nu sunt stocate adiacent n fiierul corespunzator i listele nu
sunt
stocate n ordine lexicografic, dup cum este necesar n fiierul inversat final. Prin urmare, dup
ce toate documentele au fost procesate, un pas de post-procesare este necesar, n care toate listele
din index sunt traversate. Pasul de post-procesare ncepe prin alocarea unui al doilea fiier de pe
disc, apoi o travere a dictionarului va ordona index n ordine lexicografic. Deoarece pentru
fiecare termen adresa ultimei aparitii din lista sa este meninut n dictionar i fiecare aparitie
din lista este legat de predecesorul su, listele pentru un termen sunt preluate n ordine invers
i acumulate. Apoi, lista pentru termenul curent este determinata.Abordare poate fi usor
generalizata pentru a include si pozitiile cuvintelor.
Comparativ cu abordarea simpla de inversiune bazata pe memorie, abordarea bazat pe
disc folosete o singura trecere peste colecia de text, dar nc necesit ca un dictionar sa fie
pstrat n memoria principal. n cazul n care dictionarul este implementat ca un arbore gras,
fiecare nod al arborelui folosete 4 octei pentru stocarea adresei fiierului (i chiar mai multi

octei dac fiierul depete 2 GB), cel puin 2 octei pentru ft , 8 octei pentru cele dou
referine la alte noduri ale arborelui, i 4 octei pentru un pointer la termenul urmator.
Presupunnd c stocarea unui termen are nevoie de n medie, alti 8 bytes, dictionarul ocup n
jurul valorii de 74 MB pentru colectia Web V i 170 MB pentru colectia Web XX.
Pe de alt parte, economiile din memoria principal vin n detrimentul unor volume mari de
spatiu temporar pe disc. Un nod dintr-o lista inversata ocupa 4 octei pentru ID-ul documentului,
2 octei pentru f d, t i 4 octei pentru referinta la nodul anterior. Astfel, un nod cuprinde 10
octei i fiierele aferente listelor pentru colectia Web V i colectarea Web XX depasesc 1.3 Gb
i 5 Gb. Acest spaiu nu poate fi eliberat pn la sfritul pasului de post-procesare, deoarece
nu este posibil s se scrie listele inversate din nou in fisierul corespunzator. Spaiu suplimentar
temporar este necesar n cazul n care poziiile cuvintelor sunt indexate la randul lor, adugnd
in medie 6 octei per nod al listei. Mai mult, acceseaz la fisierul ce stocheaza listele este in
ordine aleatorie n timpul etapei de post-procesare. Datorit numrului mare de accese aleatorii la
disc, timpii de funcionare raportati nu sunt practici.
De exemplu, construcia unui index pentru o colecie de 276 Mb de articole din Wall Street
Journal dureaza mai mult de 2 zile. Aceste rezultate depind de performanta sistemului de calcul
care se poate imbunatati in timp, dar principala limitare timpul de acces la disc nu a crescut
considerabil in ultima perioada. Pentru a mbunti performana, o solutie este reducerea
numrului de accese aleatoarii la disc prin folosirea mai multor fiiere pentru listele de postari,
fiecare dintre acestea fiind suficient de mica pentru a fi pe deplin reprezentata n memoria
principal n timpul etapei de post-procesare. Fiecare fiier de postari corespunde la o gam
disjuncta de termeni si acumuleaz numai termeni care se ncadreaz n acea gama.Gamele sunt
alese astfel incat sa produce fiiere de dimensiuni uniforme. Cu toate acestea, mprirea n
fiiere separate crete activitatea discului n timpul parsarii colectiei i pstrarea datelor pe disc
reduce sansele pentru optimizarea acceselor de disc. Reducerea dimensiunii fiierului cu postari,
prin aplicarea de tehnici de compresie este, de asemenea, dificila deoarece fiecare nod trebuie s
fie n mod individual accesibil n timpul etapei de post-procesare. n ceea ce privete cifrele de
performan i parametrii indicai n tabelele 1 i 2, timpii de constructie ai indexului inversat
pentru aceasta abordare sunt:
T =ST t +C ( t p +t l ) +10 P t t +
Pt s /v+ 10 Pt t +

(Citiri, parsari, cautari in dictionar, scrierea listelor)


(Traversarea listelor)
(comprimari, scrierea indexului final)

I ( t c +t t )

n cazul n care mrimea fiierului postarilor depete dimensiunea memoriei principale


disponibile, adica, M <10P - L, o mapare complet a fiierului postarilor pe disc este imposibila.
Se noteaza, prin urmare, numrul de nregistrri care sunt preluate ntr-un singur acces aleator la
disc, cu v. Pentru inversarea colectiei Web V, aproximativ 9 minute dureaza parsarea colectiei n
termeni de index. Alte 3 minute sunt necesare pentru identificarea termenilor in lexicon. Scrierea

postarilor pe disc i a listelor finale inversate dureaza aproximativ 4 minute. Marea majoritate
din timpul total de rulare este timpul pentru traversarea fiierul de mapare atunci cand o mapare
completa este imposibila. De exemplu, n cazul n care doar jumtate din fisierul de postari poate
fi mapat n memorie i, prin urmare, v = 2, n jur de 7 zile sunt necesare pentru a cauta postarile
pe hard,ceea ce inseamna un timp total estimat de funcionare de aproximativ 7.3 zile pentru a
construi un fiier de index inversat pentru colectia Web V i 28.3 zile
pentru colectia Web XX. Pentru coleciile mici care pot fi mapate pe deplin n memorie, cu toate
acestea, abordarea bazat pe disc este potrivita, deoarece accese aleatoare disc nu sunt necesare
n timpul traversarii listelor. Listele pentru Biblie, de exemplu, reprezint mai puin de 6 Mb i
timpul prezis de rulare pentru inversiune este de aproximativ 3 secunde. Includerea poziiile
cuvintelor in index duce la fiiere mai mari, dar creterea general a timpului de funcionare nu
este considerabila.

Inversarea realizata in memorie cu parcurgere dubla


Un dezavantaj al abordrii bazate pe disc este c volumele mari de spaiu temporar sunt
necesare n timpul construciei indexului. Alternativa este o abordare de inversare in-memory
care utilizeaz compresia pentru a limita temporar utilizarea spaiului pe disc.
Aceast abordare folosete dou treceri peste datele de intrare si in continuare este
referita ca abordarea two-pass.
n prima trecere,vocabularul i statisticile colectiei de text sunt adunate. Numrul
de documente N, numrul de termeni distincti ai indexului n, precum i n frecvena f a fiearui
cuvant sunt determinate iar vocabularul este stocat n memorie. nainte de a doua trecere peste
colectie, un vector de biti este alocat n memorie pentru a stoca postari. Vectorul este mprit n
n partiii cu cate o partiie pentru fiecare termen al indexului. Intruct numrul de postri per
termen a fost determinat n prima trecere peste colectia de text, limitele partiiilor individuale i
dimensiunea global a vector de biti din memorie sunt uor de calculat pe baza statisticilor
adunate. In timpul a doua trecere, partiiile sunt ocupate cu postarile corespunztoare. n
comparaie cu abordarea bazat exclusiv pe disc, spatiul este salvat, deoarece postarile care
aparin aceluiasi termen din index nu trebuie s fie legate ntre ele, deoarece acestea sunt
adiacente ntr-o partiie. Cu toate acestea, fr comprimare, stocarea postarilor pentru colectia
Web V i colectia Web XX ar necesita n jurul valorii de 1 Gb sau 4 Gb de memorie principala,
care inpractica este prea mare. O reducere suplimentar a consumului de memorie principal este
posibil atunci cnd prima trecere peste colectia de text determin de asemenea si numrul
maxim de bii, care sunt necesari pentru a stoca postari pentru fiecare termen. Numrul exact de
bii necesari depinde de numarul real al documentelor, dar acesta nu pot fi colectate n timpul
primei treceri. Deoarece o partiie nu este uor de extins n cazul n care numerele comprimate
ale documentelor nu se ncap n spatiul pre-alocat, o limita superioara universala trebuie s fie
[ l og ((N f )/ f )]
calculata. Pentru codificarea Golomb, alegerea parametrului b=2
2

conduce la o limit superioar privind dimensiunea codurilor i garanteaza c listele inversate


vor incapea in partiiile corespunztoare pre-alocate.
Timpul anticipat de rulare pentru a construi un fiier de index inversat cu abordarea
two-pass este, din punct de vedere a parametrilor utilizai n tabelele 1 i n 2(unde
c 1.05 I ):
T =ST t +C ( t p +t l ) +
tp

St t +C ( +t l )+ I t c +

(prima trecere pentru adunarea statisticilor)


(a doua trecere, comprimarea in memorie)
(decomprimare, comprimare, scrierea indexului)

t
I t c + I ( c+t t )

Ipoteza care st la baza acestei abordri este c memoria principal este suficient de mare pentru

a gzdui vectorul pre-alocat de marime I mpreun cu dictionarul de dimensiune L i deci


ML+

I
. Pentru M = 256 Mb, se presupune c dictionarul i vectorul pentru cele dou

colecii de referin mai mici incap n memoria principal. Prima trecere peste colecia Web V
dureaz 12 minute. n timpul celei de-a doua trecere, colecia este citita din nou ceea ce dureaza
inca 12 de minute. Compresie de postri i decompresia vectorului pentru a obine listele
inversate
necesit putin peste 3 minute. Scrierea listelor inversate pe disc cere nca 2 minute. Timpul total
de funcionare pentru a construi indexul colectiei Web V este de 29 de minute, din care cea mai
mare parte a timpului este petrecut parsand colectia. Pentru inversarea colectiei Bibliei, vom
timpul de funcionare prezis este de mai puin de 4 secunde. Cu toate acestea, din cauza
dimensiunii vectorului din memorie, de aproximativ 730 Mb, care ar fi necesar, colectia Web XX
nu poate fi indexatata folosind doar 256 Mb de memorie principal. O modalitate de a
mbunti scalabilitatea abordarii two-pass este de a pre-aloca vectorul partiionat nu n
memoria principal, ci pe disc i de a mpri textul n mai multe transe.Dimensiunea fiecarei
transe este aleasa astfel incat s fie suficient de mica pentru a o putea inversa in memoria
principala. Cnd memoria principal este epuizata, transa curenta este imbinata in vector de pe
disc. Vector de pe disc este citit secvenial, adica bloc cu bloc, n memoria principal
iar blocurile sunt scrise la loc dup ce noi intrri din transa curenta au fost adugate.
Dup ce toate transele au fost procesate, spatiul nefolosit dintre listele inversate este compactat
la o trecere final secvenial peste fisier. n ultima etap, fiecare lista inversat este, de
asemenea, decomprimata si recomprimare folosind schema de compresie final a fiierului
inversat.

Pentru aceast schem de partiionare a textului, mai multe informaii trebuie s fie
colectate n timpul primei treceri peste colectia de text fata de ce este necesar pentru trecerea
folosita de metoda two-pass. Pentru fiecare transa, numrul de de documente si frecventa
termenilor in transa sunt determinate. Pe baza acestor statistici, vectorii din memorie
corespondenti fiecarei transe sunt mpriti n partiii i limitele partitiilor sunt calculate.
Statisticile fiecarei transe sunt stocate comprimat ntr-un fiier de pe disc care necesit
doar cativa megabiti pentru fiecare transa. Timpul anticipat de funcionare pentru a construi un
fiier inversat cu doua treceri avand in vedere aceasta abordare imbunatatita din punct de vedere
al parametrilor din tabelele 1 i 2 este :

(prima trecere pentru adunarea

T =S t t + C(t p +t l) +
t
S t t + C( p+t l )+3 I t c +2 l I (t s /b+t t ) +

statisticilor)
(a doua trecere)
(comprimarea indexului)

t s /b +t
( I + I ) ( t +t c )

unde l denota numarul de transe in care textul este impartit iar b denota marimea blocurilor de
date care sunt transferate intr-un singur acces la disc. Numarul de transe se determina prin

relatia: l=[ I /(M L)]


Pentru a estima timpul de funcionare necesar construirii unui index pentru colectia Web XX, se
face presupunerea c memoria principal este folosita doar pentru a inversa fiecare
transa, ignornd astfel memoria consumata de dictionar. Trei transe sunt procesate pentru
colectia Web XX. Prima trecere peste colectie ia un pic mai mult de 47 de minute. A doua trecere
de asemenea, cere n jur de 47 minute pentru a citi, analiza si a identifica termenii. Fiecare transa
este procesata n aproximativ 11 de minute. Compactarea fiierului inversat n ultimul pas al
algoritmului dureaza 17 minute, presupunnd c un buffer de intrare b de cel puin 64 Kb este
disponibil. Astfel, timpul totalul de constructie a indexuluiv este n jurul valorii de 144 minute
pentru colectia Web XX.

Potrebbero piacerti anche