background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

KOMPRESJA INDEKSU

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Dlaczego kompresujemy 
(ogólnie)?

Użycie mniejszej przestrzeni dyskowej

Oszczędzenie nieco pieniędzy

Trzymamy więcej rzeczy w pamięci

Wzrasta prędkość

Rośnie prędkość transferu danych z dysku do 
pamięci

[czytanie skompresowanych danych | 
dekompresja] jest szybsze niż   [czytanie 
nieskompresowanych danych]

Założenie: Algorytmy dekompresji są szybkie

Prawdziwe dla stosowanych tu algorytmów

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Dlaczego kompresja dla 
indeksów odwrotnych?

Słownik

Zmniejszenie ich do wielkości mieszczącej się w PO

Takie zmniejszenie aby jakieś listy wystąpień też 
zmieściły się w PO

Zbiór (zbiory) wystąpień

Redukcja potrzebnej przestrzeni dyskowej

Zmniejszenie czasu potrzebnego do czytania list 
wystąpień z dysku

Duże search engines trzymają znaczącą część listy 
wystąpień w pamięci.

Kompresja pozwala trzymać więcej w pamięci

Omówimy różne specyficzne dla IR metody 
kompresji

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Przypomnienie kolekcji Reuters 
RCV1

symbol statystyka  wartość

N  documents   800,000

L  avg. # tokens per doc  200

M terms (= word types)  ~400,000

                 avg. # bytes per token6

                    (incl. spaces/punct.)

                 avg. # bytes per token4.5

            

(without spaces/punct.)

                 avg. # bytes per term 7.5

                 non-positional postings
100,000,000

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Parametry indeksu vs. co 
indeksujemy 

(szczegóły IIR Table 5.1, 

p.80)

rozmiar

Typ słowo 

(termy)

Wystąpienia  

niepozycyjne

Wystąpienia 

pozycyjne

dictionary

non-positional index  positional index

Size 

(K)

%

cumul 

%

Size (K)

∆ 

%

cumu

l %

Size (K) ∆ 

%

cumul 

%

Unfiltered

484

109,971

197,87

9

No numbers

474

-2

-2 100,680

-8

-8

179,15

8

-9

-9

Case folding

392

-

17

-19

96,969

-3

-12

179,15

8

0

-9

30 

stopwords

391

-0

-19

83,390

-

14

-24

121,85

8

-

31

-38

150 

stopwords

391

-0

-19

67,002

-

30

-39

94,517

-

47

-52

stemming

322

-

17

-33

63,812

-4

-42

94,517

0

-52

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Bezstratna vs. stratna 
kompresja

Bezstratna kompresja: Cała informacja jest 
zachowana.

To przeważnie stosujemy w IR.

Stratna kompresja: tracimy pewne informacje

Kilka kroków preprocesingu można uważać za 
stratną kompresję: tylko małe litery, stop słowa, 
stemming, eliminacja liczb.

Później: Przycinanie wejść do wystąpień 
mających małe szanse być wśród k na początku 
list odpowiedzi.

Prawie brak strat jakości dla k najwyższych 
odpowiedzi.

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Słownik vs. Rozmiar kolekcji

Jak duży jest słownik termów?

To znaczy ile różnych słów tam jest?

Czy możemy przyjąć górne ograniczenie?

W rzeczywistości nie: co najmniej 70

20

 = 10

37

 

różnych słów o długości  20

W praktyce, słownik rośnie ze wzrostem 
rozmiarów kolekcji

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Słownik vs. Rozmiar kolekcji

Prawo Heapsa: M = kT

b

M to rozmiar słownika, T jest liczbą 
tokenów w kolekcji

Typowe wartości: 30 ≤ k ≤ 100 i b ≈ 0.5

Na wykresie log-log rozmiaru słownika  M 
od T, prawo Heapsa przewiduje linię z 
nachyleniem około  ½

To jest najprostsza możliwa relacja między 
dwiema wartościami w log-log przestrzeni

Empiryczne określenie  (“empirycznego 
prawa”)

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Prawo Heapsa

Dla RCV1, linia kropkowana

log

10

M = 0.49 log

10

T + 1.64

 

jest najlepszym dop. 

min 

średni błąd kwadratowy.
Więc, 

M = 10

1.64

T

0.49

 a

 k = 

10

1.64 

≈ 44 i b = 0.49.

Dobre empiryczne 
dopasowanie dla Reuters 
RCV1 !
Dla pierwszych 1,000,020 
tokenów, prawo przewiduje 
38,323 termów; aktualnie 
jest, 38,365 termów

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Prawo Zipfa

Prawo Heapsa podaje rozmiar słownika dla 
kolekcji.

Badamy także względną częstość termów.

W językach naturalnych: jest bardzo mało 
bardzo częstych słów i bardzo wiele bardzo 
rzadkich słów.

Prawo Zipfa: i-ty najbardziej częsty term ma 
częstość proporcjonalną do  1/i .

cf

i

 ∝ 1/i = K/i gdzie K jest stałą normalizującą

cf

i

 jest częstością kolekcji: liczbą wystąpień 

termu t

i

 w kolekcji.

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Konsekwencje prawa Zipfa

Jeśli najczęstszy term (the) wystąpi cf

1

 razy 

To drugi najczęstszy term (of) wystąpi  cf

1

/2 razy

Trzeci najczęstszy  (and) wystąpi cf

1

/3 razy … 

Równoważnie: cf

i

 = K/i gdzie K jest stałą 

normalizującą, więc

log cf

i

 = log K - log i

Liniowa zależność między log cf

i

 i  log i

To kolejne prawo potęgowe

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Prawo Zipfa dla Reuters RCV1

12

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Kompresja

Obecnie rozpatrzymy kompresję dla 
słownika i wystąpień

Tylko dla podstawowego indeksu 
boolowskiego

Bez studiowania pozycyjnych 
indeksów, itd.

Rozpatrzymy schematy kompresji

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

KOMPRESJA SŁOWNIKA

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Po co kompresować słownik?

Wyszukiwanie zaczyna się od słownika

Chcemy go trzymać w pamięci

Konkurowanie o pamięć z innymi 
aplikacjami

Embedded/mobile urządzenia mogą mieć 
bardzo mało pamięci

Nawet gdy słownik nie jest pamięci, 
chcemy aby był mały dla szybszego 
szukania

Więc kompresja słownika jest ważna

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Pamięć słownika – pierwsze 
cięcie

Tablice ze stałym rozmiarem wejść

~400,000 terms; 28 bytes/term = 11.2 MB.

Struktura wyszukiwawcza 

słownika

20 bajtów 4 bajty każdy

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Termy o ustalonej długości są 
marnotrawstwem 

Większość bajtów kolumnie Term jest 
zmarnowanych – przypisujemy 20 bajtów dla 
termów  1-literowych.

I ciagle nie możemy obsłużyć 
supercalifragilisticexpialidocious lub 
hydrochlorofluorocarbons.

Pisany angielski to średnio ~4.5 
znaków/słowo.

Średnie słowo w słowniku angielskim: ~8 
znaków

Jak możemy użyć  ~8 znaków na term słownika?

Krótkie słowa dominują wśród tokenów.

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Kompresowanie listy termów: 
Słownik jako string

….systilesyzygeticsyzygialsyzygyszaibelyiteszczecinszomo….

Freq. 

Postings ptr. Term ptr. 

33 

 

 

29 

 

 

44 

 

 

126 

 

 

 

 

Całkowita długość łańcucha =

400K x 8B = 3.2MB

Wskaźniki potrzebne dla 3.2M

wystąpień: log

2

3.2M =

22bits = 3bytes

Pamiętaj słownik jako (długi) łańcuch znaków:

Wskaźnik do następnego słowa pokazuje 

koniec bieżącego słowa

Nadzieja na oszczędzenie 60% poj. słownika.

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Przestrzeń dla słownika jako 
łańcucha

4 bajty na term dla Freq.

4 bajty na term dla wskaźnika do 
wystąpień.

3 bajty na wskaźnik termu

Średnio  8 bajty na term w łańcuchu

400K termów x 19  7.6 MB (zamiast 

11.2MB dla stałej długości)

 Teraz śr. 11

 bytes/term,

 nie 20.

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Blokowanie

Pamiętaj wskaźniki do każdego kth 
łańcucha termów.

Przykład poniżej: k=4.

Trzeba pamiętać długości termów (1 
dodatkowy bajt)

….

7

systile

9

syzygetic

8

syzygial

6

syzygy

11

szaibelyite

8

szczecin

9

szomo….

Freq. 

Postings ptr. Term ptr. 

33 

 

 

29 

 

 

44 

 

 

126 

 

 

 

 

 

 

Oszczędzamy 9

 bajtów na 3
 wskaźnikach.

Tracimy 4 bajty na

długości termów.

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Zysk netto

Przykład dla rozmiaru bloku k = 4

Gdy użyliśmy 3 bajtów/wskaźnik bez 
blokowania

3 x 4 = 12 bajtów,

Teraz używamy 3 + 4 = 7 bajtów.

Wyrwaliśmy kolejne ~0.5MB. To redukuje 
rozmiar słownika z 7.6 MB do 7.1 MB.
Możemy oszczędzić więcej dla większego k.

Dlaczego nie zwiększyć  k?

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Przeszukiwanie  słownika bez bloków

Zakładając, że każdy 
term słownika jest 
jednakowo 
prawdopodobny w 
pytaniu (nie jest tak w 
rzeczywistości!), średnia 
liczba porównań = 

(1+2∙2+4∙3+4)/8 ~2.6

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Przeszukiwanie słownika z 
blokami

Binarne szukanie do 4-termowych bloków;

Następnie liniowe szukanie termów blokach.

Bloki  4 termowe (drzewo binarne), średnio 

(1+2∙2+2∙3+2∙4+5)/8 = 3 porównania

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Kodowanie frontowe

kodowanie frontowe:

Sortowane słowa zwykle mają długie 
przedrostki – pamiętaj tylko różnice

(dla ostatnich k-1 w bloku o długości k)

8

automata

8

automate

9

automatic

10

automati

on

8

automat*a

1

e

2

ic

3

io

n

koduje automat

Dodatkowa długość 
poza automat.

Zaczyna przypominać ogólną kompresję łańcuchów.

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Podsumowanie kompresji 
słownika RCV1 

Technika

Rozmiar w 

MB

Ustalona długość

11.2

Słownik jako łańcuch ze wskaźnikami 
do każdego termu

7.6

To samo z blokowaniem = 4

7.1

To samo z blokowaniem + kodowanie 

frontowe

5.9

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

KOMPRESJA WYSTĄPIEŃ

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Kompresja wystąpień

Zbiór wystąpień jest znacznie większy niż słownik, 
co najmniej 10 razy.

Główna zasada: pamiętaj każde wystąpienie 
zwięźle.

Wystąpienie dla naszych celów to docID.

Dla Reuters (800,000 dokumentów), możemy 
użyć  32 bity na docID jeśli użyjemy 4-bajtowych 
integer.

Alternatywnie, możemy użyć log

2

 800,000 ≈ 20 

bitów na docID.

Nasz cel: uzycie o wiele mniej niż 20 bitów na 
docID.

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Wystąpienia: dwie 
przeciwstawne tendencje

Term taki jak arachnocentric zdarzy się 
może raz na milion dokumentów – 
możemy pamiętać to wystąpienie stosując 
log

2

 1M ~ 20 bits.

Term taki jak  the zdarzy się w każdym  
doc, więc 20 bitów/wystąpienie jest zbyt 
drogie.

Preferowany jest wektor 0/1 w tym przypadku 

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Wejścia do zbioru wystąpień

Pamiętamy listę docs zawierających term 
w rosnacym porządku docID.

computer: 33,47,154,159,202 …

Konsekwencja: wystarczy pamiętać 
odstępy.

33,14,107,5,43 …

Nadzieja: wiekszość odstępów może być  
kodowana/pamiętana na znacznie mniej 
niż 20 bitach.

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Trzy wejścia dla wystąpień

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Kodowanie zmiennej długości

Cel:

Dla arachnocentric, użyjemy ~20 bitów/wejście 
odstępu .

Dla the, użyjemy ~1 bit/wejście odstępu.

Jeśli średnii odstęp dla termu jest  G, chcemy 
użyć ~log

2

G bitów/wejście odstępu.

Główne wyzwanie: kodować każdy integer 
(odstęp) za pomocą około tak małej liczby bitów 
ile potrzeba dla tego integer.

To wymaga 

kodowania zmiennej długości

Kodowanie zmiennej długości uzyskujemy przez 
użycie krótkich kodów dla małych liczb

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Kodowanie Variable Byte (VB) 

Dla odstępu o wartości G, chcemy użyć najmniej 
bajtów potrzebnych do pamiętania log

G bitów

Zaczynamy od jednego bajtu do pamiętania G i 
poświęcamy 1 bit jako kontynuacyjny bit c

Jeśli G ≤127, koduj binarnie na 7 dostępnych 
bitach i ustaw =1

W przeciwnym przypadku koduj G’s mniej 
znaczących 7 bitów i następnie użyj 
dodatkowych bajtów do kodowania bardziej 
znaczących bitów stosując ten sam algorytm

Na koniec ustaw kontynuacyjny bit w ostatnim 
bajcie na 1 (c =1) – a dla pozostałych bajtów c 
= 0.

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Przykład

docIDs

824 

829 

215406

odstępy

5

214577

kodowanieVB 

00000110 

10111000 

10000101 

00001101 

00001100 

10110001

Odwołania pamiętane jako konkatenancja bajtów

000001101011100010000101000011010000110010110001

Kluczowa własność: VB-kodowane wystąpienia są 
jednoznacznie dekodowalne metodą prefiksową.

Dla małych odstępów (5),
VB używa całych bajtów.

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Inne zmienne kody 
jednostkowe

Zamiast bajtów, możemy także użyć inne 
“jednostki przypisania”: 32 bitowe (words), 16 bits, 
4 bits (nibbles).

Zmienne bajtowe przypisania pojemność jeśli 
mamy wiele małych odstępów – nibbles są wtedy 
lepsze.

Kodowane zmienno bajtowe:

Używane przez wiele komercyjnych/naukowych 
systemów

Dobre do kodowania zmiennej długości i dobre do 
porównań (vs. Kodowanie na poziomie bitów - później).

Są też niedawne prace na temat pakowania 
zmiennej liczby odstępów do jednego słowa

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Kod jedynkowy

Przedstaw jako n jedynek z końcowym zerem.

Jedynkowy kod dla 3 to 1110.

Jedynkowy kod dla 40 to

111111111111111111111111111111111111111

10 .

Jedynkowy kod dla 80 to:

111111111111111111111111111111111111111

1111111111111111111111111111111111111
11110

Nie wyglada to obiecująco, ale….

35

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Kody Gamma

Możemy dobrze kompresować na poziomie bitów

Kod Gamma jest najlepszy ze znanych.

Przedstaw odstęp G jako parę długość i offset

offset to G binarnie, z początkowym bitem 
usuniętym

Np.: 13 → 1101 → 101

długość to długość przesunięcia (offsetu)

Dla  13 (offset 101), to jest 3.

Kodujemy długość kodem jedynkowym: 1110.

Gamma kod dla 13 to konkatenancja długości i 
offset: 1110101

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Gamma code examples

number

length 

offset 

-code

0

none

1

0

0

2

10

0

10,0

3

10

1

10,1

4

110 

00

110,00

9

1110

001

1110,001

13

1110

101

1110,101

24

11110

1000

11110,1000

511

111111110

11111111

111111110,11111111

1025

11111111110 000000000

1

11111111110,000000000

1

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Własności kodu Gamma

G jest kodowane z użyciem 2 log G + 1 bitów

Długość offsetu jest log G bitów

Zakodowanie długości wymaga log G + 1 bitów

Wszystkie kody gamma  nieparzystą liczbę 
bitów

Prawie zawsze ze współczynnikiem 2 najlepsze 
możliwe, log

2

 G

Kod gamma jest jednoznacznie dekodowalny 
przedrostkowo, jak VB

Kod gamma może być stosowany dla 
dowolnego rozkładu

Kod gamma nie ma parametrów

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Gamma jest praktyczne rzadko 
używany

Maszyny mają długości słów – 8, 16, 32, 64 
bitów

Operacje,  które działają na różnych słowach są 
wolniejsze

Kompresja i manipulowanie na poziomie bitów 
może być wolna

Kodowanie zmienno bajtowe jest bardziej 
dopasowane a więc potencjalnie efektywniejsze

Pominąwszy efektywność, zmienne bity są 
koncepcyjnie prostsze a wzrost pamięci jest 
niewielki

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Kompresja RCV1

Struktura danych 

Rozmiar 

w  MB

słownik, ustalona długość

11.2

słownik, wskaźniki termów w łańcuchu

7.6

Z blokowaniem, k = 4

7.1

Z blokowaniem & kodowaniem frontowym

5.9

Kolekcja (text, xml markup itd)

3,600.0

Kolekcja (text)

960.0

Term-doc macierz incydencji

40,000.0

wystąpienia, bez kompresji (32-bit words)

400.0

wystąpienia, bez kompresji (20 bits)

250.0

wystąpienia, kodowanie zmienno bajtowe

116.0

wystąpienia, kodowanie

101.0

background image

Introduction to Information 
Retrieval

Introduction to Information 
Retrieval

 

 

 

 

Kompresja indeksu - 
podsumowanie

Możemy zbudować indeks dla bardzo 
efektywnego wyszukiwania boolowskiego z 
bardzo różną efektywnością użycia pamięci

Tylko 4% całego rozmiaru kolekcji

Tylko 10-15% całkowitego rozmiaru text w 
kolekcji

Jednak zignorowaliśmy informację o 
pozycjach

Więc oszczędność pamięci dyskowej jest 
mniejsza w praktyce

Ale stosowane techniki są w zasadzie takie same.


Document Outline