1 Kompresja indeksu slajdy studenta Karola Tomaszewskiego (z drobnymi modyfikacjami)

Slides:



Advertisements
Podobne prezentacje
Kodowanie informacji Instytut Informatyki UWr Studia wieczorowe
Advertisements

Kodowanie informacji Instytut Informatyki UWr Studia wieczorowe
Wykład 5 Standardowy błąd a odchylenie standardowe
DYSKRETYZACJA SYGNAŁU
Imperatywne modele obliczeń Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do.
dr A Kwiatkowska Instytut Informatyki
Badania operacyjne. Wykład 1
Elementarne struktury danych Piotr Prokopowicz
Ciągi de Bruijna generowanie, własności
Reprezentowanie i przetwarzanie informacji przez człowieka i komputer. Patrycja Białek.
DVB-S Tomasz Barkowiak Maciej Januszewski Paweł Krzyszkiewicz
Liczby Pierwsze - algorytmy
B. znaki alfabetu D. obrazy
Alokacja pamięci struct Test {char c; int n; double x; } st1; st1 cnxcnx
Ukryte indeksowanie semantyczne SVD Struktury danych
Pliki i foldery, jednostki informacji
Zapis informacji Dr Anna Kwiatkowska.
Klasyfikacja dokumentów za pomocą sieci radialnych Paweł Rokoszny Emil Hornung Michał Ziober Tomasz Bilski.
Klasyfikacja dokumentów za pomocą sieci radialnych Paweł Rokoszny Emil Hornung Michał Ziober Tomasz Bilski.
Mechanizm kompresji danych w SQL Server 2008
Transmisja modemowa Xmodem, Ymodem, Zmodem.
Gra Scrabble ® na urządzenie Nokia N800 Autor: Michał Filipowicz Promotor: dr inż. Jerzy Zaczek Konsultant: mgr inż. Krzysztof Rzecki.
Kod Graya.
Bezpieczeństwo danych
Technika Mikroprocesorowa 1
Technika Mikroprocesorowa 1
opracowanie: Agata Idczak
Podstawy redagowania dokumentów tekstowych
Zbiór do posortowania mieści się w pamięci
Elementy Rachunku Prawdopodobieństwa i Statystyki
TABLICE C++.
Ocena przydatności algorytmu – czas działania (złożoność czasowa)
Modele obliczeń i granice obliczalności Copyright, 1999 © Jerzy R. Nawrocki Wprowadzenie.
Zastosowania ciągów.
Mikroprocesory.
Mikroprocesory mgr inż. Sylwia Glińska.
System dwójkowy (binarny)
Radosław Kaczyński Wrocław 2006
Programowanie strukturalne i obiektowe
  Prof.. dr hab.. Janusz A. Dobrowolski Instytut Systemów Elektronicznych, Politechnika Warszawska.
Posługiwanie się systemami liczenia
Pisemne dzielenie liczb naturalnych.
„Wszystko powinno być wykonane tak prosto jak to możliwe, ale nie prościej.” Albert Einstein.
Matematyka i system dwójkowy
schemat tworzenia kodu liczby dwójkowej z dziesiętnej
Systemy plików Bibliografia: Windows XP. Komendy i polecenia. Praktyczne przykłady, P. Czarny Windows XP. Naprawa i optymalizacja, B. Danowski Windows.
Systemy operacyjne i sieci komputerowe
Podstawy arytmetyki komputerowej Paweł Perekietka
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski 1 informatyka +
Programowanie Niskopoziomowe
System plików.
Dwójkowy system liczbowy
T. 3. Arytmetyka komputera. Sygnał cyfrowy, analogowy
Danuta Stanek KODOWANIE LICZB Systemy liczenia III.
I T P W ZPT 1 Kodowanie stanów to przypisanie kolejnym stanom automatu odpowiednich kodów binarnych. b =  log 2 |S|  Problem kodowania w automatach Minimalna.
Algorytmy Genetyczne Anna Tomkowska Politechnika Koszalińska
Algorytmy kodowania Shannona-Fano i Huffmana
Kompresja danych Instytut Informatyki UWr Studia dzienne Wykład nr 3: kody Golomba, kody Tunstalla.
Algorytm kodowania arytmetycznego
Kompresja danych Instytut Informatyki UWr Studia dzienne Wykład nr 2: rozszerzone i dynamiczne Huffmana.
Optymalna konfiguracja Microsoft SQL Server 2014
METODY REPREZENTOWANIA IFORMACJI
Modelowanie model związków encji
CZYM JEST KOD BINARNY ?.
Seminarium Dyplomowe: Metodyka i Techniki Programowania Autor: Bartłomiej Fornal.
K ODY ZMIENNEJ DŁUGOŚCI Alfabet Morsa Kody Huffmana.
Podstawy Informatyki.
Technika Mikroprocesorowa 1
Zbiory rozłączne.
ALGORYTMY I STRUKTURY DANYCH
Zapis prezentacji:

1 Kompresja indeksu slajdy studenta Karola Tomaszewskiego (z drobnymi modyfikacjami)

2 Co przed nami? Dwie główne części Jak zmniejszyć rozmiar listy wskaźników, aby nie tracić przy dekodowaniu dużo czasu? Jak zmniejszyć rozmiar słownika, aby znaczna jego część mieściła się w pamięci operacyjnej?

3 Kilka pojęć termy#dokumentówid dokumentów ambitious13 be brutus14 capitol14 caesar13 did enact14 hath23 4 i Słownik (ang. dictionary) Lista wskaźników (ang. postings)

4 Część pierwsza Kompresja listy wskaźników (ang. posting compression)

5 Przykładowy model 1 korpus powyższego modelu będzie zajmował 6 GB 500,000#różnych termów m 6 bajty na term (uwzględniamy wszystkie znaki) 1,000#termów w dokumencie L 1,000,000#dokumentów n wartośćstatystyczniesymbol

6 Długość id dokumentu

7 Spostrzeżenie Zamiast pamiętać wszystkie id dokumentów w których wystąpiło dane słowo, wystarczy pamiętać tylko pierwszy z nich, a później już tylko odstępy (ang. gaps) między kolejnymi dokumentami. Przykład computer computer

8 Reprezentacja odstępów unarna binarna binarna jednoznaczna kodowanie kodowanie Golomba

9 Reprezentacja odstępów c.d. Unarna: liczba n jako 1 n 0 binarna jednoznaczna: n jako 0 m bin(n), gdzie m= log n +1, bin(n) to binarna reprezentacja liczby n; kodowanie: n jako 0 m 1 s(n), gdzie m= log n, a bin(n)=1s(n); kodowanie Golomba rzędu m dla liczby n: q= n / m r = n - q m (reszta z dzielenia n / m) KodGolomba(n) = 1 q 0 bin(r) UWAGA: reprezentacja r jest czasem nieco bardziej oszczędna… UWAGA2: Jak reprezentować 0? Czy to potrzebne?

10 Asymptotyczne własności Tw. [Gallager, van Voorhis 75] Kod Golomba rzędu m jest optymalnym kodem prefiksowym dla ciągów losowych liczb naturalnych o rozkładzie P(i)=(1-p)p i-1, gdy m = - log(1+p) / log p w przybliżeniu (dla p bliskiego 1): m = - 1 / log p

11 Asymptotyczne własności Tw. [Elias 75] Dla każdego rozkładu pbb P={p 1, p 2, …} takiego, że p i p i+1 dla każdego i > 0, H(P) <, gdzie H(P)= - i=1,2,3,… p i log p i oznacza entropię, zachodzi E( (P)) 2H(P)+1 3H(P) gdzie E( (P))= i=1,2,3,… p i | (i)| oznacza średnią długość kodu. Wniosek. Kod jest co najwyżej 3 razy dłuższy od optymalnego kodu prefiksowego, dla każdego rozkładu prawdopodobieństw!

12 Zyski Aby oszacować stopień kompresji dla kodowania musimy wiedzieć jak termy są rozproszone w korpusie. Mówi o tym następujące prawo Zipfa: Częstotliwość -tego słowa w korpusie ( ) jest proporcjonalna do (przy czym zakładamy, że słowa są poukładane zgodnie z częstotliwością występowania). Wyrażamy to wzorem:

13 Zyski cd. Ponieważ jest odwrotnie proporcjonalne do to istnieje stała taka, że: Dobieramy stałą tak, aby zachodziła równość jak pamiętamy (ilość różnych termów)

14 Wyliczanie stałej c Stąd gdzie jest -tą liczbą harmoniczną Zatem

15 Wyliczanie stałej c Zatem częstotliwość -tego termu z grubsza wynosi: To oznacza, że średnia ilość wystąpień -tego termu w dokumencie (z termami) wynosi:

16 Zyski cd. Wiemy już z jaką częstotliwością występują termy w korpusie. Dzięki temu możemy określić jak długie będą odstępy poszczególnych termów, oraz ile miejsca zajmie lista wskaźników.

17 Zyski cd. Podzielmy sobie teraz termy w słowniku na bloki długości (zakładamy, że odstępy dla danego termu mają taką samą długość). Term wystąpi średnio w dokumencie r razy: r 1 gdy w pierwszym bloku, gdy w drugim bloku, gdy w trzecim bloku, itd.

18 Zyski cd. Zatem odstępy w pierwszym bloku będą miały długość 1, w drugim 2, w trzecim 3, itd. Ponieważ liczba wszystkich dokumentów wynosi n, to w j -tym bloku jest n/j odstępów długości j. Kodując odstępy dla termu w j -tym bloku potrzeba bitów.

19 Zyski cd. Żeby zakodować cały blok potrzebujemy bitów. Wszystkich bloków jest m/J. Dlatego plik z listą wskaźników będzie zapisany na następującej ilości bitów:

20 Zyski cd. W naszym modelu będzie to odpowiednio:

21 Kompresja listy wskaźników raz jeszcze Wszystkie metody kompresji (listy wskaźników) korzystają z listy odstępów, a nie pełnej listy adresów dokumentów. Podzielimy te metody na dwie kategorie: globalne i lokalne.

22 Kodowania globalne unarne binarne Golomba γ δ Huffmana i arytmetyczne

23 Kodowania lokalne Golomba skośne Golomba Huffman interpolacja (przykład: [7;3,8,9,11,12,13,17])

24 Zestawienie przedstawionych metod

BibleGNUbibComactTREC Globalne unarna binarna Golomb 9,8611,0610,9012,30 γ 6,515,684,486,63 δ 6,235,084,356,38 Huffman 5,904,824,205,97 Lokalne Golomb 6,096,165,405,84 sk Golomb 5,654,704,205,44 Huffman 5,584,644,025,41 interpolacja 5,243,983,875,18

26 Część druga Kompresja słownika (ang. dictionary compression)

27 Jak duży jest słownik V ? Słownik (w odróżnieniu od listy wskaźników) jest najczęściej trzymany w pamięci operacyjnej. Największy słownik angielski ma ponad 500,000 słów.

28 Jak duży jest słownik V ? W naszym przypadku lepsze przybliżenie m=|V| uzyskamy korzystając z prawa Heapa, które szacuje rozmiar słownika względem rozmiaru korpusu według wzoru: gdzie N to liczba termów w korpusie, k jest stałą z przedziału [30,100], b 0,5.

29 Przykładowy model 2 Teraz korpus będzie miał rozmiar N= 2GB. Z poprzedniego modelu zaczerpniemy sobie średnią długość termu, która wynosi 6 bajtów (pod uwagę bierzemy wszystkie znaki).

30 Szacowanie m Przyjmijmy k=30, wtedy mamy: UWAGA: Termy które zawierają cyfry, bądź literówki będziemy pomijać (ponieważ znacznie zwiększyło by to rozmiar słownika).

31 Co pamiętamy? termy#dokumentówid dokumentów ambitious13 be brutus14 capitol14 caesar13 did enact14 hath23 4 i bajtów 4 bajty

32 Sposób 1 Każde słowo będziemy pamiętać w tablicy o rozmiarze 20 bajtów. Na częstotliwość występowania słowa oraz listę wskaźników zarezerwujemy po 4 bajty. W naszym modelu będziemy potrzebować

33 Sposób 1 – wady Ponieważ średnia długość słowa w jęz. ang. wynosi 8, to marnujemy na każdym wyrazie (średnio) 12 bajtów. Wyrazy takie jak: hydrochlorofluorocarbons, supercalifragilisticexpialidocious mają więcej niż 20 liter, przez co nie są one wyszukiwalne w takim podejściu.

34 Sposób 1 – poprawka Słowa będziemy pamiętać jako jeden długi string.

35 Co zyskaliśmy? Teraz dodatkowo musimy pamiętać początek każdego słowa. Potrzebujemy do tego celu 3 bajty. Zamiast pamiętać 20 bajtów, pamiętamy (średnio) tylko 8 bajtów (na słowo) plus 3 bajty (na początek słowa). Zatem oszczędzamy 45%

36 Co zyskaliśmy? Po kompresji słownik zajmuje 500,000( ) 9,5MB (nieskompresowany zajmował 14MB ).

37 Dzielenie na bloki Podzielmy słownik na bloki. Każdy z nich będzie miał k słów. Wystarczy, że będziemy pamiętać gdzie zaczyna się pierwsze słowo z bloku (oszczędzamy dzięki temu (k – 1)3 bajtów). Musimy także pamiętać długość wszystkich słów (czyli po jednym dodatkowym bajcie na każde słowo).

38 Dzielenie na bloki – przykład

39 Rozmiar słownika 8,59 MB16 8,68 MB8 8,87 MB4 9,0 MB2 9,5 MB1 Rozmiar słownikaWielkość bloku k

40 Czy warto? Każde zwiększenie wielkości bloku ( k ) pociąga za sobą zmniejszenie słownika. Im większe k tym bardziej czasochłonne wyszukiwanie. Przykład. Dla m=8 wykonujemy średnio około 2,6 operacji przy binarnym przeszukiwaniu, 3 operacje gdy k=4. Zwiększając k możemy dowolnie blisko dojść do minimum, które wynosi 500,000( )=8,5MB

41 Kompresja ekstremalna Jeśli ustawimy słowa alfabetycznie to powstaną grupy słów, które będą miały wspólny prefix. Możemy zapisać najpierw owy prefix, a następnie poszczególne końcówki.

42 Przykład

43 Kompresja ekstremalna – cd. Dla bardzo dużych słowników nawet taki rodzaj kompresji nie zdoła pomieścić wszystkiego w pamięci operacyjnej. Dlatego też większość słowników jest dzielona na strony i zapisywana na dysku w postaci B+ drzewa. Ponieważ i tak musimy czytać z dysku listę wskaźników to jedno dodatkowe czytanie nie spowolni nas za bardzo.

44 Inne pomysły na kompresję Poprzez rezygnację z niektórych informacji o słowach bardzo łatwo można zmniejszyć rozmiar indeksu. Rezygnacja z wielkości liter, oraz tzw. stemming, pozwalają zredukować liczbę termów do 40%, listę wskaźników do 10-20%, a cały indeks do 30% !

45 Inne pomysły na kompresję Skorzystanie ze stop words również daje bardzo dobre wyniki. Użycie 30 słów na takiej liście zmniejsza rozmiar indeksu o 30%, użycie 150 słów o dodatkowe 25%.

46 Podsumowanie ReprezentacjaRozmiar korpus 6 GB macierz incydencji termów 62,5 GB kodowanie (listy wskaźników) 1 GB słownik – bez kompresji 14 MB długi string 9,5 MB dzielenie na bloki 9 MB

47 Koniec. Dziękuję za uwagę.