Sys Inf 03 Manning w 05

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

7

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 k = 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

2

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 c =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 n 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


Wyszukiwarka

Podobne podstrony:
Sys Inf 03 Manning w 06
Sys Inf 03 Manning w 19
Sys Inf 03 Manning w 02
Sys Inf 03 Manning w 07
Sys Inf 03 Manning w 03
Sys Inf 03 Manning w 21
Sys Inf 03 Manning w 20
Sys Inf 03 Manning w 09
Sys Inf 03 Manning w 01
Sys Inf 03 Manning w 04
Sys Inf 03 Manning w 08
Sys Inf 03 Manning w 06
Sys Inf 03 Manning w 19
Sys Inf 03 Manning w 02
Sys Inf 03 Manning w 07
Sys Inf Manning w
mechanik operator pojazdow i maszyn rolniczych 723[03] o1 05 u
mechanik operator pojazdow i maszyn rolniczych 723[03] z2 05 n
mechanik operator pojazdow i maszyn rolniczych 723[03] z2 05 u

więcej podobnych podstron